- 浏览: 237636 次
- 性别:
- 来自: 南京
-
最新评论
-
baby8117628:
vc下mp3 IDv1和IDV2的读取 -
gezexu:
你好,我按照你的步骤一步步进行但是安装libvorbis的时候 ...
linux如何搭建强大的FFMPEG环境 -
ini_always:
帅哥,转载也把格式做好点,另外出处也要注明一下吧。。。
MP3文件格式解析
FLV是一个二进制文件,由文件头(FLV header)和很多tag组成。tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)。
FLV Header
一般比较简单,包括文件类型之类的全局信息,如图:
文件类型 3bytes 总是FLV(0x46 0x4C 0x56),否则...
版本 1byte 一般是0x01,表示FLV version 1
流信息 1byte 倒数第一bit是1表示有视频,倒数第三bit是1表示有音频,其他都应该是0(有些软件如flvtool2可能造成倒数第四bit是1,不过也没发现有什么不对)
header长度 4bytes 整个文件头的长度,一般是9(3+1+1+4),有时候后面还有些别的信息,就不是9了
FLV Body
FLV body就是由很多tag组成的。
FLV文件里面帧的实体就是tag了。每个tag都可以分为两部分,第一部分包含是tag 类型信息,长度固定为15字节,如图:
第二部分为tag data,也就是flv的数据(有音频,视频,脚本等三类数据),根据不同的tag类型就有不同的数据区,数据区的长度由第一部分的数据区长度字段定义,如图:
previoustagsize 4bytes 前一个tag的长度,第一个tag就是0
tag类型 1byte
三类:
* 8 -- 音频tag
* 9 -- 视频tag
* 18 -- 脚本tag
数据区长度 3bytes
时间戳 3bytes 单位毫秒,如果是脚本tag就是0
扩展时间戳 1byte 作为时间戳的高位
streamsID 3bytes 总是0(不知道干啥用)
数据区
接下来就是下一个tag的内容,其开始的四个字节定义了上个tag的总长度,注意上个tag的总长度中不包括上个tag之前的4个描述再上一个tag的长度的4个字节,如图:
接下来说一下文件尾,在文件尾的最后有四个字节是定义最后一个tag的长度的,如图:
这里我门可以算一下,是00 00 00 DD是221,最后一个tag的长度是221,如图:
下面是不同类型的tag数据区的内容体
Audio tag 数据区
audio信息 1byte
前四位bits表示音频格式:
* 0 -- 未压缩
* 1 -- ADPCM
* 2 -- MP3
* 5 -- Nellymoser 8kHz momo
* 6 -- Nellymoser
下面两位bits表示samplerate:
* 0 -- 5.5kHz
* 1 -- 11kHz
* 2 -- 22kHz
* 3 -- 44kHz
下面一位bit表示每个采样的长度:
* 0 -- snd8Bit
* 1 -- snd16Bit
下面一位bit表示类型:
* 0 -- sndMomo
* 1 -- sndStereo
audio数据区 不定
video tag 数据区
video信息 1byte
前四位bits表示类型:
* 1 -- keyframe
* 2 -- inner frame
* 3 -- disposable inner frame (H.263 only)
后四位bits表示编码器id:
* 2 -- Seronson H.263
* 3 -- Screen video
* 4 -- On2 VP6
* 5 -- On2 VP6 without channel
* 6 -- Screen video version 2
video数据区 不定
script tag 数据区
略n字...
下面是自己写的一段根据上面对FLV文件结构的分析读取FLV播放时间的Delphi代码:
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
Edit1.Text:=OpenDialog1.FileName;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
iFileHandle: 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 Header
一般比较简单,包括文件类型之类的全局信息,如图:
文件类型 3bytes 总是FLV(0x46 0x4C 0x56),否则...
版本 1byte 一般是0x01,表示FLV version 1
流信息 1byte 倒数第一bit是1表示有视频,倒数第三bit是1表示有音频,其他都应该是0(有些软件如flvtool2可能造成倒数第四bit是1,不过也没发现有什么不对)
header长度 4bytes 整个文件头的长度,一般是9(3+1+1+4),有时候后面还有些别的信息,就不是9了
FLV Body
FLV body就是由很多tag组成的。
FLV文件里面帧的实体就是tag了。每个tag都可以分为两部分,第一部分包含是tag 类型信息,长度固定为15字节,如图:
第二部分为tag data,也就是flv的数据(有音频,视频,脚本等三类数据),根据不同的tag类型就有不同的数据区,数据区的长度由第一部分的数据区长度字段定义,如图:
previoustagsize 4bytes 前一个tag的长度,第一个tag就是0
tag类型 1byte
三类:
* 8 -- 音频tag
* 9 -- 视频tag
* 18 -- 脚本tag
数据区长度 3bytes
时间戳 3bytes 单位毫秒,如果是脚本tag就是0
扩展时间戳 1byte 作为时间戳的高位
streamsID 3bytes 总是0(不知道干啥用)
数据区
接下来就是下一个tag的内容,其开始的四个字节定义了上个tag的总长度,注意上个tag的总长度中不包括上个tag之前的4个描述再上一个tag的长度的4个字节,如图:
接下来说一下文件尾,在文件尾的最后有四个字节是定义最后一个tag的长度的,如图:
这里我门可以算一下,是00 00 00 DD是221,最后一个tag的长度是221,如图:
下面是不同类型的tag数据区的内容体
Audio tag 数据区
audio信息 1byte
前四位bits表示音频格式:
* 0 -- 未压缩
* 1 -- ADPCM
* 2 -- MP3
* 5 -- Nellymoser 8kHz momo
* 6 -- Nellymoser
下面两位bits表示samplerate:
* 0 -- 5.5kHz
* 1 -- 11kHz
* 2 -- 22kHz
* 3 -- 44kHz
下面一位bit表示每个采样的长度:
* 0 -- snd8Bit
* 1 -- snd16Bit
下面一位bit表示类型:
* 0 -- sndMomo
* 1 -- sndStereo
audio数据区 不定
video tag 数据区
video信息 1byte
前四位bits表示类型:
* 1 -- keyframe
* 2 -- inner frame
* 3 -- disposable inner frame (H.263 only)
后四位bits表示编码器id:
* 2 -- Seronson H.263
* 3 -- Screen video
* 4 -- On2 VP6
* 5 -- On2 VP6 without channel
* 6 -- Screen video version 2
video数据区 不定
script tag 数据区
略n字...
下面是自己写的一段根据上面对FLV文件结构的分析读取FLV播放时间的Delphi代码:
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
Edit1.Text:=OpenDialog1.FileName;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
iFileHandle: 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;
发表评论
-
vc下mp3 IDv1和IDV2的读取
2010-01-25 10:52 2450/*这是修改后的代码,VC下读ID3v2 & ID3v ... -
使用ffmpeg为库编写的小型多媒体播放器源代码
2010-01-21 16:52 4400今天突发奇想,就在以前音频播放器(详细情况请看这里——http ... -
ffmpeg提取音频播放器总结
2010-01-21 16:31 6056ffmpeg提取音频播放器总 ... -
ffmpeg开发指南
2010-01-20 17:26 3412ffmpeg 中的Libavformat 和 li ... -
linux下安装ffmpeg过程
2010-01-18 15:48 1922最近互联网视频共享的 ... -
【PNG overview】PNG专题!
2010-01-18 13:39 3425【PNG overview】PNG专题! 作者 鼯鼠 ... -
Big Endian 和 Little Endian
2010-01-18 13:29 1574Peter Lee 2008-04-20 一、字节序 ... -
MediaInfo开源工程
2010-01-18 13:22 2419一、简介 MediaInfo 用来 ... -
MP3文件格式解析
2010-01-18 10:58 3584MP3文件格式解析 Peter Lee 2008-06-0 ... -
LAME-mp3
2010-01-18 10:40 2076LAME - 压缩 MP3 的最佳利 ... -
我对FLV 文件格式的理解
2010-01-14 15:52 3404我对FLV 文件格式的理解 ----------------- ... -
常用的音频文件介绍
2010-01-13 10:56 1430MP3全称是动态影像专家压缩标准音频层面3(Moving Pi ... -
RTSP客户端的JAVA实现
2010-01-12 16:12 8398参考资料 1. 《RTSP简单命 ... -
国外嵌入式、音视频处理等重要网站
2010-01-08 10:07 2061嵌入式方面: 1.关于嵌入式开发的站点,提供非常多关于嵌入 ... -
RTSP点播——消息流程实例
2010-01-08 09:44 5140RTSP点播消息流程实例(客户端:VLC, RTSP服务器:L ... -
live555代码解读之三:SETUP和PLAY请求消息处理过程
2010-01-08 09:43 3513SETUP请求消息处理过程 ... -
live555代码解读之二:DESCRIBE请求消息处理过程
2010-01-08 09:42 3836ve555代码解读之二:DESCRIBE请求消息处理过程 ... -
live555代码解读之一:RTSP连接的建立过程
2010-01-08 09:42 4468TSPServer类用于构建一个RTSP服务器,该类同时在其内 ... -
live555源代码概述
2010-01-08 09:41 3915述 liveMedia项目(http://www ... -
浅议SDP(会话描述协议)
2010-01-04 15:25 3608因为最近常常使用到SDP(会话描述协议Session Desc ...
相关推荐
本项目提供的"flv文件格式分析器源码"是一个用C++编写的开源工具,它可以帮助开发者深入理解FLV文件的内部结构,进行解析和分析。 FLV文件格式主要由以下几部分组成: 1. **文件头**:文件头包含文件标识符、文件...
### FLV文件格式详解 #### 一、FLV文件格式简介 FLV(Flash Video)是一种流行的流媒体视频格式,以其轻量级的文件体积、简单的封装方式以及便捷的网络播放特性著称。这些特点使得FLV非常适合在网络上传播,尤其是...
### FLV 文件格式详解 #### 一、FLV 文件格式简介 FLV(Flash Video)是一种流行的视频文件格式,主要用于在线视频播放。该格式由Macromedia开发,并于2005年被Adobe Systems收购后进一步发展。FLV格式以其高效的...
FLV(Flash Video)文件格式是Adobe Systems开发的一种流行的视频流格式,主要用于互联网上的视频传播。在Android平台上,原生系统并不直接支持FLV文件的解析和播放,因此开发者需要理解其内部结构以便进行自定义...
这个“FLV测试文件下载”资源包含了三个FLV文件,旨在帮助用户测试他们的播放器、编码器或者流媒体服务,确保它们能正确处理FLV格式的内容。 1. **FLV格式介绍**:FLV是Adobe Systems为Flash Player设计的视频格式...
1. **头部信息解析**:FLV Analyser能够解析FLV文件的头部信息,包括文件标识、文件长度、数据类型(音频、视频或脚本数据)等关键字段,这对于理解文件的基本构成至关重要。 2. **帧分析**:工具可以详细分析视频...
FLV文件格式详细 FLV文件: FLVHeader FLVStream FLVHeader : Signature Version Flags Offset Signature : "FLV" Version : 0×01 Flags : 0×01 | 0×04 | 0×05 //1:video,4:audio,5:video+audio Offset : 0×00 0...
1. **文件分析**:该工具能够打开FLV文件,并自动分析其文件结构,包括文件头信息、帧类型、编码格式、时间戳等关键数据。 2. **视频与音频详情**:工具可以详细展示每个视频帧的编码参数,如分辨率、帧率、编码器...
首先,我们需要理解FLV文件格式。FLV文件是Adobe Flash支持的视频格式,包含音频和视频数据流。它分为头部信息(Header)、文件信息(File Data)和元数据(Metadata)。头部信息包含了文件版本、时间戳、帧类型等...
本文将深入探讨FLV封装格式,并基于"FLV封装格式分析器 1.1 (源代码)"的描述,介绍如何分析FLV文件以及其视频流和音频流的分离。 首先,FLV文件的结构主要由文件头、文件体和文件尾三部分组成。文件头包含了FLV...
FLV(Flash Video)封装格式是一种广泛用于网络流媒体传输的文件格式,尤其在过去的互联网视频分享平台中非常常见。这个"FLV封装格式分析器"是一个专门用于解析和理解这种格式的工具,由个人开发者制作,并且开源,...
FLV媒体文件的解析,本代码实现了FLV文件文件格式的解析(含有代码注释) 1.解析FLV 文件头 2.解析FLV Body内容,包括解析PreviousTagSize 和Tag 标签内容(Script Tag, Audio Tag, Video Tag) 3.提取FLV文件的H264...
仿照雷老师flv格式分析器写的一个flv分析工具,主要功能如下 1、flv音视频解析,包括视频的基本参数信息,音视频每一帧的大小和时间戳大小,以及一些其他每部参数信息 2、flv视频流和音频流分离功能 3、视频和音频...
FLV(Flash Video)文件格式是Adobe Systems用于网络流媒体的一种流行格式,广泛应用于在线视频内容的发布。本文将深入探讨“Flv文件分析工具”及其相关知识点。 首先,让我们理解FLV文件的结构。FLV文件由一个文件...
FLV(Flash Video)格式是Adobe Systems开发的一种流媒体视频文件格式,主要用于互联网上的视频传播。它具有体积小、加载快、兼容性好等特点,因此在早些年间的网页视频内容中非常流行。然而,随着HTML5的发展和...
FLV(Flash Video)文件是Adobe Systems用于网络流媒体的一种文件格式,广泛应用于在线视频分享和直播服务。本文将深入探讨FLV文件的结构,并介绍如何使用C#进行解析。 一、FLV文件结构 1. 文件头:FLV文件以“FLV...
一、FLV文件格式 FLV格式由Adobe Systems开发,用于在Flash Player中播放视频内容。它包含音频、视频数据流以及元数据,支持实时流传输,使得网页上的视频播放成为可能。FLV文件通常包括H.263或H.264编码的视频和AAC...
flv格式封装分析器 介绍了flv各个tag的字段及意义,使其对flv封装格式有更好的了解。
然而,随着需求的变化,用户可能需要对FLV文件进行各种操作,比如分割、合并或转换格式。本文将深入探讨这些主题,以及如何实现这些功能。 首先,FLV文件的分割是常见的需求,这可能是为了提取视频中的特定部分,...
FLV(Flash Video)则是Adobe公司推出的一种流媒体文件格式,主要用于网络视频播放,尤其是在Flash Player时代非常流行。 实现H264码流到FLV文件的转换,我们需要以下几个关键步骤: 1. **解析H264码流**:H264码...