**:
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...