OTT(オーバー・ザ・トップ)およびリアルタイムコミュニケーション(RTC)技術の世界では、ファイルのパッケージングとアンパッケージングが、音声および映像コンテンツの管理と送信において重要な役割を果たします。このブログ記事では、パッケージングとアンパッケージングの概念について、MP4、FLV、TSという3つの人気コンテナ形式に焦点を当てて掘り下げます。
パッケージングの必要性
音声と映像データがそれぞれのエンコーダーを通過すると、通常、AACストリーム(音声)とH.264ストリーム(映像)の2つの別々のデータストリームが得られます。これらのストリームは異なるソース(音声用のマイク、映像用のカメラ)から発生し、異なるコンポーネントによって処理されるため、分かれています。
しかし、実際のアプリケーションでは、音声と映像のストリームは独立して使用されることはほとんどありません。同じシーンからの音と映像を同期させるためには、音声データと映像データを1つのファイルにパッケージする必要があります。
パッケージングとは何か?
パッケージング、または多重化(muxing)とは、複数のデータストリームを1つのコンテナファイルに統合するプロセスです。パッケージングの主な目的は次のとおりです:
- 同じシーンからの情報を統合すること。
- 音声と映像の同期および統一的な設定を促進すること。
結果として生成されるパッケージ化されたファイルはコンテナと呼ばれます。一般的なコンテナ形式にはMP4、FLV、TS、AVI、MKVなどがあります。
メタデータ:効率的な再生の鍵
コンテナは様々なサイズの箱のようなもので、一部は幅広いコーデック形式をサポートしています(MKVのように)、他は少ないものもあります(AVIのように)。効率的な再生を可能にするために、コンテナにはパッケージ化されたメディアに関する情報であるメタデータが含まれています。
メタデータには通常、以下の情報が含まれます:
- 音声および映像のコーデック情報
- 解像度
- フレームレート
- ビットレート
- サンプルレート
- ビット深度
- 音声チャンネルの数
メディアプレーヤーがファイルを再生し始めるとき、まずメタデータを読み取って、どのコーデックを使用するか、再生を開始する前にどれだけのバッファスペースを確保するかを決定します。
「ダウンロード中に再生」などのオンラインストリーミング機能を利用するためには、ファイルの先頭にメタデータがあることが重要です。一部のパッケージング形式ではメタデータが最後に置かれるため、メタデータを移動するためにトランスコーディングを行うか、再生を開始する前にファイル全体をダウンロードする必要があります。
人気のあるコンテナ形式
OTTおよびRTCシステムで使用される3つの人気のあるコンテナ形式を探ってみましょう:
1. MP4(MPEG-4 Part 14)
MP4は、さまざまなタイプのデータを埋め込むことができる多用途のメディアファイル構造標準です。ほとんどのMP4ファイルは、H.264またはMPEG-4でエンコードされた映像と、AACでエンコードされた音声を含んでいます。
MP4ファイルは、ネストされた「ボックス」のシリーズとして構成されています。ここにいくつかの一般的なボックスの種類を示します:
ボックスの種類 | 説明 |
ftyp | ファイルタイプ、ファイル形式を示す |
moov | メタデータコンテナ、ファイルのメタデータを格納 |
mvhd | ムービーヘッダー、ファイルヘッダー情報を含む |
trak | トラックコンテナ、音声/映像トラック情報を保持 |
tkhd | トラックヘッダー、トラックヘッダー情報を含む |
mdia | メディア情報 |
mdhd | メディアヘッダー、メディアヘッダー情報を定義 |
hdlr | ハンドラー、トラックの種類(映像/音声/ヒント)を指定 |
minf | メディア情報、メディアデータを含む |
stbl | サンプルテーブル、サンプルマッピング情報を保存 |
mdat | メディアデータコンテナ、実際のメディアデータを保持 |
2. FLV(Flash Video)
FLVは、Adobeが開発した人気のウェブビデオコンテナ形式です。そのシンプルな構造と簡単なデコーディングにより、特にAdobeのRTMPプロトコルと組み合わせて、オンラインビデオに最適です。
FLVファイルはFLVヘッダーとFLVボディから構成されています:
FLVヘッダー | タグ0 | タグ0データ | タグ1 | タグ1データ | ... | タグN | タグNデータ
FLVボディには、音声、映像、またはスクリプト(キーワードやファイル情報用)の複数のタグが含まれています。
FLVヘッダーの構造:
フィールド | 説明 |
シグネチャ(3B) | 常に「FLV」(0x46 0x4C 0x56) |
バージョン(1B) | バージョン番号、通常は0x01 |
フラグ(1B) | ビット5-7:0、ビット6:音声タグあり、ビット7:映像タグあり |
ヘッダーサイズ(4B) | FLVヘッダーのサイズ、通常は9 |
FLVボディの構造(各タグについて):
フィールド | 説明 |
前のタグのサイズ | 前のタグのサイズ |
タグタイプ | 音声(0x08)、映像(0x09)、またはスクリプト(0x12) |
データサイズ | タグのデータ部分のサイズ |
タイムスタンプ | タグのタイムスタンプ |
ストリームID | ストリーム識別子 |
タグデータ | 実際のメディアデータ |
3. TS(トランスポートストリーム)
TSはMPEG-2標準で定義されており、デジタルビデオ放送やHTTP Live Streaming(HLS)プロトコルで一般的に使用されています。
TSのパッケージングプロセス:
- エレメンタリーストリーム(ES) - 生のエンコードされた音声または映像データ
- パケット化されたエレメンタリーストリーム(PES) - ESデータをPESパケットにパッケージ化
- トランスポートストリーム(TS) - PESパケットをTSパケットに多重化
TSパケットは188バイトの固定サイズで、ヘッダーとペイロードで構成されています。
結論
ファイルのパッケージングとアンパッケージングを理解することは、OTTおよびRTC技術に携わるすべての人にとって重要です。各コンテナ形式にはその強みがあり、異なるユースケースに適しています:
- MP4はインターネットビデオオンデマンドサービスで広く使用されています
- FLVはライブストリーミングとビデオオンデマンドの両方で人気があります
- TSはHTML5ビデオ配信のためのHLSで一般的に使用されています
デジタルメディアの分野が進化し続ける中、これらのコンテナ形式とその応用について最新の情報を把握することは、効率的で高品質な音声映像ストリーミングソリューションの開発に不可欠です。