我有一個管道,旨在捕捉來自C920攝像機的音頻和視頻,做一個非常簡單的處理(低cpu要求),然後重新壓縮並將其複用到文件。flvmux不拉動視頻的速度與音頻相同
這是管道的大致輪廓:
Platform:
- Raspberry Pi 3
- Debian Jessie
- GStreamer 1.8
不要擔心我 '簡單處理' 區域。我的CPU總量低於25%。
我發現,Q3和Q4緩慢地開始填充,直到一個達到閾值,然後我的音頻全部斷斷續續(並且我從alsasrc'下行不警告消耗緩衝區速度不夠快')。 我可以在隊列中發現泄漏,但這很難解決問題。
由於我的流水線正在運行,這是我的隊列的樣子(以毫秒當前級別的時間)
QUEUE CONTENTS IN MILLISECONDS
TIME(s) Q1 Q2 Q3 Q4 Q5 Q6
0 0 0 0 0 0 0
5 0 0 252 380 0 0
10 0 0 293 460 0 0
15 0 0 332 470 0 0
20 0 0 378 451 0 0
25 0 0 333 460 0 0
30 0 0 383 480 0 0
35 0 0 500 550 0 0
40 0 0 500 610 0 0
45 0 0 539 630 0 0
50 0 0 584 670 0 0
===實驗===
我刪除了黃色管道的腿,這樣我只能捕捉視頻,結果會更好。我沒有保持「成長」的隊列 - 輸出視頻是完美的。
QUEUE CONTENTS IN MILLISECONDS
TIME(s) Q1 Q2 Q3 Q4 Q5 Q6
0 0 0 0 0 0 0
5 0 0 2 0 0 0
10 0 0 5 0 0 0
15 0 0 8 0 0 0
20 0 0 8 0 0 0
25 0 0 8 0 0 0
30 0 0 8 0 0 0
35 0 0 8 0 0 0
40 0 0 8 0 0 0
45 0 0 8 0 0 0
50 0 0 8 0 0 0
而且,我嘗試以下管道(我省略從圖中的隊列),與圓滿成功 - 視頻記錄至少10分鐘沒有問題。
===問題===
這是怎麼回事?
我的猜測是,因爲Q3(視頻輸出)填滿了,那麼音頻必須放慢速度。 由於Q4填滿了,而不是Q5 - 這意味着alsa比aac編碼器可以更快速地產生音頻,這是否正確? 但是,我的CPU使用率非常低 - 我嘗試過使用2個aac編碼器(voaacenc和avenc_aac)以及一個MP3編碼器,所有問題都一樣。
======== UPDATE =========
我把一對夫婦的身份元素的音頻和視頻(直接後),並繪製了PTS的產出。你可以看到他們很快開始相互漂移。當視頻在30秒時,音頻在21秒後落後。 這裏是一個圖表
======== UPDATE 2 =========
我有一個第二照相機,和交換,超過,並且問題消失了。音頻和視頻PTS值保持同步至少25分鐘。 這款新相機的區別在於它是一款改裝的C920,配有定製鏡頭。鏡頭巧合地被完全拉出焦點 - 這就是固定PTS漂移(如果我聚焦定製鏡頭,我得到相同的PTS漂移)。
所以 - 這個問題已經有所改變:爲什麼焦點對準的C920相機漂移其PTS如此糟糕? 注意:我正在關閉自動曝光,並將曝光絕對值設置爲默認值250. 但我更希望能夠使用自動曝光,但是...
可能有關係嗎? https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=165002 – Adam
你是否在處理任何與時間戳有關的事情? – Velkan
另外:你處理有一個'appsink'?如果您啓動'GST_DEBUG'變量,是否有關於延遲計算的日誌? – Velkan