2017-12-28 75 views
0

video-toolboxを使用してh264ストリームをデコードするiOSアプリケーションを作成しています。私はPC上でffmpegでストリームを作り、RTPを使ってiPhoneに送ります。このコマンドを使用して作成するとうまく動作します。-12909イントラリフレッシュを使用したh264ストリームのデコードでエラーが発生する

ffmpeg -y -f:v rawvideo -c:v rawvideo -s 1280x720 -pix_fmt bgra -r 30 -an -i - -pix_fmt yuv420p -c:v libx264 -tune zerolatency -preset fast -b:v 5M -refs 1 -g 30 -profile:v high -level 4.1 -f rtp rtp://192.168.1.100:5678 

iPhoneはすべてのフレームを受信して​​表示します。しかし、私はVTDecompressionSessionDecodeFrame()が呼び出されたときに、イントラリフレッシュ

-intra-refresh 1 

復号化は、エラーコード-12909(シミュレータ上-8969)で失敗したときに有効。

UDPパケットを処理してNALユニットを抽出するので、このプロセスを3回チェックして、このコード部分で問題を破棄しました。

Video-toolboxはイントラリフレッシュをサポートしていないため、Video-toolboxはイントラリフレッシュをサポートしていますか?もしそうなら、私はffmpeg側でVideo-toolboxによってサポートされていないストリームを作る何かを逃していますか? CMVideoFormatDescriptionCreateFromH264ParameterSets()を使用してSPSおよびPPSデータを作成する以外に、CMVideoFormatDescriptionRefに何かを追加する必要がありますか?

答えて

0
  1. はい、ビデオツールボックスがイントラリフレッシュ
  2. いいえ、
  3. をffmpegのとは何の関係もありません、CMVideoFormatDescriptionRef

で特別な何かをする必要はありませんをサポートし、私はそれを考え出しました私はSPSとPPSのNALUを受信するたびに新しいVTDecompressionSessionを作成していたので、デコーダはコンテキストを失っていました。

この場合、完全なIフレームはSPSとPPSの直後に受信されるため、以前のフレームからのコンテキストは必要ないため、イントラリフレッシュなしで動作していました。

イントラリフレッシュがイネーブルの場合、最初のフレームだけが完全なIフレームであるため、デコーダは前のフレームのコンテキストに依存し、同じVTDecompressionSessionを使用する必要があります。

関連する問題