ブログ

AVコーデックミドルウェアで低フレームレートの動作再生ができない

at_takuya.sasaki
2016年6月5日 18時33分

Armadillo-840のAVコーデックミドルウェアを利用して、H.264/AAC形式のファイルを再生しようとしても、動画再生が行われない場合の対処方法です。

15.6. デコード

上記マニュアルを参考にしてArmadillo-840のLCDとオーディオ出力を利用してビデオとオーディオを再生した場合に、以下のような表示のまま再生が行われない場合がありました。

[root@armadillo840-0 (ttySC2) ~] gst-launch-1.0 filesrc location=./test.mp4 ! qtdemux name=demux0 demux0.audio_0 ! \
queue ! acmaacdec ! audioresample ! audio/x-raw,rate=48000,channels=2 \
! alsasink device=hw:1 demux0.video_0 ! queue ! acmh264dec ! \
video/x-raw,width=800,height=480 ! acmfbdevsink device=/dev/fb1

同様な症状にぶつかった場合、再生したmp4ファイルのフレームレートを調べてみてください。 (PC上でmp4ファイルのプロパティを見ることで確認することができます。)

もしmp4ファイルのフレームレートが16FPS以下の場合、パイプラインに「max-size-time=0 」を追加することで解消される可能性があります。

[root@armadillo840-0 (ttySC2) ~] gst-launch-1.0 filesrc location=./test.mp4 ! qtdemux name=demux0 demux0.audio_0 ! \
queue max-size-time=0 ! acmaacdec ! audioresample ! audio/x-raw,rate=48000,channels=2 \
! alsasink device=hw:1 demux0.video_0 ! queue ! acmh264dec ! \
video/x-raw,width=800,height=480 ! acmfbdevsink device=/dev/fb1

本現象は、acmh264dec, acmaacdec の間で、Buffer を下流に流し始めるまでに必要な上流から受ける Buffer 数に差があり、この差による影響から、 qtdemux が下流に Buffer を 流さなくなるため発生します。ビデオ再生だけの場合には発生しません。

以上