More Related Content
Similar to ストリーミングのげんざい(20)
More from Tetsuya Morimoto
More from Tetsuya Morimoto(17)
ストリーミングのげんざい
- 1. ストリーミングのげんざい
“No man ever steps in the same river twice”
~ Heraclitus
2014-11-11
Tetsuya Morimoto
- 2. がいよう
● 技術背景
– ビデオコーデックと特許料
– Adaptive bitrate streaming
● HTTP ストリーミングの進化
● まとめ
Streaming media
RTMP
HTTP
Progressive download
Adaptive bitrate streaming
HTTP Live Streaming
HTTP Dynamic Streaming
Smooth Streaming
MPEG-DASH
- 4. こーでっく
● 動画ファイルには様々なフォーマットがある
– mp4, flv, webm, mov, wmv, 3gp, ...
● 動画ファイルを利用する場合、
– 提供する側があるフォーマットでエンコードして、
– 再生する側があるフォーマットでデコードする
ことで内容を見聞きできる
● 何のためにエンコードするか?
– 圧縮してサイズを小さくするため
● エンコード ⇔ デコードが双方向にできる装置や
ソフトウェアまたはアルゴリズムのことをコーデックと呼ぶ
- 5. えいちにーろくよん
● 広範囲に利用されているビデオコーデックの規格
– いろんなベンダーが参加して作ったため、多数の特許権が含まれている
● パテントプールであるMPEG LAに特許料を支払わないといけない
– エンドユーザーが無料で視聴できるインターネットビデオのみ免除
(YouTubeのようなサービス)
● コーデック変換が発生する箇所で特許料の支払い義務が生じる
– ストリーミング/トランスコードサーバー、ブラウザ、メディアプレイヤー
– 一般的にH.264を扱うプロダクトを販売/購入する場合、
その販売/購入代金にその特許料も含まれる
● その販売企業がMPEG LAに特許料を支払う
– H.264の特許料はキャップ制で、上限額を支払えば不特定多数へ提供できる
● Adobe Flash Player
● Cisco OpenH264
- 6. えいちにーろくよんのとっきょりょう
● MPEG LA の AVC/H.264 情報
– AVC Patent Portfolio License Briefing
● ライセンスの要約をまとめた資料
● Manufacture and Saleの価格帯も書いてある
● あくまで2008年時点での参考情報
– いまのライセンスとは違うかもしれない
● 特許料は年間キャップ制
– この資料では$6.5 million per year 2011-2015
– H.264 をプロダクトで商用利用するには
MPEG LA とライセンスを締結しないといけない
- 7. おーぷんえいちにーろくよん
● CiscoのOpenH264プロジェクトとは?
– Cisco曰く、WebRTCを促進する目的らしい
– CiscoがMPEG LAへ特許料を支払っているため、
Ciscoがビルドしたバイナリを使ってライセンス条項に従えば、特許料の支払いは免除される
– オープンソースとしてgithubでホスティング: openh264
● RELEASEファイルにライブラリのダウンロード先がある
– 2014-05-23 1.0.0 リリース
– 2014-07-09 1.1.0 リリース
– 2014-10-28 1.2.0 リリース
● ライセンスについて
– サーバーでの商用利用: License question on server-side for commercial use
– クライアントでの商用利用: License question.
– 2014-10-14 シスコの OpenH264 が Firefox の一部に
● EricssonはOpenH264を利用するWebRTC実装をオープンソース化
● Mozilla
– 2014-10-14 OpenH264 Now in Firefox
● Firefox33からOpenH264を組み込み
- 8. うぇぶえむ
● GoogleのWebMプロジェクトとは?
– 2010年からGoogleが開発
– open-source, royalty-free, Webに特化したフォーマット
– コンテナー: webm (Matroskaのサブセット)
● ビデオコーデック: VP8→VP9
● オーディオコーデック: Vorbis
ビデオとオーディオの圧縮技術はそれぞれ違うため
それらを1つにまとめることを「多重化」すると言う
また、このまとめたものをコンテナーと呼ぶ
– 姉妹プロジェクトとして画像フォーマット: webp
– YouTubeにアップロードされた動画はwebmでエンコードされる
● 普及を妨げる要因?
– MPEG LAがH.264をインターネットの無料動画に限り無料に変更
– VP8がMPEG LAの管理する特許に抵触の可能性
● 2013-03-07: Google and MPEG LA make a deal over VP8 codec
– IE 、Safariで未サポート (別途プラグインが必要)
- 10. はやり
● Streaming方式 (リアル・ストリーミング)
– RTMPによるストリーミング
– キャッシュが端末に残らない (CDNには残るかも?)
– 専用サーバー/クライアントが必要
– (相対的に)帯域制御やサービス品質の保証が容易
● Progressive download方式 (擬似ストリーミング)
– HTTPによるストリーミング(ダウンロード)
– 端末や途中経路にキャッシュとしてファイルが残る
– Webサーバーから配信、ブラウザ(html5対応)で再生できる
● Webアプリのノウハウでスケールアウトが容易
● Adaptive bitrate streaming方式
– HTTPストリーミングの進化系
– デバイスや帯域に適したストリーミングを提供
HTTP ストリーミング
HTTP ストリーミング
あらかじめそれぞれのデバイス、
ビットレートにトランスコードした
メディアファイルを用意する
1つのメディアファイルを
リアルタイムエンコードする
- 11. さいきん
● Adobe
– 2009年RTMPの仕様を公開する
● CDNサービスが可能となり、Flash技術がエンタープライズ分野でも利用される
– 2010年HTTP Dynamic Streaming (HDS)を提供 (FMS 4.0)
– 2011年HLSをサポート (Flash Player 11+)
● Apple
– 2009年HTTP Live Streaming (HLS)を提供
● 対応ビデオコーデックはH.264のみ
● Google
– 2010年WebMプロジェクトを開始
● royalty-freeなオープンなストリーミングの世界
– 2011年Android 3.0 HoneycombでHLSをサポート (スマートフォン4.0)
● Microsoft
– 2010年Smooth Streamingを提供 (IIS Media Service 4.0)
Red5: FMSのOSS実装
2005年プロジェクトを開始
2009年に0.8.0 をリリース
2012年に1.0 をリリース
Wowza: FMSの競合プロダクト
2007年1.0 をリリース
2009年2.0 をリリース(HTTP ストリーミング開始)
Adaptive bitrate streaming
2010年ぐらいから始まった
html5
2008年First Public Working Draft
2011年Last Call
Mozilla (Firefox)
2010 WebM サポートを支持
2012 スマートデバイスで H.264 サポート開始
2014.10 H.264 サポート (OpenH264)
- 12. えいちえるえす
● HTTP Live Streaming ドキュメント
– Appleが提唱/実装
– IETFで標準化が進められている
● HTTP Live Streaming draft-pantos-http-live-streaming
–現時点ではDraft 14 (2014-10-14)
– 6ヶ月ごとに更新されるため、標準化が決まるのはまだまだ先になりそう?
– プレイリストと小さく分割したセグメントファイルを使う
● プレイリスト: M3Uフォーマット (m3u8)
– M3UをUTF-8でエンコードしたのを指して.m3u8という拡張子で保存する
● コンテナー: MPEG-2 TS
–世界的に採用されてる地上波/BSデジタル放送の規格、日本も同様
– ビデオコーデックやオーディオコーデックについてはIETFのDraftには書いてない
–余談: MatchStick Developer's Guideから未来の展望?
– AESを使った暗号化の仕組みもある
● HTTP上で暗号化されたファイルを送信
小さく分割したメディアファイルを
プレイリストから順番に再生
Adobe社の戦略?
2009年RTMP仕様公開
2010年FMS4.0 をリリース
- HDS をサポート
※ Flash Player 11以上H.264 をサポート(IE6 は10 まで)
- 13. すまーとでばいす
● HTTP Live Streaming 対応状況 by JW Player
● サポートしているストリーミング方式
– iPhone/iPad
● iOS 3.0 (iPhone OS) から HLS をサポート
● 但し、m3uフォーマットの拡張タグなどでバージョン間の違いはある
– Example Playlist Files for use with HTTP Live Streaming
– Android
● 2.3 Gingerbread
– WebM フォーマットをサポート
● 3.0 Honeycomb
プレイリストを書いたりして何でもできる
– HLS をサポート (MPEG4/H.264)
– Windows Phone/Tablet
● Windows8
プレイリストの中に
– Smooth Streamingをサポート (MPEG4/H.264)
- 14. ぱそこんぶらうざ
● http://caniuse.com/
● ブラウザが<video> タグでサポートしているフォーマット
IE8 IE9+ Chrome Firefox Safari Opera
MPEG4
/H.264 ☓ ○ ○ ○ ○ ☓
WebM ☓ ☓ ○ ○ ☓ ○
Ogg ☓ ☓ ○ ○ ☓ ○
・IE8はFlash player または Silverlight を使う以外にストリーミングする方法はない
・IE9+でWebMプラグインをインストールすればWebM フォーマットが再生可能
・Safariのみ、HLS をブラウザがサポートしている
- 15. すまーとでばいすとぱそこんぶらうざ
● http://caniuse.com/
● スマートデバイスとパソコンを一緒くたにしてみた
IE8
(PC)
IE9+
(PC)
Chrome
(PC)
Firefox
(PC)
Safari
(PC)
Opera
(PC) iOS Android
2.3
Android
4.0+
Windows
8+
MPEG4
/H.264 ☓ ○ ○ ○ ○ ☓ ○ ☓ ○ ○
WebM ☓ ☓ ○ ○ ☓ ○ ☓ ○ ○ ☓
Ogg ☓ ☓ ○ ○ ☓ ○ ☓ ☓ ☓ ☓
HLS ☓ ☓ ☓ ☓ ○ ☓ ○ ☓ ○ ☓
要件に応じて最適なフォーマット/方式を選択しないといけない
・IE8は<video> タグをサポートしない
・SafariはWebM(VP8) をサポートしない
- 16. ぶらうざのもんだい
● HLSのMPEG-2 TS コンテナーにビデオコーデックの指定
はない
– iOS (Safari)がVP8 (WebM) をサポートしない
– 事実上、HLSのビデオコーデックはH.264のみ
● IE8 (サポートは2016年1月まで)が<video> タグをサ
ポートしない
– ストリーミングするにはFlash Player またはSilverlight
を使うしかない
- 17. めでぃあぷれいやー
● Video.js
– html5とswfプレイヤーを備えたマルチブラウザ/マルチデバイス対応
● PC向け: IE8+ 、Firefox 、Chrome
● スマートデバイス: iOS 、Android 、Windows Tablet/SmartPhone
– ライセンス: Apache License 2.0
– プラガブルなアーキテクチャ
● hls/mediasourceプラグインでHLSに対応
– flashhlsプレイヤーの1つ (要flash)
● MPEG-DASHの開発も最近始まった
– videojs-osmf
– DASH Everywhere-ish
– 実績
● Google Media Frameworkのプレイヤーに採用
● twitpicやairbnbなどでも採用されているらしい
- 18. なぜふらっしゅなのか
● PC向けブラウザは多くがHLSをサポートしていない
● (2014-11時点で) HLSをサポートするのはSafariのみ
– 再生する(H.264デコード)には特許問題の不透明感
– ブラウザベンダーの思惑?
● WindowsはSmooth Streamingあるし
● Chrome/FirefoxはWebMを推進しているし
● そうだ! Flash Playerを使おう
– マルチプラットフォーム/ブラウザで動作し、
H.264デコードの特許問題にも抵触しない唯一のソリューション
● IE8が<video>タグに対応していない問題も解決?
MPEG-DASHの普及まで
- 19. びでおじぇーえすのあーきてくちゃ
● video.js
– プレイヤー本体、ブラウザの<video>タグを使う
● video-js-swf
– Flash Playerを使うswfプレイヤーの実装
– RTMP/HTTPの両方をサポート
● videojs-contrib-hls
– HLSをサポートするプラグイン
● クライアント駆動のビットレートスイッチをサポート
● 但し、IEのサポートは10+ (要Typed Arrays, Cross-Origin Resource Sharing)
– プレイリストのパースやh264ストリームを扱う機能を提供
● videojs-contrib-media-source
– Media Source Extensionsを扱うためのプラグイン
● video要素のデータを直接的に扱う
● ソースから読み込んだデータをbase64でエンコードして直接swfへバッファとしてinvokeする
– まだまだ荒削りな実装にみえる (- -#
このバッファリングがピーキー、特にIE10
- 20. ぼくのかんがえたさいきょうの
● ストリーミングサーバー
– Webサーバーをスケールアウトする形態でHLSを提供
● 将来的にはMPEG-DASHへ移行
– RTMPストリーミングは以下の要件がない限り使わない
(いまの時点では)
HLS を中心に据え、
対応できないケースを
限定的に対応
● 端末にキャッシュを残せない
● IE6がサポート対象である (Flash Player 10はHTTPストリーミングを未サポート)
– IE8サポートが不要ならWebMを提供するのも1つの方法
● IE、SafariはWebMプラグインのインストールが必要
● ブラウザ/各種デバイス
– flashhlsでPC/スマートデバイス全てHLSでストリーミング再生
● MPEG-DASHでWindows Tablet/SmartPhoneも
– HLSに対応できないブラウザ (IE8やIE9など)はどうする?
Flash Playerは必須
● MPEG4/H.264をFlash Playerで再生 (なくなるのは時間の問題)
● 要件/構成によってはWebMで代用することも
- 21. だっしゅ
● dashif.org
– Dynamic Adaptive Streaming over HTTP, aka MPEG-DASH
– Adobe HDSとMicrosoft Smooth Streamingはこれに移行
– ベンダーロックインではないAdaptive bitrate streaming ⇔ HLS
– DRM (デジタル著作権管理)も扱える
● 標準化
– 2012-03: 1st Edition of MPEG-DASH, ISO/IEC 23009-1:2012
– 2014-05: 2nd Edition of MEPG-DASH, ISO/IEC 23009-1:2014
● HTML5 Media Source Extensionsからも使えるらしい
● コンテナー: MP4, WebM, MPEG-2 TSなど
● ISO base media file format (MP4も含む)
● Matroska/WebM in MPEG DASH
● OS/ブラウザベンダーの動向
標準化はされているから
これからの普及待ち
– Apple: Safari8+(Yosemite), Adobe Primetime Support for MPEG-DASH
iOSは?
– Google: Android 4.4から対応、Chrome23+
– Mozilla: Firefox31+(Partial support), DASH Adaptive Streaming for HTML 5 Video (バグ修正中?)
– Microsoft: IE11+, Building a simple MPEG-DASH streaming player
– Opera: 20以降 (Only WebM?)
- 22. まとめ
● ストリーミングプロトコルはHTTP一択へ
– Adaptive bitrate streamingはいまのところ2つに集約化
● HTTP Live Streaming
● MPEG-DASH (将来的にはこっち?)
HLSの展望はApple次第
● H.264の特許問題はこれらを使うことで一応は回避可能
– OpenH264やFlash Playerなどエンコード/デコード対応
– 但し、アプリの作り込みが必要
● MPEG-DASHでWebMが普及?
– HLSのコンテナー: MPEG-2 TS
OS/ ブラウザベンダーの対応次第
● ビデオコーデック: 仕様にはないけど、事実上はH.264
– MPEG-DASHのコンテナー: MP4, WebM, MPEG-2 TSなど
– WebRTCのコーデック: H.264 or VP8(VP9) ?