FLV檔案格式分析

2021-06-04 05:43:29 字數 3138 閱讀 9593

**:

flv header

一般比較簡單,包括檔案型別之類的全域性資訊,如圖:

檔案型別

3bytes

總是flv(0x46 0x4c 0x56),否則...

版本1byte

一般是0x01,表示flv version 1

流資訊1byte

header長度

4bytes

整個檔案頭的長度,一般是9(3+1+1+4),有時候後面還有些別的資訊,就不是9了

flv body

flv body就是由很多tag組成的。

flv檔案裡面幀的實體就是tag了。每個tag都可以分為兩部分,第一部分包含是tag 型別資訊,長度固定為15位元組,如圖:

前乙個tag的長度,第乙個tag就是0

tag型別

1byte

三類:

資料區長度

3bytes

時間戳3bytes

單位毫秒,如果是指令碼tag就是0

擴充套件時間戳

1byte

作為時間戳的高位

streamsid

3bytes

總是0(不知道幹啥用)

資料區

接下來說一下檔案尾,在檔案尾的最後有四個位元組是定義最後乙個tag的長度的,如圖:

這裡我門可以算一下,是00 00 00 dd是221,最後乙個tag的長度是221,如圖:

下面是不同型別的tag資料區的內容體

audio tag 資料區

audio資訊

1byte

前四位bits表示音訊格式:

下面兩位bits表示samplerate:

下面一位bit表示每個取樣的長度:

下面一位bit表示型別:

audio資料區不定

video tag 資料區

video資訊

1byte

前四位bits表示型別:

後四位bits表示編碼器id:

video資料區不定

script tag 資料區

略n字...

procedure tform1.button1click(sender: tobject);

begin

opendialog1.execute;

edit1.text:=opendialog1.filename;

end;

procedure tform1.button2click(sender: tobject);

varifilehandle:   integer;

ifilelength:   integer;

ibytesread:   integer;

buffer:   array   of   byte;

i:   integer;

str1,str2:string;

tminute,tsecond,tmillisecond,tmptime:integer;

begin

if edit1.text = '' then

begin

showmessage('請選擇檔案!');

exit;

end;

ifilehandle   :=   fileopen( edit1.text ,   fmopenread);

ifilelength   :=   fileseek(ifilehandle,   0,   2);

fileseek(ifilehandle,   0,   0);

setlength(buffer,   ifilelength);

ibytesread   :=   fileread(ifilehandle,   buffer[0],   ifilelength);

fileclose(ifilehandle);

str1   :=   '';

for   i   := ibytesread   -   4   to   ibytesread   -   1   do

begin

str1   :=   str1   +   inttohex(buffer[i],2);

end;

str2   :=   '';

for   i   := ibytesread   -   strtoint('$'+str1) to   ibytesread   -   (strtoint('$'+str1)-2)   do

begin

str2   :=   str2   +   inttohex(buffer[i],2);

end;

tmillisecond:=strtoint('$'+str2);

tminute:=(tmillisecond div 1000) div 60;

tsecond:=(tmillisecond div 1000) mod 60;

tmptime:=tmillisecond mod 1000;

label2.caption:=inttostr(tminute)+'分'+inttostr(tsecond)+'秒';

buffer   :=   nil;

end;

FLV檔案格式分析

flv header 一般比較簡單,包括檔案型別之類的全域性資訊,如圖 檔案型別 3bytes 總是flv 0x46 0x4c 0x56 否則.版本1byte 一般是0x01,表示flv version 1 流資訊1byte header長度 4bytes 整個檔案頭的長度,一般是9 3 1 1 4...

FLV檔案格式

1.flv檔案格式相對於mp4,簡單很多。flv header 9bytes flv body a位元 1 有音訊 0 無音訊 f l v 0x01 0b00000a0v 0x00 00 00 09 版本位元組一般為0x01 頭長度 固定為9 flv body由一系列的tag組成,每個tag的結構如...

FLV檔案格式解析

flv是流 封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭 file header 和檔案體 file body 兩部分,其中檔案體由一系列的tag及tag size對組成。因此乙個flv檔案看上去是下面的結構 其中,previous tag size 緊跟在每個 tag...