web-dev-qa-db-ja.com

複数のPPSおよびSPSを備えたH264

各I-Frameの直前に、SPS(シーケンスパラメータセット)とPPS(画像パラメータセット)の順序でH264ストリームを生成するカードがあります。 H264ストリームには、最初のIフレームにPPSとSPSが含まれています。

これはお勧めですか?デコーダー/マルチプレクサーは通常、複数のPPSおよびSRSをサポートしますか?

13
Paul Knopf

H.264には、さまざまなストリーム形式があります。 1つのバリエーションは「付録B」と呼ばれます。

(AUD)(SPS)(PPS)(I-Slice)(PPS)(P-Slice)(PPS)(P-Slice)...(AUD)(SPS)(PPS)(I-Slice)。

通常、各Iフレームの前にSPS/PPSが表示され、他のスライスの前にPPSが表示されます。

ほとんどのデコーダー/マルチプレクサーは、「付録B」とSPS/PPSの繰り返しに満足しています。

フォーマットとSPS/PPSを途中で変更した場合、ほとんどのデコーダー/マルチプレクサーは意味のあることを何もしません。

ほとんどのデコーダー/マルチプレクサーは、セットアッププロセスの一部として最初のSPS/PPSを解析し、後続のSPSを無視します。

一部のデコーダー/マルチプレクサーは、(AUD)、開始コード、およびSPS/PPSのないH.264を好みます。次に、デコーダー/マルチプレクサーのセットアップの一環として、SPS/PPSを帯域外にフィードする必要があります。

29
Markus Schumann

IDRフレーム、またはIスライスは、SPSおよびPPSなしではデコードできません。 mp4のようなコンテナの場合、SPSとPPSはファイルヘッダーのビデオデータから離れて保存されます。再生時にmp4が解析されると、SPS/PPSを使用してAVCデコーダーを1回使用すると、任意のIDR/Iスライスからビデオを再生できます。

2番目のシナリオであるライブビデオがあります。ライブビデオでは、ファイルがないため、ファイルヘッダーはありません。では、テレビがチャンネルにチューニングすると、SPS/PPSはどこで取得されますか?テレビは放送されているため、つまりテレビはSPS/PPSを要求する方法がないため、ストリーム内で繰り返されます。

したがって、ビデオのエンコードを開始すると、エンコーダーはビデオで何をしようとしているのかわかりません。これで、追加のSPS/PPSがmp4に表示された場合、デコーダーはそれらを無視しますが、TVにストリーミングしている場合、それらがないとストリームは再生されません。したがって、ほとんどの場合、万が一の場合に備えて、デフォルトでSPS/PPSを繰り返します。

22
szatmary

Matroska(mkv)の仕様について知っているので、ここではSPSとPPSはコーデックのプライベートデータセクションとして1回だけ保存されます。したがって、すべてのiフレームまたはIDRフレームで繰り返されるわけではありません。

H264ストリームの各iフレーム/ IDRフレームにSPS/PPSがある場合、matroskamuxerはコーデックのプライベートデータに1つのコピーのみを保存します。

したがって、ユースケースベースのコンテナ形式を保存する場合は、SPS/PPSのコピーを1つだけ使用することをお勧めしますが、ブロードキャストおよびストリーミングベースのコンテナ形式では、すべてのiFrame/IDRフレームの前、またはその時点でh264ストリームでコーデックの変更が変更されるたびにSPS/PPSを送信することをお勧めします。

1
Jeegar Patel