SlideShare a Scribd company logo
1 of 21
Download to read offline
ライブストリーミ
ングの基礎知識
その2
あれくま
おさらい
前回のおさらい
 • ビデオフォーマットの話
 • ストリーミングプロトコルの話




                    2
ビデオフォーマット
コーデック
 • 圧縮方法
 • WMV9・H.264・VP6・VP8・Theoraなどなど
 • WMA・AAC・MP3・Vorbisなどなど
コンテナ
 • ファイル構造
 • ASF・MP4・FLV・Ogg・MKVなどなど




                                   3
プロトコル
HTTPプログレッシブダウンロード
 • ダウンロードしたところまで再生
 • 簡単だけど
 • 機能少なめ
ストリーミング用プロトコル
 •   RTP・RTSP
 •   MMS・MMSH
 •   RTMP・RTMPH・RTMFP
 •   HTTP Live Streaming
 •   PCP




                           4
FLV解説編
どうしてこうなった
FLVとは
• Flashで使われるコンテナフォーマット
• シンプルでストリーミングもしやすい
• 仕様書は http://www.adobe.com/devnet/f4v.html
    • F4Vの仕様書だけど後ろの方におまけでFLVも書いてある
• RTMPでストリーミングするときのパケットと(ほぼ)同じ




                                              6
ファイルフォーマット
サイズ 9       4   11+   4     ... 11+   4
内容   ファイル   0   FLVタグ 前のタグ ... FLVタグ 前のタグ
     ヘッダ              のサイズ           のサイズ


• 全体的にビッグエンディアン
• 1つのFLVタグに映像・音声・メタデータのいずれかが入る
• 基本的にFLVタグが並んでるだけなので簡単




                                            7
ファイルヘッダ領域
 バイト位置 1     2     3   4        5     6 7   8   9
 内容      'F' 'L'   'V' バージョン    タイプフラグ データ開始位置
                       (0x01)          (0x09)

ファイル先頭にあるファイルヘッダ
タイプフラグで映像・音声が入っているかどうかを判別
 • 音声が入ってたら下から3ビット目が1 (0x04)
 • 映像が入ってたら下から1ビット目が1 (0x01)
 • 映像・音声は各1ストリームずつだけ入れられる
      • 副音声とかはできない




                                                    8
FLVタグ
位置 1      2 3 4 5      6   7   8         9   10   11   ...
内容 データ    データ   タイムスタンプ        タイムスタンプ   ストリームID       データ
   種別     サイズ                  拡張分       (0)

実際のデータが入る単位
データ種別によって内容がかわる
 • 音声 = 0x08
 • 映像 = 0x09
 • スクリプト = 0x12 = 18
タイムスタンプ
 • ファイル先頭からのミリ秒単位のタイムスタンプ
 • 24ビットで溢れたら拡張分のところに上位8ビットが入る




                                                             9
音声データ
    位置     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
映像データ
    位置     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
スクリプトデータ
     位置 1           ...
     内容 メソッド名(文字列) 引数(配列かオブジェクト)

FLVの特徴的なところ
ActionScriptのメソッド呼び出しデータが入る
 • ビデオにプレイヤー固有のデータを埋め込める
各文字列やオブジェクトデータはAMF0で格納される
 • FLVの仕様書に全部書いてあるので気にしなくてよい
タイトル・作者・ビットレート等のメタデータもスクリプトタグで入る
 • メソッド名 = onMetaData
 • 引数 = ECMAArray(プロパティの配列)
その他プレイヤーに固有の命令も埋め込める(はず)




                                   12
FLVとストリーミング
ストリーミングしやすいフォーマット
階層のないベタ書き
 • 前もってデータ長がわからなくても書き出せる
 • どんどんファイルが伸ばせるのでライブストリーミングも可能
タグ単位で独立している
 • 一部のデータが壊れても途中から問題なく再生できる
 • ファイルヘッダは必要だけど小さい
同期が取りやすい
 • 途中でデータ落ちや化けが発生しても次のタグを探すのが楽
 • 定期的にタグヘッダが出現する
 • タグのあとにはタグのサイズがくる




                                  13
おまけ
PEERCASTで
配信するには?
ここからが本題
FLV配信は難しい
PeerCastStationでは対応
 • 1.2.0現在、メタデータは取れてない
     • これ書いてるうちに対応させた
 • 視聴側
     • PeerCastStation
     • パッチ当てたPeerCastIM
 • YP上ではUNKNOWN扱いになる
     • パッチ当てたPeerCast使ったYPならFLV
配信側はなんとかなるけど視聴側も対応必要なのはむずかしい




                                  15
FLV配信は難しい その2
エンコーダ・ストリーミングサーバの問題
× Flash Media Live Encoder
 • ストリーミングはFlash Media ServerへのPushのみ
 • FLVはファイルへの保存のみ
△ ffserver
 • 設定が難しい
 • Windowsではバイナリがない
△ VLC
 • H.264使えばいけそうだが重すぎる
△ ffmpeg + 独自ストリーミングサーバ
  • 設定さえできれば使えそう
  • GUI作るのがめんどい




                                        16
FLV配信は難しい その3
プレイヤーの問題
Windows Media Playerなどでは標準で再生できない
  • ffdshow的な別なコーデックパックが必要
  • 入れてもらえるか?
Flashベースのプレイヤー
  • PeerCastのHTML内に設置しないと見れない
  • すごいめんどい
AIRベースのプレイヤー
 • あれば見れると思う
 • あればな
 • やっぱりインストールの問題はある




                                    17
FLV配信の利点
何かいいことあるのか?
H.264が使える
  • x264は品質重視のようで重すぎる
  • HWエンコーダを使いたい
VP6が使える
  • ffmpegで使った感じでは綺麗でも軽くもない……
Flash Screen Video 2が使える
 • プログラミング配信にいい感じ
スクリプトタグが使える
  • プレイヤー・エンコーダが一括で作れれば面白いことができそう
RTMPからの変換が簡単




                                    18
RTMP→FLVサーバ
RTMPストリーミングからFLVへの変換が比較的簡単
  • RTMPのメッセージとFLVタグの構造がほぼ同じ
  • Muxがとても簡単
RTMPで受信→FLVで配信するストリーミングサーバが作れそう
 • Flashから配信とかできる
 • 市販のUstreamとかに配信できるエンコーダ・カメラ等が使えるか
   も




                                       19
まとめ
FLVの構造は簡単
PeerCastでの配信は難しいが……
 • RTMP→FLVサーバがあると夢が広がる
みんなで作ろう!




                          20
参考文献
FLV and F4V File Format Specification (Version 10.1)
 • http://www.adobe.com/devnet/f4v.html
SWF File Format Specification (version 19)
  • http://www.adobe.com/devnet/swf.html
Real-Time Messaging Protocol (RTMP) specification
  • http://www.adobe.com/devnet/rtmp.html




                                                       21

More Related Content

What's hot

【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮Hibino Hisashi
 
Tokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリット
Tokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリットTokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリット
Tokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリットMasashi Ito
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化kazuhcurry
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~モノビット エンジン
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みYusuke Goto
 
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要Google Cloud Platform - Japan
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
RootlessコンテナAkihiro Suda
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方歩 柴田
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Ryuichi Sakamoto
 
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法Kumazaki Hiroki
 
Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方Takeshi Mikami
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Hiro H.
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門Akihiro Kuwano
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)J-Stream Inc.
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
AbemaTVの動画配信を支えるサーバーサイドシステム
AbemaTVの動画配信を支えるサーバーサイドシステムAbemaTVの動画配信を支えるサーバーサイドシステム
AbemaTVの動画配信を支えるサーバーサイドシステムyuichiro nakazawa
 

What's hot (20)

【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
 
Tokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリット
Tokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリットTokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリット
Tokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリット
 
MapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知るMapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知る
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組み
 
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
 
Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
AbemaTVの動画配信を支えるサーバーサイドシステム
AbemaTVの動画配信を支えるサーバーサイドシステムAbemaTVの動画配信を支えるサーバーサイドシステム
AbemaTVの動画配信を支えるサーバーサイドシステム
 

Viewers also liked

CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキングCloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキングKiyonori Kitasako
 
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)Teiichi Ota
 
HTML5でDRMってアリなの?〜誰も教えてくれないマルチデバイス時代のコンテンツ保護。その現状と展望
HTML5でDRMってアリなの?〜誰も教えてくれないマルチデバイス時代のコンテンツ保護。その現状と展望HTML5でDRMってアリなの?〜誰も教えてくれないマルチデバイス時代のコンテンツ保護。その現状と展望
HTML5でDRMってアリなの?〜誰も教えてくれないマルチデバイス時代のコンテンツ保護。その現状と展望Teiichi Ota
 
ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざいTetsuya Morimoto
 
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させる
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させるHTML5 + JavaScriptでDRMつきMPEG-DASHを再生させる
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させるGaprot
 
AWS Black Belt Online Seminar 2017 動画配信 on AWS
AWS Black Belt Online Seminar 2017 動画配信 on AWSAWS Black Belt Online Seminar 2017 動画配信 on AWS
AWS Black Belt Online Seminar 2017 動画配信 on AWSAmazon Web Services Japan
 

Viewers also liked (6)

CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキングCloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
 
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
 
HTML5でDRMってアリなの?〜誰も教えてくれないマルチデバイス時代のコンテンツ保護。その現状と展望
HTML5でDRMってアリなの?〜誰も教えてくれないマルチデバイス時代のコンテンツ保護。その現状と展望HTML5でDRMってアリなの?〜誰も教えてくれないマルチデバイス時代のコンテンツ保護。その現状と展望
HTML5でDRMってアリなの?〜誰も教えてくれないマルチデバイス時代のコンテンツ保護。その現状と展望
 
ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざい
 
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させる
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させるHTML5 + JavaScriptでDRMつきMPEG-DASHを再生させる
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させる
 
AWS Black Belt Online Seminar 2017 動画配信 on AWS
AWS Black Belt Online Seminar 2017 動画配信 on AWSAWS Black Belt Online Seminar 2017 動画配信 on AWS
AWS Black Belt Online Seminar 2017 動画配信 on AWS
 

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

[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLTYoshifumi Yamaguchi
 
PHPでのSWF編集とその応用
PHPでのSWF編集とその応用PHPでのSWF編集とその応用
PHPでのSWF編集とその応用Yo Ya
 
日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話Tatsuya Matsumoto
 
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料Kentaro Matsumae
 
動画ファイルフォーマット
動画ファイルフォーマット動画ファイルフォーマット
動画ファイルフォーマットIshii Tatsuya
 
第1回 html5j TV部 勉強会 MPEG-DASH向けの動画配信。
第1回 html5j TV部 勉強会 MPEG-DASH向けの動画配信。第1回 html5j TV部 勉強会 MPEG-DASH向けの動画配信。
第1回 html5j TV部 勉強会 MPEG-DASH向けの動画配信。Daiyu Hatakeyama
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトnormalian
 
AV1リアルタイムハードウェアエンコーダ
AV1リアルタイムハードウェアエンコーダAV1リアルタイムハードウェアエンコーダ
AV1リアルタイムハードウェアエンコーダRuako Takatori
 
Movie Format in a Nutshell 2013
Movie Format in a Nutshell 2013Movie Format in a Nutshell 2013
Movie Format in a Nutshell 2013Ryo Amano
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門l_b__
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツールtamtam180
 
How to make a Flash based Wii Ware
How to make a Flash based Wii WareHow to make a Flash based Wii Ware
How to make a Flash based Wii WareTamotsu Machida
 
インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版Yusei Yamanaka
 
メモリ技術の紹介 20170826
メモリ技術の紹介 20170826メモリ技術の紹介 20170826
メモリ技術の紹介 20170826Takashi Maeda
 
Azure vs aws比較 エンコード ace用
Azure vs aws比較 エンコード ace用Azure vs aws比較 エンコード ace用
Azure vs aws比較 エンコード ace用裕之 木下
 
Azure Media Services 大全
Azure Media Services 大全Azure Media Services 大全
Azure Media Services 大全Daiyu Hatakeyama
 
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~decode2016
 
LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識MKT International Inc.
 

Similar to ライブストリーミングの基礎知識その2 (20)

[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT
 
PHPでのSWF編集とその応用
PHPでのSWF編集とその応用PHPでのSWF編集とその応用
PHPでのSWF編集とその応用
 
日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話
 
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
 
CBA様_全通話録音の新基準VoIP Trek
CBA様_全通話録音の新基準VoIP TrekCBA様_全通話録音の新基準VoIP Trek
CBA様_全通話録音の新基準VoIP Trek
 
動画ファイルフォーマット
動画ファイルフォーマット動画ファイルフォーマット
動画ファイルフォーマット
 
第1回 html5j TV部 勉強会 MPEG-DASH向けの動画配信。
第1回 html5j TV部 勉強会 MPEG-DASH向けの動画配信。第1回 html5j TV部 勉強会 MPEG-DASH向けの動画配信。
第1回 html5j TV部 勉強会 MPEG-DASH向けの動画配信。
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイト
 
AV1リアルタイムハードウェアエンコーダ
AV1リアルタイムハードウェアエンコーダAV1リアルタイムハードウェアエンコーダ
AV1リアルタイムハードウェアエンコーダ
 
Movie Format in a Nutshell 2013
Movie Format in a Nutshell 2013Movie Format in a Nutshell 2013
Movie Format in a Nutshell 2013
 
FRESH LIVEへのSRT導入
FRESH LIVEへのSRT導入FRESH LIVEへのSRT導入
FRESH LIVEへのSRT導入
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 
How to make a Flash based Wii Ware
How to make a Flash based Wii WareHow to make a Flash based Wii Ware
How to make a Flash based Wii Ware
 
インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版
 
メモリ技術の紹介 20170826
メモリ技術の紹介 20170826メモリ技術の紹介 20170826
メモリ技術の紹介 20170826
 
Azure vs aws比較 エンコード ace用
Azure vs aws比較 エンコード ace用Azure vs aws比較 エンコード ace用
Azure vs aws比較 エンコード ace用
 
Azure Media Services 大全
Azure Media Services 大全Azure Media Services 大全
Azure Media Services 大全
 
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
 
LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識
 

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

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