2017-04-02 13 views
0

私はC920カメラからオーディオとビデオをキャプチャするためのパイプラインを用意していますが、これは非常に単純な処理(低いCPU要件)を行い、再圧縮し、ファイル。flvmuxはオーディオと同じレートでビデオをプルしません

これは、パイプラインの概要です:私の '簡単な処理' の領域を心配しないでください

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

Bad Pipeline

。私の全体的なCPUは25%未満のCPUを占めています。

私が見つけたのは、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 

=== EXPERIMENT ===

私は黄色を削除私はビデオをキャプチャしていたので、結果はよかったです。私はちょうど「成長し続けている」キューがなく、出力ビデオは完璧でした。

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

=== === QUESTIONで何が起こっているのか

私の推測では、Q3(ビデオ出力)がいっぱいになっているので、オーディオが遅くなるはずです。 Q4がいっぱいで、Q5ではないので、ATSエンコーダが圧縮できるよりも速くATSAがオーディオを生成している必要があります。 しかし、私のCPU使用率は非常に低いです - 私は2つのaacエンコーダ(voaacencとavenc_aac)とMP3エンコーダを使ってみましたが、すべて同じ問題があります。

======== UPDATE私はPTSをオーディオ、およびビデオ(直後)の後にアイデンティティ要素のカップルを入れて、グラフ化しました

=========その出力の。あなたは彼らが非常に迅速にお互いから漂い始めるのを見ることができます。ビデオが30秒になる頃には、オーディオは21秒でかなり遅れています。 は、ここでは、第2のカメラを有し、その上にスワップ

チャート

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

OK、解決済み問題。あなたはラズベリーパイ、でもV3を使用している場合:)

を読んで誰のために - あなたはuvch264srcに超えない3650000(3.65Mbps)にpeak-bitrateを構成していることを確認してください。私も24khzでオーディオをキャプチャしています - もしあなたがそれをやっていなければ、あなたはもう少し音を出すことができます。

これ以上設定するか、まったく省略すると、同じ問題が発生します。ビデオ映像の動きや高精細度により、符号化されたH264はPiが処理できるものを抜いてしまいます。だからあなたの問題は奇妙で散発的です。

私はC920がUSBバスを飽和させているとしか思えません.USB2は480Mbpsまで良好であると考えられています。私が設定した制限は3.65Mbpsです。 私はラズベリーが非常に欠陥のあるUSBファームウェアブロブを持っていると聞いたことがありますが、今までこれまで遭遇したことはありませんでした。

問題を解決しました。私はドラゴンボードへの移動を検討しています...これは私に最も良い理由を与えているかもしれません。

関連する問題