movie format in a nutshell 2013
DESCRIPTION
2013.8.26 某所で開催した動画技術勉強会の資料です。 2009年のときから前半を少々リバイスし、後半をVESの話からHLSの話に入れ替えています。TRANSCRIPT
Movie Formatin a nutshell
2013.8.26あまのりょー
2013
はじめにお礼✴ああ、この人そういえばギジュツテキな話もわずかに出来るんだった、って思いだして声をかけてくれた虎塚さん、ヨンキュー!
✴4年前に押しかけ勉強会を受け入れてくれたESMの皆さんにも4q~
本資料について✴2009年5月にESMで行った動画技術勉強会の資料をベースに、Video ES(VES)についての話を削り、HLS等のストリーミングプロトコルについて付け足したものです✴VESについては昔の資料を参照いただくのがよいと思います
Agenda✴レイヤーの区別について✴HLS概説
レイヤーを意識しよう
ネットワークの基礎✴ネットーワークの技術を学ぶ時に最初に教わるOSI参照モデル
✴具体的な境界は議論があるが、ともかく「いまどこのレイヤーの話をしているか」を把握することが重要
wikipediaより
RoRアプリを作る時も✴いま注目しているのはどこ?✓ RoRそのものの仕組みなのか✓ Rubyという言語の話なのか✓ gemやRakeなどの話なのか✓利用している RDBの特性なのか✓ BitNami、Herokuなど実行環境の話なのか✓自分たちの独自のライブラリのことなのか✓利用しているIDE のことなのか✓ドメイン知識の問題なのか✴「いまどこのレイヤーの話をしているか」を把握することが重要
実は動画もおんなじ
実は動画もおんなじ✴いろいろヒトと話をしていると、そして自分自身をふりかえると、ここのところがごっちゃになっている感じ
実は動画もおんなじ✴いろいろヒトと話をしていると、そして自分自身をふりかえると、ここのところがごっちゃになっている感じ
✴さらに混乱に拍車をかけるのは、異なるレイヤーに同じ名前(ex. Mpeg) がついていること
実は動画もおんなじ✴いろいろヒトと話をしていると、そして自分自身をふりかえると、ここのところがごっちゃになっている感じ
✴さらに混乱に拍車をかけるのは、異なるレイヤーに同じ名前(ex. Mpeg) がついていること
✴なので、ここの区別がつけば、かなりスッキリする筈です、、、きっと...
動画技術のレイヤー論理フォーマット等
運用規則
System
ES (Elementary Stream)
ES (Elementary Stream)論理フォーマット等
運用規則
System
ES (Elementary Stream)
ES (Elementary Stream)論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴単体の Video や Audio などからなる基本のストリーム
ES (Elementary Stream)論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴単体の Video や Audio などからなる基本のストリーム
✴様々な圧縮技術が用いられることが多い
ES (Elementary Stream)論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴単体の Video や Audio などからなる基本のストリーム
✴様々な圧縮技術が用いられることが多い
✴「コーデック」と呼ばれているものは通常このレイヤー
ES (Elementary Stream)論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴単体の Video や Audio などからなる基本のストリーム
✴様々な圧縮技術が用いられることが多い
✴「コーデック」と呼ばれているものは通常このレイヤー
✴Video/Audio 以外もあるがここではまずは割愛
いろいろなESの例✴ Video✓ Mpeg2 Video✓ Mpeg4 Visual✓ H.264/Mpeg4 AVC✓ H.265/HEVC✓ DivX✓ Windows Media Video (wmv)
✴ Audio✓ Mpeg1 Audio Layer3 (mp3)✓ AAC✓ Dolby AC3✓ LPCM✓ μ-Law
✴ Video/Audio 以外のESもあります✓ NVI_PACK (DVD-Video)✓ AUX-A/AUX-V (HDV)✓ Menu Bitmap Stream (AVCHD/Blu-ray Disk)
System論理フォーマット等
運用規則
System
ES (Elementary Stream)
System論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴個々のESを多重化(Mux)する方法
System論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴個々のESを多重化(Mux)する方法✴「複数のESを1つのファイルに束ねる方法」とほぼ同じことだと考えれば良い
System論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴個々のESを多重化(Mux)する方法✴「複数のESを1つのファイルに束ねる方法」とほぼ同じことだと考えれば良い✓ いやすまん、それは言いすぎたw
System論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴個々のESを多重化(Mux)する方法✴「複数のESを1つのファイルに束ねる方法」とほぼ同じことだと考えれば良い✓ いやすまん、それは言いすぎたw
✴単純にESファイルを連結(cat)するだけではうまくゆきません
System論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴個々のESを多重化(Mux)する方法✴「複数のESを1つのファイルに束ねる方法」とほぼ同じことだと考えれば良い✓ いやすまん、それは言いすぎたw
✴単純にESファイルを連結(cat)するだけではうまくゆきません
✴ES同士の同期(Lip Sync)やプログラムの識別に必要な情報などを記録する
概念図Video ES
Audio ES
System多重化
Movie File
System のことを「コンテナフォーマット」と言う場合もある
いろいろなSystemの例✴Mpeg2-PS (.mpg, .mpeg, m2p ...)✴Mpeg2-TS (.m2t, .m2ts, .mpeg ...)✴Mpeg4 (.mp4)✴QuickTime (.mov)✴Audio Video Interleave (.avi)✴Advanced System Format (.asf, .wmv ...)✴Real Media (.rm)✴MXF
運用規則論理フォーマット等
運用規則
System
ES (Elementary Stream)
運用規則論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴ESやSystemの規格全範囲を使うのではなく、使用用途にあわせて利用できる範囲を定めるのが普通(サブセット)
運用規則論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴ESやSystemの規格全範囲を使うのではなく、使用用途にあわせて利用できる範囲を定めるのが普通(サブセット)
✴例えば画サイズやビットレート、圧縮に使えるツール、プログラム数など
歴代の某社製カメラで撮影可能な形式例呼称 Video Audio SystemXAVC S H.264 AAC, LPCM Mpeg4
AVCHD H.264 AC3, LPCM Mpeg2-TS
HDV Mpeg2 Video Mpeg1 Audio Layer 2(mp2) Mpeg2-TS
Mpeg1 Mpeg1 Mpeg1 Audio Layer 2(mp2) Mpeg1 System
mp4 H.264, Mpeg4 Visual AAC Mpeg4
DV AVI DV LPCM AVI
SD Mpeg2 Video LPCM, AC3, mp2 Mpeg2-PS
例えばワンセグ放送
wikipediaより
ESのはなし
Systemのはなし
ニコニコ動画の推奨動画フォーマット(1)
http://help.nicovideo.jp/cat22/post_145.html より
ニコニコ動画の推奨動画フォーマット(2)
http://help.nicovideo.jp/cat22/post_145.html より
VideoES
AudioES
VideoESの運用規則
AudioESの運用規則
SystemSystemの運用規則
論理フォーマット等論理フォーマット等
運用規則
System
ES (Elementary Stream)
論理フォーマット等論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴主に動画ファイル以外のデータ構造やフォルダ配置、ファイル命名規則などを規定
論理フォーマット等論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴主に動画ファイル以外のデータ構造やフォルダ配置、ファイル命名規則などを規定
✴運用規則とも深く関わっている場合が多い
論理フォーマット等論理フォーマット等
運用規則
System
ES (Elementary Stream)
✴主に動画ファイル以外のデータ構造やフォルダ配置、ファイル命名規則などを規定
✴運用規則とも深く関わっている場合が多い
✴さらに物理フォーマットまで規定されていることもある
論理フォーマットの例✴DVD (-Video, -VR, +VR)✴Blu-ray (BDMV, BDAV)✴AVCHD✴HLS や MPEG-DASH などのストリーミングプロトコルもここの話と捉えることができる
例えばDVD-Videoの場合
VOBファイルがMpeg2-PSファイルであり、その他のファイルにメタ情報が収められている。また、フォルダ階層・ファイル名規則やファイルサイズ上限なども定められている。
ここまでのまとめ
ここまでのまとめ✴動画ファイルは
ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを
ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを✴なんらかのSystemでくるんだもの。
ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを✴なんらかのSystemでくるんだもの。✴ESやSystemの内容は
ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを✴なんらかのSystemでくるんだもの。✴ESやSystemの内容は✴運用規則で実際のシンタックスが決まる。
ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを✴なんらかのSystemでくるんだもの。✴ESやSystemの内容は✴運用規則で実際のシンタックスが決まる。✴さらに、論理フォーマットまで含めて規格化されることもある。
補足:あるファイルを視聴するとき
補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える
補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、
補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、✴個々のESをデコードし、
補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、✴個々のESをデコードし、✴必要ならリオーダー (詳細省略) しながら、
補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、✴個々のESをデコードし、✴必要ならリオーダー (詳細省略) しながら、✴Systemの時間情報を元に同期を取りつつ各デバイスで再生する
補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、✴個々のESをデコードし、✴必要ならリオーダー (詳細省略) しながら、✴Systemの時間情報を元に同期を取りつつ各デバイスで再生する
✴上記の処理スピードによってカクツキや描画品質の低下につながることがある
WindowsのDirectShow
FilterGraph と呼ばれる一連のデータ流処理グラフを構築する。「ファイルから読み込む」「Systemをほどく」「Audio/Videoをそれぞれデコードする」「Audio/Videoをそれぞれのデバイスで再生する」フィルタが組み合わされていることがわかる。Audio/Videoの同期はFilterGraphが調整を行う。
ストリーミングプロトコル、特にHLSについて
イマドキのストリーミングプロトコル✴HLS (HTTP Live Streaming)✓Apple
✴HDS (HTTP Dynamic Streaming)✓Adobe
✴Smooth Streaming✓Microsoft
✴MPEG-DASH (Dynamic Adaptive Streaming over HTTP)✓MPEG
特徴✴ HTTPベース✓ RTP/RTCPベースのものに比べ、既存のネットワーク設定が使えたり、CDNが
利用できる✴ ABS (Adaptive Bitrate Streaming)✓ ABRと言ったりもする
✴ VOD / Live Streaming 両方サポート✴オープン規格✓ HLSはinternet-draft状態、MPEG-DASHはISO/IEC標準化済
✴セグメント化された動画ファイル+メタ情報ファイル✓ というかメタ情報ファイルのシンタックス定義がこれらの規格の大部分✓ 個人的な印象
重厚なMPEG-DASH(xml)、LightweightなHLS(m3u8)
配信ファイル✴メタ情報ファイル(Index File, Playlist)✓m3u8 : プレイリストファイルとしてデファクトスタンダードになっているm3u形式を利用しつつ、HLS用のタグを独自に定義している
✓m3u8 はネストが可能(唯一の構造化手段)で、ABSは m3u8 のネストで実現する
配信ファイル✴ストリームファイル✓AV両方入れる場合、System(コンテナ) は Mpeg2-TS(オーディオのみの配信の場合は ESが使える ほか、 字幕用にWebVTTファイルも配信出来る)
✓ 10秒程度くらいにぶつ切りにされた ts ファイルがたくさん→ ただし EXT-X-BYTERANGE タグを使うことでファイルとしては一つ、という運用もできる
✓ VES は AVC、AES は AAC or AC-3
配信ファイル✴(optional) キーファイル✓ストリームファイルをAESで暗号化する場合、復号に必要な情報(AESキー および IV)を格納する
✓あるストリームセグメントに対するキーファイルは m3u8 で指定される
✓MPEG-2 Stream Encryption Fomat for HTTP Live Streaming に暗号化に関する詳細が記載されている→ https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/HLS_Sample_Encryption/
HLS 配信の基本構成
HTTP Live Streaming Overview より
代替ストリームの実現
HTTP Live Streaming Overview より
✴シームレスな切り替えが可能なように、各代替ストリーム間でPTSを合わせる、などの運用規則が決まっている
例)Media segments の運用規則Transport Stream segments MUST contain a single MPEG-2 Program.There SHOULD be a Program Association Table (PAT) and a Program MapTable (PMT) at the start of each segment. A segment that containsvideo SHOULD have at least one key frame and enough information tocompletely initialize a video decoder.
A Transport Stream or audio elementary stream segment MUST be thecontinuation of the encoded media at the end of the segment with theprevious sequence number, where values in a continuous series, suchas timestamps and Continuity Counters, continue uninterrupted -unless the media segment was the first ever to appear in the Playlistfile or has an EXT-X-DISCONTINUITY tag applied to it.
Clients MUST ignore private streams inside Transport Streams thatthey do not recognize.
internet-draft 11 より
✴どのレイヤの話かわかりますか?
推奨する取っ掛かり✴ Apple の “HTTP Live Streaming Overview” を読む✓ https://developer.apple.com/library/mac/documentation/
NetworkingInternet/Conceptual/StreamingMediaGuide✴ internet-draft (2013/08現在) を読む✓ http://tools.ietf.org/html/draft-pantos-http-live-streaming
✴ほか、ドキュメントのポインタが以下にまとまっている✓ https://developer.apple.com/streaming/
✴これらの資料を読む際に、どのレイヤのことを記載しているのかを意識しながら読むのがよい✓ それぞれ分量は多くないので、読み合わせ形式でお互いの知識を補完しながら行
うのもいいかもしれない✓ 必ずしも各用語の詳細まで把握する必要はない(というか大変)が、
その仕様がどんな意味や意図で規定されているのかは意識したい