1

-optimizeApple HLS ビデオ ストリームを再生するための Flash ビデオ プレーヤーを作成しています。オプションを有効にして (現在はデフォルト) Apple ツールによってセグメント化された AAC オーディオ トラックを含むコンテンツには、オーディオ トラックがあることがわかりました。デコードできません (同期バイトがあるべき場所にありません)。

最適化オプションはオーディオに何をしますか? 再エンコードしていますか、それとも別の方法でパックしていますか?

最も重要なことは、オーディオ トラックを正しく読み取るために何をする必要があるかということです。

私はここ数ヶ月探してきましたが、これに対する技術的に有用な答えを誰も持っていないようです(つまり、「ファイルが小さくなる」以上のもの)。

これはオーディオ トラックにのみ影響するようです。オーディオ デコードを無効にすると、すべてのケースでビデオが正常に再生されます。少なくとも、これまでに見たすべてのもの - Apple ツール、ffmpeg、商用エンコーダなど。

4

1 に答える 1

3

さて、いくつかの実験の後、私は私の質問に対する答えを見つけたと思います。

通常、AACフレームは、(少数の)AACフレームが単一のペイロードユニット内に収まるようにパックされ、同期するビデオフレームとPTSの順序で大まかにインターリーブされます。次に、これらのペイロードユニットは、連続する188バイトのTSパケットのペイロードスペースにパックされ、最後のTSパケットの空きスペースにはジャンクが埋め込まれます(つまり、データストリームの一部ではありません)。これは、10秒のTSセグメントで、約2〜6Kバイトのオーバーヘッドが発生する可能性があることを意味します。

AAC最適化では、2つのことが変化しているように見えます。

  1. AACフレームを含むペイロードユニットのサイズが大きくなり、全体的なペイロードユニットの数が減ります。
  2. ペイロードユニットは、AACフレーム全体の数に合わせるのではなく、TSパケットのペイロードスペースの正確な倍数にサイズ設定されます。

これは、パディングがほとんど排除されていることを意味します-使用されているスペースはすべて貴重なデータであるため、全体のサイズが縮小されます。

さらに、これは、AACフレームが、同期する必要のあるビデオフレームに直接隣接していないことを意味します。実際には、かなりの距離が離れている可能性があります。

ただし、これは、個々のペイロードユニットが最後にAACフレーム全体に収まらない可能性があることも意味します。そのため、収まるだけのフレームがこのペイロードユニットに配置され、残りは最初に配置されます。次のAACペイロードユニット-これは、AACペイロードユニットがAACフレーム同期バイトで開始されない可能性があることを意味します。(これは私が見ていたものです!)

読み取られたAACフレームがヘッダー全体を含むのに十分な長さでない場合、またはAACヘッダーのAACペイロード長が残りのペイロードユニット長より短い場合、残りのデータは次のAACペイロードユニットにある必要があります-ただし、注意してください。これは次のセグメントにあるかもしれません!

于 2012-10-28T10:18:58.790 に答える