我創建了HTML5的流分段的MP4,使用下面的命令零碎的MP4創作:沖洗和延遲問題與FFMPEG
-i rtsp://172.20.28.52:554/h264 -vcodec copy -an -f mp4 -reset_timestamps 1 -movflags empty_moov+default_base_moof+frag_keyframe -loglevel quiet -
- 「-i RTSP://172.20.28.52:554/h264「,因爲來自IP攝像頭的rtp數據包流中的源是h264。 爲了測試起見,相機的GOP設置爲1(即所有的幀都是關鍵幀)
- 「-vcodec copy」,因爲我不需要轉碼,只能重新轉換成mp4。
- 「-movflags empty_moov + default_base_moof + frag_keyframe」根據媒體源擴展規範創建分段mp4。
- 「 - 」在最後爲了輸出mp4到標準輸出。我抓取輸出並通過網絡套接字發送給Web客戶端。
一切工作正常,期待着我試圖解決的延遲問題。 如果我記錄一個數據是從標準輸出進來,與到來的時間戳每一次,我得到這樣的輸出:
16/06/2015 15:40:45.239獲得數據的大小= 24
16/06/2015 15:40:45.240得到數據的大小= 7197
16/06/2015 15:40:45.241得到的數據大小= 32768
16/06/2015 15:40:45.241得到的數據大小= 4941
16/06/2015 15 :40:45.241得到的數據大小= 12606
16/06/2015 15:40:45.241得到數據的大小= 6345
16/06/2015 15:40:45.241得到數據的大小= 6339
16/06/2015 15:40:45.242得到數據的大小= 6336
16/06/2015 15:40:45.242得到數據的大小= 6361
16/06/2015 15:40:45.242得到數據大小= 6337
16/06/2015 15:40:45.242得到數據的大小= 6331
16/06/2015 15:40:45.242得到數據的大小= 6359
16/06/2015 15:40:45.243得到數據的大小= 6346
16/06/2015 15:40:45.243得到數據的大小= 6336
16/06/2015 15:40:45.243得到數據的大小= 6338
16/06/2015 15:40:45.243得到的數據大小= 6357
16/06/20 15 15:40:45.243得到數據的大小= 6357
16/06/2015 15:40:45.243得到數據的大小= 6322
16/06/2015十五點40分45秒。243得到數據的大小= 6359
16/06/2015 15:40:45.244得到數據的大小= 6349
16/06/2015 15:40:45.244得到數據的大小= 6353
16/06/2015 15:40:45.244得到數據的大小= 6382
16/06/2015 15:40:45.244得到數據的大小= 6403
16/06/2015 15:40:45.304得到數據的尺寸= 6393
16/06/2015 15:40:4 5.371了數據的尺寸= 6372
16/06/2015 15:40:45.437得到數據的大小= 6345
16/06/2015 15:40:45.504得到數據的大小= 6352
16/06/2015 15:40:45.571得到數據的大小= 6340
16/06/2015 15:40:45.637得到數據的大小= 6331
16/06/2015 15:40:45.704得到數據的尺寸= 6326
16/06/2015 15:40 :45.771得到數據的大小= 6360
16/06/2015 15:40:45.838得到數據的大小= 6294
16/06/2015 15:40:45.904得到數據的大小= 6328
16/06/2015 15:40:45.971得到數據的大小= 6326
16/06/2015 15:40:46.038得到數據的大小= 6326
16/06/2015 15:40:46.105得到的數據大小= 6340
16/06/2015 15: 40:46.171得到數據的大小= 6341
16/06/2015 15:40:46.238得到數據的大小= 6332
正如你可以看到,第一線23(其包含約1.5秒的數據的視頻)幾乎立即到達,然後每2個連續行之間的延遲爲〜70ms,這是合理的,因爲視頻是每秒15幀。 此行爲引入大約1.5秒的延遲。
它看起來像一個潮紅的問題,因爲我沒有看到任何理由爲什麼ffmpeg需要保存內存中的前23幀,特別是因爲每個幀都是它自己在mp4內部的一個片段。 但是,我無法找到任何會導致ffmpeg更快地刷新此數據的方法。
有沒有人有建議?
我想指出,這是一個後續的問題這一個: Live streaming dash content using mp4box
我想到,你可以控制用於緩衝輸出的'blocksize'。檢查http://www.ffmpeg.org/ffmpeg-all.html#toc-pipe,看看是否調整該值可以幫助你。 –
@PabloMontilla我試圖玩一些塊大小不同的值,雖然它以某種方式影響輸出,但它並沒有解決初始延遲問題。 – galbarm
Hello @galbarm!我無法使用你的'ffmpeg'參數在頁面上運行視頻,總是得到'跳過無法識別的頂層框:ftyp'。 (h264 ip cam)。我還嘗試將'-vcodec'更改爲'libx264',這種情況下,我得到了'跳過無法識別的頂級盒子:mdat'。你能否更詳細地描述你的代碼或者將它放在什麼地方?最有趣的部分是'.addSourceBuffer'參數,即編解碼器字符串。提前致謝! – zarkone