オルタナティブ・ブログ > プログラマー社長のブログ >

プログラミングでメシが食えるか!?

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時間くらいでこのくらいのものなら作れますので、仕様書を読んで難しいと思ったら、作ってみるのがお勧めです!

Comment(2)