movie format in a nutshell 2013

64
Movie Format in a nutshell 2013.8.26 あまのりょー 2013

Upload: ryo-amano

Post on 24-May-2015

527 views

Category:

Documents


2 download

DESCRIPTION

2013.8.26 某所で開催した動画技術勉強会の資料です。 2009年のときから前半を少々リバイスし、後半をVESの話からHLSの話に入れ替えています。

TRANSCRIPT

Page 1: Movie Format in a Nutshell 2013

Movie Formatin a nutshell

2013.8.26あまのりょー

2013

Page 2: Movie Format in a Nutshell 2013

はじめにお礼✴ああ、この人そういえばギジュツテキな話もわずかに出来るんだった、って思いだして声をかけてくれた虎塚さん、ヨンキュー!

✴4年前に押しかけ勉強会を受け入れてくれたESMの皆さんにも4q~

Page 3: Movie Format in a Nutshell 2013

本資料について✴2009年5月にESMで行った動画技術勉強会の資料をベースに、Video ES(VES)についての話を削り、HLS等のストリーミングプロトコルについて付け足したものです✴VESについては昔の資料を参照いただくのがよいと思います

Page 4: Movie Format in a Nutshell 2013

Agenda✴レイヤーの区別について✴HLS概説

Page 5: Movie Format in a Nutshell 2013

レイヤーを意識しよう

Page 6: Movie Format in a Nutshell 2013

ネットワークの基礎✴ネットーワークの技術を学ぶ時に最初に教わるOSI参照モデル

✴具体的な境界は議論があるが、ともかく「いまどこのレイヤーの話をしているか」を把握することが重要

wikipediaより

Page 7: Movie Format in a Nutshell 2013

RoRアプリを作る時も✴いま注目しているのはどこ?✓ RoRそのものの仕組みなのか✓ Rubyという言語の話なのか✓ gemやRakeなどの話なのか✓利用している RDBの特性なのか✓ BitNami、Herokuなど実行環境の話なのか✓自分たちの独自のライブラリのことなのか✓利用しているIDE のことなのか✓ドメイン知識の問題なのか✴「いまどこのレイヤーの話をしているか」を把握することが重要

Page 8: Movie Format in a Nutshell 2013

実は動画もおんなじ

Page 9: Movie Format in a Nutshell 2013

実は動画もおんなじ✴いろいろヒトと話をしていると、そして自分自身をふりかえると、ここのところがごっちゃになっている感じ

Page 10: Movie Format in a Nutshell 2013

実は動画もおんなじ✴いろいろヒトと話をしていると、そして自分自身をふりかえると、ここのところがごっちゃになっている感じ

✴さらに混乱に拍車をかけるのは、異なるレイヤーに同じ名前(ex. Mpeg) がついていること

Page 11: Movie Format in a Nutshell 2013

実は動画もおんなじ✴いろいろヒトと話をしていると、そして自分自身をふりかえると、ここのところがごっちゃになっている感じ

✴さらに混乱に拍車をかけるのは、異なるレイヤーに同じ名前(ex. Mpeg) がついていること

✴なので、ここの区別がつけば、かなりスッキリする筈です、、、きっと...

Page 12: Movie Format in a Nutshell 2013

動画技術のレイヤー論理フォーマット等

運用規則

System

ES (Elementary Stream)

Page 13: Movie Format in a Nutshell 2013

ES (Elementary Stream)論理フォーマット等

運用規則

System

ES (Elementary Stream)

Page 14: Movie Format in a Nutshell 2013

ES (Elementary Stream)論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴単体の Video や Audio などからなる基本のストリーム

Page 15: Movie Format in a Nutshell 2013

ES (Elementary Stream)論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴単体の Video や Audio などからなる基本のストリーム

✴様々な圧縮技術が用いられることが多い

Page 16: Movie Format in a Nutshell 2013

ES (Elementary Stream)論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴単体の Video や Audio などからなる基本のストリーム

✴様々な圧縮技術が用いられることが多い

✴「コーデック」と呼ばれているものは通常このレイヤー

Page 17: Movie Format in a Nutshell 2013

ES (Elementary Stream)論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴単体の Video や Audio などからなる基本のストリーム

✴様々な圧縮技術が用いられることが多い

✴「コーデック」と呼ばれているものは通常このレイヤー

✴Video/Audio 以外もあるがここではまずは割愛

Page 18: Movie Format in a Nutshell 2013

いろいろな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)

Page 19: Movie Format in a Nutshell 2013

System論理フォーマット等

運用規則

System

ES (Elementary Stream)

Page 20: Movie Format in a Nutshell 2013

System論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴個々のESを多重化(Mux)する方法

Page 21: Movie Format in a Nutshell 2013

System論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴個々のESを多重化(Mux)する方法✴「複数のESを1つのファイルに束ねる方法」とほぼ同じことだと考えれば良い

Page 22: Movie Format in a Nutshell 2013

System論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴個々のESを多重化(Mux)する方法✴「複数のESを1つのファイルに束ねる方法」とほぼ同じことだと考えれば良い✓ いやすまん、それは言いすぎたw

Page 23: Movie Format in a Nutshell 2013

System論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴個々のESを多重化(Mux)する方法✴「複数のESを1つのファイルに束ねる方法」とほぼ同じことだと考えれば良い✓ いやすまん、それは言いすぎたw

✴単純にESファイルを連結(cat)するだけではうまくゆきません

Page 24: Movie Format in a Nutshell 2013

System論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴個々のESを多重化(Mux)する方法✴「複数のESを1つのファイルに束ねる方法」とほぼ同じことだと考えれば良い✓ いやすまん、それは言いすぎたw

✴単純にESファイルを連結(cat)するだけではうまくゆきません

✴ES同士の同期(Lip Sync)やプログラムの識別に必要な情報などを記録する

Page 25: Movie Format in a Nutshell 2013

概念図Video ES

Audio ES

System多重化

Movie File

System のことを「コンテナフォーマット」と言う場合もある

Page 26: Movie Format in a Nutshell 2013

いろいろな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

Page 27: Movie Format in a Nutshell 2013

運用規則論理フォーマット等

運用規則

System

ES (Elementary Stream)

Page 28: Movie Format in a Nutshell 2013

運用規則論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴ESやSystemの規格全範囲を使うのではなく、使用用途にあわせて利用できる範囲を定めるのが普通(サブセット)

Page 29: Movie Format in a Nutshell 2013

運用規則論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴ESやSystemの規格全範囲を使うのではなく、使用用途にあわせて利用できる範囲を定めるのが普通(サブセット)

✴例えば画サイズやビットレート、圧縮に使えるツール、プログラム数など

Page 30: Movie Format in a Nutshell 2013

歴代の某社製カメラで撮影可能な形式例呼称 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

Page 31: Movie Format in a Nutshell 2013

例えばワンセグ放送

wikipediaより

ESのはなし

Systemのはなし

Page 32: Movie Format in a Nutshell 2013

ニコニコ動画の推奨動画フォーマット(1)

http://help.nicovideo.jp/cat22/post_145.html より

Page 33: Movie Format in a Nutshell 2013

ニコニコ動画の推奨動画フォーマット(2)

http://help.nicovideo.jp/cat22/post_145.html より

VideoES

AudioES

VideoESの運用規則

AudioESの運用規則

SystemSystemの運用規則

Page 34: Movie Format in a Nutshell 2013

論理フォーマット等論理フォーマット等

運用規則

System

ES (Elementary Stream)

Page 35: Movie Format in a Nutshell 2013

論理フォーマット等論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴主に動画ファイル以外のデータ構造やフォルダ配置、ファイル命名規則などを規定

Page 36: Movie Format in a Nutshell 2013

論理フォーマット等論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴主に動画ファイル以外のデータ構造やフォルダ配置、ファイル命名規則などを規定

✴運用規則とも深く関わっている場合が多い

Page 37: Movie Format in a Nutshell 2013

論理フォーマット等論理フォーマット等

運用規則

System

ES (Elementary Stream)

✴主に動画ファイル以外のデータ構造やフォルダ配置、ファイル命名規則などを規定

✴運用規則とも深く関わっている場合が多い

✴さらに物理フォーマットまで規定されていることもある

Page 38: Movie Format in a Nutshell 2013

論理フォーマットの例✴DVD (-Video, -VR, +VR)✴Blu-ray (BDMV, BDAV)✴AVCHD✴HLS や MPEG-DASH などのストリーミングプロトコルもここの話と捉えることができる

Page 39: Movie Format in a Nutshell 2013

例えばDVD-Videoの場合

VOBファイルがMpeg2-PSファイルであり、その他のファイルにメタ情報が収められている。また、フォルダ階層・ファイル名規則やファイルサイズ上限なども定められている。

Page 40: Movie Format in a Nutshell 2013

ここまでのまとめ

Page 41: Movie Format in a Nutshell 2013

ここまでのまとめ✴動画ファイルは

Page 42: Movie Format in a Nutshell 2013

ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを

Page 43: Movie Format in a Nutshell 2013

ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを✴なんらかのSystemでくるんだもの。

Page 44: Movie Format in a Nutshell 2013

ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを✴なんらかのSystemでくるんだもの。✴ESやSystemの内容は

Page 45: Movie Format in a Nutshell 2013

ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを✴なんらかのSystemでくるんだもの。✴ESやSystemの内容は✴運用規則で実際のシンタックスが決まる。

Page 46: Movie Format in a Nutshell 2013

ここまでのまとめ✴動画ファイルは✴Video/Audio などの個々のESを✴なんらかのSystemでくるんだもの。✴ESやSystemの内容は✴運用規則で実際のシンタックスが決まる。✴さらに、論理フォーマットまで含めて規格化されることもある。

Page 47: Movie Format in a Nutshell 2013

補足:あるファイルを視聴するとき

Page 48: Movie Format in a Nutshell 2013

補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える

Page 49: Movie Format in a Nutshell 2013

補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、

Page 50: Movie Format in a Nutshell 2013

補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、✴個々のESをデコードし、

Page 51: Movie Format in a Nutshell 2013

補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、✴個々のESをデコードし、✴必要ならリオーダー (詳細省略) しながら、

Page 52: Movie Format in a Nutshell 2013

補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、✴個々のESをデコードし、✴必要ならリオーダー (詳細省略) しながら、✴Systemの時間情報を元に同期を取りつつ各デバイスで再生する

Page 53: Movie Format in a Nutshell 2013

補足:あるファイルを視聴するとき✴動画ファイルの構成を逆に考える✴まずSystemをほどき(Demux, SysDec)、✴個々のESをデコードし、✴必要ならリオーダー (詳細省略) しながら、✴Systemの時間情報を元に同期を取りつつ各デバイスで再生する

✴上記の処理スピードによってカクツキや描画品質の低下につながることがある

Page 54: Movie Format in a Nutshell 2013

WindowsのDirectShow

FilterGraph と呼ばれる一連のデータ流処理グラフを構築する。「ファイルから読み込む」「Systemをほどく」「Audio/Videoをそれぞれデコードする」「Audio/Videoをそれぞれのデバイスで再生する」フィルタが組み合わされていることがわかる。Audio/Videoの同期はFilterGraphが調整を行う。

Page 55: Movie Format in a Nutshell 2013

ストリーミングプロトコル、特にHLSについて

Page 56: Movie Format in a Nutshell 2013

イマドキのストリーミングプロトコル✴HLS (HTTP Live Streaming)✓Apple

✴HDS (HTTP Dynamic Streaming)✓Adobe

✴Smooth Streaming✓Microsoft

✴MPEG-DASH (Dynamic Adaptive Streaming over HTTP)✓MPEG

Page 57: Movie Format in a Nutshell 2013

特徴✴ 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)

Page 58: Movie Format in a Nutshell 2013

配信ファイル✴メタ情報ファイル(Index File, Playlist)✓m3u8 : プレイリストファイルとしてデファクトスタンダードになっているm3u形式を利用しつつ、HLS用のタグを独自に定義している

✓m3u8 はネストが可能(唯一の構造化手段)で、ABSは m3u8 のネストで実現する

Page 59: Movie Format in a Nutshell 2013

配信ファイル✴ストリームファイル✓AV両方入れる場合、System(コンテナ) は Mpeg2-TS(オーディオのみの配信の場合は ESが使える ほか、 字幕用にWebVTTファイルも配信出来る)

✓ 10秒程度くらいにぶつ切りにされた ts ファイルがたくさん→ ただし EXT-X-BYTERANGE タグを使うことでファイルとしては一つ、という運用もできる

✓ VES は AVC、AES は AAC or AC-3

Page 60: Movie Format in a Nutshell 2013

配信ファイル✴(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/

Page 61: Movie Format in a Nutshell 2013

HLS 配信の基本構成

HTTP Live Streaming Overview より

Page 62: Movie Format in a Nutshell 2013

代替ストリームの実現

HTTP Live Streaming Overview より

✴シームレスな切り替えが可能なように、各代替ストリーム間でPTSを合わせる、などの運用規則が決まっている

Page 63: Movie Format in a Nutshell 2013

例)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 より

✴どのレイヤの話かわかりますか?

Page 64: Movie Format in a Nutshell 2013

推奨する取っ掛かり✴ 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/

✴これらの資料を読む際に、どのレイヤのことを記載しているのかを意識しながら読むのがよい✓ それぞれ分量は多くないので、読み合わせ形式でお互いの知識を補完しながら行

うのもいいかもしれない✓ 必ずしも各用語の詳細まで把握する必要はない(というか大変)が、

その仕様がどんな意味や意図で規定されているのかは意識したい