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
に何かを追加する必要がありますか?