亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實時將HTTP流傳輸到HTML5視頻客戶端的最佳方法

實時將HTTP流傳輸到HTML5視頻客戶端的最佳方法

Cats萌萌 2019-11-21 10:40:24
我真的很想了解使用node.js將ffmpeg實時輸出流到HTML5客戶端的最佳方法,因為有很多變量在起作用,而且我在這個領域沒有很多經驗,花了很多小時嘗試不同的組合。我的用例是:1)IP攝像機RTSP H.264流由FFMPEG采集,并使用節點中的以下FFMPEG設置重新混合到mp4容器中,并輸出到STDOUT。這僅在初始客戶端連接上運行,因此部分內容請求不會嘗試再次產生FFMPEG。2)我使用節點http服務器捕獲STDOUT并根據客戶端請求將其流式傳輸回客戶端。當客戶端第一次連接時,我產生了上面的FFMPEG命令行,然后將STDOUT流通過管道傳遞到HTTP響應。我使用以下HTTP標頭(在流式傳輸預先記錄的文件時也使用并起作用)3)客戶端必須使用HTML5視頻標簽。我沒有流傳輸回放的問題(使用fs.createReadStream和206 HTTP部分內容)到HTML5客戶端,該視頻文件以前是使用上述FFMPEG命令行記錄的(但保存到文件而不是STDOUT),所以我知道FFMPEG流是正確的,甚至在連接到HTTP節點服務器時,我什至可以在VLC中正確看到視頻直播。但是,嘗試通過節點HTTP從FFMPEG進行實時流傳輸似乎要困難得多,因為客戶端將顯示一幀然后停止。我懷疑問題是我沒有將HTTP連接設置為與HTML5視頻客戶端兼容。我已經嘗試了多種方法,例如使用HTTP 206(部分內容)和200個響應,將數據放入緩沖區中,然后在沒有運氣的情況下進行流式傳輸,因此,我需要回到第一個原則,以確保將其正確設置道路。這是我對這應該如何工作的理解,如果我錯了,請糾正我:1)應該設置FFMPEG來分割輸出并使用一個空的moov(FFMPEG frag_keyframe和empty_moov mov標志)。這意味著客戶端不會使用moov原子,該原子通常位于文件末尾,而在流傳輸時無關緊要(文件末尾),但是這意味著沒有可能的查找,這對我的用例來說很好。2)即使我使用MP4片段和空白的MOOV,我仍然必須使用HTTP部分內容,因為HTML5播放器將等到整個流下載完畢后再播放,而實時流永遠不會結束,因此無法使用。3)我不明白為什么在實時流式傳輸時將STDOUT流傳輸到HTTP響應為什么仍然不起作用,如果我保存到文件中,則可以使用類似的代碼輕松地將此文件流式傳輸到HTML5客戶端。也許這是一個定時問題,因為FFMPEG生成需要一秒鐘才能啟動,連接到IP攝像機并將塊發送到節點,并且節點數據事件也不規則。但是,字節流應與保存到文件完全相同,并且HTTP應該能夠應付延遲。4)當從相機流式傳輸FFMPEG創建的MP4文件時,從HTTP客戶端檢查網絡日志時,我看到有3個客戶端請求:對視頻的常規GET請求,HTTP服務器返回大約40Kb,然后是部分內容請求,其字節范圍為文件的最后10K,然后最終請求為中間的位未加載。也許HTML5客戶端一旦收到第一個響應,便要求文件的最后部分加載MP4 MOOV原子?如果是這種情況,將無法進行流式傳輸,因為沒有MOOV文件,也沒有文件結尾。5)在嘗試實時流式傳輸時檢查網絡日志時,我收到了一個中止的初始請求,僅收到了200個字節,然后再次發出了200字節的中止請求,而第三個請求的長度只有2K。我不明白為什么HTML5客戶端會中止請求,因為字節流與從記錄的文件流式傳輸時可以成功使用的字節流完全相同。似乎節點也沒有將其余的FFMPEG流發送到客戶端,但是我可以在.on事件例程中看到FFMPEG數據,因此它正在到達FFMPEG節點HTTP服務器。6)盡管我認為將STDOUT流傳輸到HTTP響應緩沖區應該可以,但是我是否必須構建一個中間緩沖區和流,以允許HTTP部分內容客戶端請求像正常(成功)讀取文件時一樣正常工作?我認為這是我遇到問題的主要原因,但是我不確定在Node中如何最好地進行設置。而且我不知道如何在文件末尾處理客戶端對數據的請求,因為沒有文件末尾。7)我在嘗試處理206個部分內容請求時走錯了軌道,并且這應該在正常的200個HTTP響應下起作用嗎?HTTP 200響應對于VLC可以正常工作,因此我懷疑HTML5視頻客戶端僅適用于部分內容請求嗎?由于我仍在學習這些東西,因此很難解決該問題的各個層次(FFMPEG,節點,流,HTTP,HTML5視頻),因此任何指針將不勝感激。我已經花了數小時在此站點和網絡上進行研究,但我還沒有遇到能夠在節點中進行實時流式傳輸的任何人,但我不能成為第一個,而且我認為這應該可以工作(以某種方式!)。
查看完整描述

3 回答

  • 3 回答
  • 0 關注
  • 2528 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號