Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

ライブストリーミングの基礎知識その2

21 470 vues

Publié le

  • Identifiez-vous pour voir les commentaires

ライブストリーミングの基礎知識その2

  1. 1. ライブストリーミングの基礎知識その2あれくま
  2. 2. おさらい前回のおさらい • ビデオフォーマットの話 • ストリーミングプロトコルの話 2
  3. 3. ビデオフォーマットコーデック • 圧縮方法 • WMV9・H.264・VP6・VP8・Theoraなどなど • WMA・AAC・MP3・Vorbisなどなどコンテナ • ファイル構造 • ASF・MP4・FLV・Ogg・MKVなどなど 3
  4. 4. プロトコルHTTPプログレッシブダウンロード • ダウンロードしたところまで再生 • 簡単だけど • 機能少なめストリーミング用プロトコル • RTP・RTSP • MMS・MMSH • RTMP・RTMPH・RTMFP • HTTP Live Streaming • PCP 4
  5. 5. FLV解説編どうしてこうなった
  6. 6. FLVとは• Flashで使われるコンテナフォーマット• シンプルでストリーミングもしやすい• 仕様書は http://www.adobe.com/devnet/f4v.html • F4Vの仕様書だけど後ろの方におまけでFLVも書いてある• RTMPでストリーミングするときのパケットと(ほぼ)同じ 6
  7. 7. ファイルフォーマットサイズ 9 4 11+ 4 ... 11+ 4内容 ファイル 0 FLVタグ 前のタグ ... FLVタグ 前のタグ ヘッダ のサイズ のサイズ• 全体的にビッグエンディアン• 1つのFLVタグに映像・音声・メタデータのいずれかが入る• 基本的にFLVタグが並んでるだけなので簡単 7
  8. 8. ファイルヘッダ領域 バイト位置 1 2 3 4 5 6 7 8 9 内容 F L V バージョン タイプフラグ データ開始位置 (0x01) (0x09)ファイル先頭にあるファイルヘッダタイプフラグで映像・音声が入っているかどうかを判別 • 音声が入ってたら下から3ビット目が1 (0x04) • 映像が入ってたら下から1ビット目が1 (0x01) • 映像・音声は各1ストリームずつだけ入れられる • 副音声とかはできない 8
  9. 9. FLVタグ位置 1 2 3 4 5 6 7 8 9 10 11 ...内容 データ データ タイムスタンプ タイムスタンプ ストリームID データ 種別 サイズ 拡張分 (0)実際のデータが入る単位データ種別によって内容がかわる • 音声 = 0x08 • 映像 = 0x09 • スクリプト = 0x12 = 18タイムスタンプ • ファイル先頭からのミリ秒単位のタイムスタンプ • 24ビットで溢れたら拡張分のところに上位8ビットが入る 9
  10. 10. 音声データ 位置 1 ... ... 内容 フォーマット情報 (追加フォーマット情報) 実データフォーマット情報 # コーデック • コーデック番号・サンプリング周波数・ビット数・ 0 PCM(BE) チャンネル数なんかが入ってる 1 ADPCM • さらに詳しくは仕様書参照 2 MP3 • コーデック番号は右表の感じ 3 PCM(LE)AACのみ追加フォーマット情報がつく 4 Asao 16kHz mono実データの内容はswfの仕様書が詳しい 5 Asao 8kHz mono 6 Asao 10 AAC 11 Speex 10
  11. 11. 映像データ 位置 1 ... ... 内容 フォーマット情報 (追加フォーマット情報) 実データ音声とだいたい同じ # コーデックフォーマット情報 2 Sorenson H.263 • コーデックIDの他にフレーム情報も入ってる 3 Screen video • キーフレームだとか中間フレームだとか 4 On2 VP6 • 使えるコーデックは右表の感じ 5 VP6+αチャンネル実データの内容はやっぱりswfの仕様書が詳しい 6 Screen video 2 7 AVC (H.264) • Screen videoコーデックの内容もそこに 11
  12. 12. スクリプトデータ 位置 1 ... 内容 メソッド名(文字列) 引数(配列かオブジェクト)FLVの特徴的なところActionScriptのメソッド呼び出しデータが入る • ビデオにプレイヤー固有のデータを埋め込める各文字列やオブジェクトデータはAMF0で格納される • FLVの仕様書に全部書いてあるので気にしなくてよいタイトル・作者・ビットレート等のメタデータもスクリプトタグで入る • メソッド名 = onMetaData • 引数 = ECMAArray(プロパティの配列)その他プレイヤーに固有の命令も埋め込める(はず) 12
  13. 13. FLVとストリーミングストリーミングしやすいフォーマット階層のないベタ書き • 前もってデータ長がわからなくても書き出せる • どんどんファイルが伸ばせるのでライブストリーミングも可能タグ単位で独立している • 一部のデータが壊れても途中から問題なく再生できる • ファイルヘッダは必要だけど小さい同期が取りやすい • 途中でデータ落ちや化けが発生しても次のタグを探すのが楽 • 定期的にタグヘッダが出現する • タグのあとにはタグのサイズがくる 13
  14. 14. おまけPEERCASTで配信するには?ここからが本題
  15. 15. FLV配信は難しいPeerCastStationでは対応 • 1.2.0現在、メタデータは取れてない • これ書いてるうちに対応させた • 視聴側 • PeerCastStation • パッチ当てたPeerCastIM • YP上ではUNKNOWN扱いになる • パッチ当てたPeerCast使ったYPならFLV配信側はなんとかなるけど視聴側も対応必要なのはむずかしい 15
  16. 16. FLV配信は難しい その2エンコーダ・ストリーミングサーバの問題× Flash Media Live Encoder • ストリーミングはFlash Media ServerへのPushのみ • FLVはファイルへの保存のみ△ ffserver • 設定が難しい • Windowsではバイナリがない△ VLC • H.264使えばいけそうだが重すぎる△ ffmpeg + 独自ストリーミングサーバ • 設定さえできれば使えそう • GUI作るのがめんどい 16
  17. 17. FLV配信は難しい その3プレイヤーの問題Windows Media Playerなどでは標準で再生できない • ffdshow的な別なコーデックパックが必要 • 入れてもらえるか?Flashベースのプレイヤー • PeerCastのHTML内に設置しないと見れない • すごいめんどいAIRベースのプレイヤー • あれば見れると思う • あればな • やっぱりインストールの問題はある 17
  18. 18. FLV配信の利点何かいいことあるのか?H.264が使える • x264は品質重視のようで重すぎる • HWエンコーダを使いたいVP6が使える • ffmpegで使った感じでは綺麗でも軽くもない……Flash Screen Video 2が使える • プログラミング配信にいい感じスクリプトタグが使える • プレイヤー・エンコーダが一括で作れれば面白いことができそうRTMPからの変換が簡単 18
  19. 19. RTMP→FLVサーバRTMPストリーミングからFLVへの変換が比較的簡単 • RTMPのメッセージとFLVタグの構造がほぼ同じ • Muxがとても簡単RTMPで受信→FLVで配信するストリーミングサーバが作れそう • Flashから配信とかできる • 市販のUstreamとかに配信できるエンコーダ・カメラ等が使えるか も 19
  20. 20. まとめFLVの構造は簡単PeerCastでの配信は難しいが…… • RTMP→FLVサーバがあると夢が広がるみんなで作ろう! 20
  21. 21. 参考文献FLV and F4V File Format Specification (Version 10.1) • http://www.adobe.com/devnet/f4v.htmlSWF File Format Specification (version 19) • http://www.adobe.com/devnet/swf.htmlReal-Time Messaging Protocol (RTMP) specification • http://www.adobe.com/devnet/rtmp.html 21

×