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

HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話しますMoriyoshi Koizumi
 
Pcapngを読んでみる
Pcapngを読んでみるPcapngを読んでみる
Pcapngを読んでみるYagi Shinnosuke
 
Wireshark入門(2)
Wireshark入門(2)Wireshark入門(2)
Wireshark入門(2)彰 村地
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOGame Tools & Middleware Forum
 
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT  (ver. 2)Try new transport protocol SRT  (ver. 2)
Try new transport protocol SRT (ver. 2)Tetsuyuki Kobayashi
 
インターネットにおける動画配信の仕組み
インターネットにおける動画配信の仕組みインターネットにおける動画配信の仕組み
インターネットにおける動画配信の仕組みRyosuke Kubo
 
第1回UE4名古屋勉強会
第1回UE4名古屋勉強会第1回UE4名古屋勉強会
第1回UE4名古屋勉強会Masahiko Nakamura
 
Inside WebM
Inside WebMInside WebM
Inside WebMmganeko
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 
SFUの話
SFUの話SFUの話
SFUの話tnoho
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理信之 岩永
 
AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場Yusuke Goto
 
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...VirtualTech Japan Inc.
 
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキングCloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキングKiyonori Kitasako
 
OpenStackによる、実践オンプレミスクラウド
OpenStackによる、実践オンプレミスクラウドOpenStackによる、実践オンプレミスクラウド
OpenStackによる、実践オンプレミスクラウドMasanori Itoh
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版Contest Ntt-west
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側Yusuke Naka
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 

What's hot (20)

How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話します
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
Pcapngを読んでみる
Pcapngを読んでみるPcapngを読んでみる
Pcapngを読んでみる
 
Wireshark入門(2)
Wireshark入門(2)Wireshark入門(2)
Wireshark入門(2)
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
 
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT  (ver. 2)Try new transport protocol SRT  (ver. 2)
Try new transport protocol SRT (ver. 2)
 
インターネットにおける動画配信の仕組み
インターネットにおける動画配信の仕組みインターネットにおける動画配信の仕組み
インターネットにおける動画配信の仕組み
 
第1回UE4名古屋勉強会
第1回UE4名古屋勉強会第1回UE4名古屋勉強会
第1回UE4名古屋勉強会
 
Inside WebM
Inside WebMInside WebM
Inside WebM
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
SFUの話
SFUの話SFUの話
SFUの話
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場
 
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
 
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキングCloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
CloudFrontで実現するセキュアコンテンツ配信と効果のトラッキング
 
OpenStackによる、実践オンプレミスクラウド
OpenStackによる、実践オンプレミスクラウドOpenStackによる、実践オンプレミスクラウド
OpenStackによる、実践オンプレミスクラウド
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 

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

ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざいTetsuya Morimoto
 
[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
 

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 でのビデオ サービス開発~
 

ライブストリーミングの基礎知識その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