最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解NODEJS基于FFMPEG視頻推流測試

 更新時(shí)間:2017年11月17日 14:24:55   作者:不會(huì)爬樹的猴  
本篇文章主要介紹了詳解NODEJS基于FFMPEG視頻推流測試,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

以ffmpeg為核心,包裝一款局域網(wǎng)內(nèi)接收轉(zhuǎn)碼并推送互聯(lián)網(wǎng)的客戶端軟件。本文僅使用ffmpeg基礎(chǔ)功能,拉流、轉(zhuǎn)碼、推流及簡單播放設(shè)置。

工作流程

  1. 拉取遠(yuǎn)端視頻流,視頻流格式為 rtsp
  2. 轉(zhuǎn)換為常用播放格式 rtmp
  3. 推送至播放端口 rtmp://您的推送端地址,用戶使用播放軟件連接該地址后可以直接進(jìn)行內(nèi)容播放

所需工具及軟件

1、ffmpeg 命令行工具官網(wǎng)鏈接,選擇它的優(yōu)勢在于:

  1. 免費(fèi)
  2. 無需安裝,很大的減少用戶操作復(fù)雜度
  3. 命令行啟動(dòng)調(diào)用

2、nodejs 版本號為 v6.11.3。(實(shí)際項(xiàng)目中使用electron,但若沒有打包成客戶端的需求,nodejs即可正常運(yùn)行)

3、tsc 版本號為 v2.6.1。項(xiàng)目使用TypeScript為主要編寫語言,您使用JavaScript也沒有問題。

若使用tsc,請使用2.0以上版本,自帶的@type工具會(huì)極大提升編碼效率

4、fluent-ffmpeg 版本號為 v2.1.2。該nodejs包封裝了ffmpeg的命令行調(diào)用部分,加強(qiáng)了代碼的可讀性,若熟悉ffmpeg 命令行使用手冊,亦可不使用該包。

  npm install --save fluent-ffmpeg
  //使用js編碼的用戶,可以忽略下條命令
  npm install --save @types/fluent-ffmpeg 

VLC播放軟件。用于監(jiān)測推流、轉(zhuǎn)碼、播放是否正常。官網(wǎng)鏈接

實(shí)現(xiàn)代碼

  const ffmpegPath = "./dist/ffmpegProgram/bin/ffmpeg.exe";
  const ffprobePath = "./dist/ffmpegProgram/bin/ffprobe.exe";
  const flvtoolPath = "./dist/ffmpegProgram/bin/ffplay.exe";

  export function startPushVideo():void{
    getCommands().then((commands:ffmpegPaths[])=>{
      for(let key in commands){
        let command = commands[key];
        //設(shè)置輸入流地址
        let ffCommand = ffmpeg(command.inputPath)
        //設(shè)置輸出流地址
        .output(command.outputPath)
        //因需要打包客戶端軟件,故而將ffmpeg打包進(jìn)軟件中
        //需設(shè)置各應(yīng)用程序的對應(yīng)路徑
        //若僅在本機(jī)使用,可以跳過該步驟
        //設(shè)置環(huán)境變量,添加 PATH 即可
        .setFfmpegPath(ffmpegPath)
        .setFfprobePath(ffprobePath)
        .setFlvtoolPath(flvtoolPath)
        //為保證靈活性,非必須參數(shù)采用配置文件讀取模式
        .size(command.size);
        for(let key in command.args){
          ffCommand.outputOption(command.args[key]);
        }
        ffCommand.on("start",(commandLine)=>{
          //commandLine 為實(shí)際上調(diào)用的命令行命令,拼接邏輯為
          //您的ffmpeg所在路徑 -i inputOptions 您的拉流協(xié)議和路徑 outputOptions 推送流協(xié)議和地址
          //ffmpeg -i "rtsp://yourPullUrl" -f flv -r 25 -s 640x480 -an "rtmp://yourPushUrl"
          console.log('[' + showTime() + '] Vedio is Pushing !');
          console.log('[' + showTime() + '] Spawned Ffmpeg with command !');
          console.log('[' + showTime() + '] Command: ' + commandLine);
        })
        .on('error', function(err, stdout, stderr) {
          console.log('error: ' + err.message);
          console.log('stdout: ' + stdout);
          console.log('stderr: ' + stderr);
        })
        .on('end', function() {
          console.log('[' + showTime() + '] Vedio Pushing is Finished !');
        })
        .run();
      }
    },(error)=>{
      console.log('error: ' + error);
    })
  }

小結(jié)

通過監(jiān)聽"start"獲取的命令,亦可以通過 exec(yourCommandLine) 進(jìn)行調(diào)用操作,但此時(shí)無法控制 ffmpeg 的運(yùn)行結(jié)果。該程序結(jié)束運(yùn)行之后,ffmpeg進(jìn)程依然在運(yùn)行,直至流報(bào)錯(cuò)或手動(dòng)停止進(jìn)程。暫時(shí)不清楚為何 fluent-ffmpeg 可以做到在本體進(jìn)程結(jié)束后,通知關(guān)閉第三方進(jìn)程。猜測是通過命令行輸入切斷進(jìn)程,若僅通過 ChildProcess.kill() 是無法關(guān)閉第三方進(jìn)程。

在I5 8G 機(jī)器上運(yùn)行,單流推送已占用35%左右cpu,多流推送需使用其他方案解決。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入解析Nodejs中的大文件讀寫

    深入解析Nodejs中的大文件讀寫

    這篇文章主要介紹了深入解析Nodejs中的大文件讀寫,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Node解決簡單重復(fù)問題系列之Excel內(nèi)容的獲取

    Node解決簡單重復(fù)問題系列之Excel內(nèi)容的獲取

    這篇文章主要給大家介紹了關(guān)于利用Node解決簡單重復(fù)問題系列之Excel內(nèi)容獲取的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧。
    2018-01-01
  • Node.JS用純JavaScript生成圖片或滑塊式驗(yàn)證碼功能

    Node.JS用純JavaScript生成圖片或滑塊式驗(yàn)證碼功能

    有一些Node.JS圖片生成類庫,比如node-captcha等的類庫,需要c/c++程序生成圖片。跨平臺(tái)部署不是很方便。這里介紹幾個(gè)用純JS實(shí)現(xiàn)的圖片驗(yàn)證碼生成模塊,需要的朋友可以參考下
    2019-09-09
  • 一文學(xué)會(huì)如何升級npm管理的各依賴版本

    一文學(xué)會(huì)如何升級npm管理的各依賴版本

    npm在前端開發(fā)流程中提供了非常完善的自動(dòng)化工具鏈,已成為每個(gè)前端開發(fā)者必備的工具,下面這篇文章主要給大家介紹了關(guān)于如何升級npm管理的各依賴版本,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Node.js使用express寫接口的具體代碼

    Node.js使用express寫接口的具體代碼

    這篇文章主要介紹了Node.js使用express寫接口,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Node.js開發(fā)之訪問Redis數(shù)據(jù)庫教程

    Node.js開發(fā)之訪問Redis數(shù)據(jù)庫教程

    這篇文章主要介紹了Node.js開發(fā)之訪問Redis數(shù)據(jù)庫教程,本文講解了安裝Redis的Node.js驅(qū)動(dòng)、編寫測試程序以及npm遠(yuǎn)程服務(wù)器連接十分緩慢的解決方法,需要的朋友可以參考下
    2015-01-01
  • Node.js進(jìn)階之核心模塊https入門

    Node.js進(jìn)階之核心模塊https入門

    在nodejs中,提供了 https 這個(gè)模塊來完成 HTTPS 相關(guān)功能。這篇文章主要介紹了Node.js進(jìn)階之核心模塊https入門,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 開箱即用的Node.js+Mysql模塊封裝實(shí)現(xiàn)詳解

    開箱即用的Node.js+Mysql模塊封裝實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了開箱即用的Node.js+Mysql模塊封裝實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Express + Session 實(shí)現(xiàn)登錄驗(yàn)證功能

    Express + Session 實(shí)現(xiàn)登錄驗(yàn)證功能

    本文主要介紹在 Express 框架中,如何使用 Session 來實(shí)現(xiàn)用戶登錄身份驗(yàn)證。對express session實(shí)現(xiàn)登錄驗(yàn)證相關(guān)知識,感興趣的朋友一起看看吧
    2017-09-09
  • 用C/C++來實(shí)現(xiàn) Node.js 的模塊(一)

    用C/C++來實(shí)現(xiàn) Node.js 的模塊(一)

    這篇文章的主要內(nèi)容其實(shí)簡而言之就是——用C/C++來實(shí)現(xiàn) Node.js 的模塊,非常的不錯(cuò),有需要的朋友可以參考下
    2014-09-09

最新評論

汉源县| 娄烦县| 桂林市| 安宁市| 克拉玛依市| 南皮县| 永康市| 闽清县| 余江县| 长岭县| 怀仁县| 涞源县| 平利县| 泸定县| 青神县| 宁津县| 杭锦旗| 德州市| 廊坊市| 西宁市| 青海省| 澄江县| 开封市| 于都县| 温州市| 永宁县| 武夷山市| 满洲里市| 景泰县| 龙山县| 晋州市| 东乡县| 岢岚县| 舞阳县| 巍山| 方城县| 台北县| 进贤县| 荣昌县| 汽车| 厦门市|