node.js基於FFMPEG視訊推流測試詳解
本文主要介紹了詳解NODEJS基於FFMPEG視訊推流測試,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。
以ffmpeg為核心,包裝一款區域網路內接收轉碼並推送網路的客戶端軟體。本文僅使用ffmpeg基礎功能,拉流、轉碼、推流及簡單播放設定。
工作流程
拉取遠端視訊串流,視訊串流格式為rtsp
-
轉換為常用播放格式rtmp
推送至播放埠rtmp://您的推播位址,使用者使用播放軟體連接該位址後可以直接進行內容播放
所需工具及軟體
1、ffmpeg 命令列工具官網連結,選擇它的優點在於:
免費
無安裝,很大的減少使用者操作複雜度
命令列啟動呼叫
#2、nodejs 版本號為v6.11.3。 (實際專案中使用electron,但若沒有打包成客戶端的需求,nodejs即可正常運作)
3、tsc 版本號為 v2.6.1。專案使用TypeScript為主要編寫語言,您使用JavaScript也沒有問題。
若使用tsc,請使用2.0以上版本,自帶的@type工具會大幅提升編碼效率
4、fluent-ffmpeg 版本號為v2. 1.2。此nodejs套件封裝了ffmpeg的命令列呼叫部分,加強了程式碼的可讀性,若熟悉ffmpeg 命令列使用手冊,亦可不使用該包。
npm install --save fluent-ffmpeg //使用js编码的用户,可以忽略下条命令 npm install --save @types/fluent-ffmpeg
VLC播放軟體。用於監測推流、轉碼、播放是否正常。官網連結
實作程式碼
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]; //设置输入流地址 let ffCommand = ffmpeg(command.inputPath) //设置输出流地址 .output(command.outputPath) //因需要打包客户端软件,故而将ffmpeg打包进软件中 //需设置各应用程序的对应路径 //若仅在本机使用,可以跳过该步骤 //设置环境变量,添加 PATH 即可 .setFfmpegPath(ffmpegPath) .setFfprobePath(ffprobePath) .setFlvtoolPath(flvtoolPath) //为保证灵活性,非必须参数采用配置文件读取模式 .size(command.size); for(let key in command.args){ ffCommand.outputOption(command.args[key]); } ffCommand.on("start",(commandLine)=>{ //commandLine 为实际上调用的命令行命令,拼接逻辑为 //您的ffmpeg所在路径 -i inputOptions 您的拉流协议和路径 outputOptions 推送流协议和地址 //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); }) }
小結
透過監聽"start"取得的指令,也可以透過exec(yourCommandLine) 進行呼叫操作,但此時無法控制ffmpeg 的運作結果。該程式結束運行之後,ffmpeg進程仍在運行,直至流報錯或手動停止進程。暫時不清楚為何 fluent-ffmpeg 可以做到在本體進程結束後,通知關閉第三方進程。猜測是透過命令列輸入切斷進程,若僅透過 ChildProcess.kill() 是無法關閉第三方進程。
在I5 8G 機器上運作,單流推送已佔用35%左右cpu,多流推送需使用其他方案解決。
相關推薦:
以上是node.js基於FFMPEG視訊推流測試詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

PHPFFmpeg擴充安裝指南:簡單易懂的教學在網站開發的過程中,有時候我們需要處理各種多媒體文件,例如音訊、視訊等。而FFmpeg是一個功能強大的多媒體處理工具,它可以處理音訊、視訊等多種格式,並且支援各種轉碼、剪切等操作。 PHPFFmpeg擴充則是在PHP中呼叫FFmpeg功能的擴充函式庫,使用它可以很方便地處理多媒體檔案。以下我們將詳細介紹PHPF
