2017-04-02 105 views
0

我有一個管道,旨在捕捉來自C920攝像機的音頻和視頻,做一個非常簡單的處理(低cpu要求),然後重新壓縮並將其複用到文件。flvmux不拉動視頻的速度與音頻相同

這是管道的大致輪廓:

Platform: 
- Raspberry Pi 3 
- Debian Jessie 
- GStreamer 1.8 

Bad Pipeline

不要擔心我 '簡單處理' 區域。我的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分鐘沒有問題。

Good Pipeline

===問題===

這是怎麼回事?

我的猜測是,因爲Q3(視頻輸出)填滿了,那麼音頻必須放慢速度。 由於Q4填滿了,而不是Q5 - 這意味着alsa比aac編碼器可以更快速地產生音頻,這是否正確? 但是,我的CPU使用率非常低 - 我嘗試過使用2個aac編碼器(voaacenc和avenc_aac)以及一個MP3編碼器,所有問題都一樣。

======== UPDATE =========

我把一對夫婦的身份元素的音頻和視頻(直接後),並繪製了PTS的產出。你可以看到他們很快開始相互漂移。當視頻在30秒時,音頻在21秒後落後。 這裏是一個圖表

A/V drift

======== UPDATE 2 =========

我有一個第二照相機,和交換,超過,並且問題消失了。音頻和視頻PTS值保持同步至少25分鐘。 這款新相機的區別在於它是一款改裝的C920,配有定製鏡頭。鏡頭巧合地被完全拉出焦點 - 這就是固定PTS漂移(如果我聚焦定製鏡頭,我得到相同的PTS漂移)。

所以 - 這個問題已經有所改變:爲什麼焦點對準的C920相機漂移其PTS如此糟糕? 注意:我正在關閉自動曝光,並將曝光絕對值設置爲默認值250. 但我更希望能夠使用自動曝光,但是...

+0

可能有關係嗎? https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=165002 – Adam

+0

你是否在處理任何與時間戳有關的事情? – Velkan

+0

另外:你處理有一個'appsink'?如果您啓動'GST_DEBUG'變量,是否有關於延遲計算的日誌? – Velkan

回答

0

好吧,我已經解決了問題。對於任何人閱讀:)

如果您使用的是樹莓派,甚至是V3 - 確保你有你的uvch264src配置peak-bitrate不超過3650000(3.65Mbps)。我也在24khz捕捉音頻 - 如果你不這樣做,你可能會多出一點。

如果您將其設置得更多,或者完全忽略它,您將會遇到同樣的奇怪問題。視頻畫面中的運動和高細節將導致編碼的H264超出Pi可以處理的內容。所以你的問題將是古怪而零星的。

我只能認爲C920已經飽和了USB總線 - 很奇怪,因爲USB2應該可以達到480Mbps - 我設置的限制是3.65Mbps。 我聽說樹莓有一個非常有缺陷的USB固件blob - 但從來沒有遇到過,直到現在。

問題解決。我一直在考慮轉向龍牌,這可能給我最好的理由呢。