FLVファイルの形式
動画ファイルにはいろいろなファイル形式がありますが、たまたまFLVファイルを調べる用事があったので、備忘録的に書いておきます。
FLVファイルはFlashPlayerで使われる動画ファイルの形式で、YouTubeを始め、多くの動画サイトで使われています。
FLVファイルの定義は公開されていて、
http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf
ここに仕様書があります。
これを見ながら、ファイルを読むプログラムを作ってみました。
テキストで表示するようにしてみると以下のような感じです。最初にヘッダがあり、後はタグデータと呼ばれるブロックが繰り返します。タグデータには、スクリプト(18)・オーディオ(8)・ビデオ(9)があります。それぞれに応じた形式が定義されていますが、ここでは中身は長くなるので省略しています。
「
Header{
Signature:FLV
Version:1
TypeFlagReserved:0,0,0,0,0
TypeFlagsAudio:1
TypeFlagsReserved:0
TypeFlagsVideo:1
DataOffset:9
}
{
PreviousTagSize:0
Reserved:0,0
Filter:0
TagType:18(1,0,0,1,0)
DataSize:843
Timestamp:0
TimestampExtended:0
StreamID:0
data:(TagTypeに応じた形式のデータがDataSize分入る)
}
{
PreviousTagSize:854
Reserved:0,0
Filter:0
TagType:9(0,1,0,0,1)
DataSize:45
Timestamp:0
TimestampExtended:0
StreamID:0
data:(TagTypeに応じた形式のデータがDataSize分入る)
}
{
PreviousTagSize:56
Reserved:0,0
Filter:0
TagType:8(0,1,0,0,0)
DataSize:4
Timestamp:0
TimestampExtended:0
StreamID:0
data:(TagTypeに応じた形式のデータがDataSize分入る)
}
・・・
」
C言語で117行くらいでこんな感じに確認するプログラムを書けます。
通信プロトコルやファイルフォーマットは、仕様書を読んでもなかなか完全に理解できないことが多く、こんな感じで、仕様書をベースにプログラムを作ってみて、本物のデータを扱ってみると理解できるものです。大体1時間くらいでこのくらいのものなら作れますので、仕様書を読んで難しいと思ったら、作ってみるのがお勧めです!