web-dev-qa-db-ja.com

ffmpegを使用してH.264フレームをデコードする際のエラー

H.264ベースのリモートエンドから受信したH.264フレームをデコードすると、次のエラーが表示されますSIP=ビデオコール。エラーを理解する上で助けてください。

non-existing PPS 0 referenced
decode_slice_header error
non-existing PPS 0 referenced
decode_slice_header error
no frame!

non-existing PPS 0 referenced
decode_slice_header error
non-existing PPS 0 referenced
decode_slice_header error
no frame!
33
John Qualis

これは、ffmpegがまだSPSおよびPPS情報を保持するキーフレームを認識していないことを意味します。SPSおよびPPSは着信フレーム/スライスのデコードに重要です。キーフレームは定期的に(つまり5〜10秒以上)送信されるため、キーフレームが到着する前にストリームに参加したことが判明した場合、キーフレームが表示されるまですべてのフレームに対してこの警告が表示されます。

キーフレームがワイヤから表示されるとすぐに、ffmpegにはそのフレーム(および次のキーフレームまでの後続のフレーム)をデコードするのに十分な情報があるため、これらの警告は消えます。

29
Aki

フレームを追加する必要がありますspsおよびpps情報。 ffmpegは、デコードを行うためにこれらの情報を必要とします。これらの値はSDPファイルにあります。

SDPファイルでは、NALユニットを見る必要があります。z0IAHukCwS1xIADbugAzf5GdyGQl、aM4xUgのようなものが表示されます。

これらの値は64エンコードされているため、16進形式に変換する必要があります。私はwiresharkを使用していますが、wiresharkはこれらの値を自動的に変換します。その後、spsとppsの値があります。

次に、データフレームの前にこれらのNal情報を追加する必要があります。

00 00 00 01 sps 00 00 00 01 pps 00 00 00 01データ

h264の場合、これらの形式はデコードに使用されています。

2
Yasin SOYASLAN

フレームまたはスライスをデコードするために、sliceHeaderがデコードされます。これはPPSまたは「Picture Parameter Set」を参照します。幅などのフレームの詳細に関する情報があります。高さなど.

あなたのデータはストリーミング入力チャンネルを介して送られていると思います。その場合、SPSとPPSはストリームの早い段階で送信されていたでしょう。

同じものをストリームに連結する必要がある場合があります。

2
Ganesh