SCRIPTDATA
如果TAG包中的TagType==18时,就表示这个TAG是SCRIPT.
SCRIPTDATA 结构十分复杂,定义了很多格式类型,每个类型对应一种结构.
Field |
Type |
Comment |
Type |
UI8 |
Type of the ScriptDataValue. The following types are defined: 0 = Number 1 = Boolean 2 = String 3 = Object 4 = MovieClip (reserved, not supported) 5 = Null 6 = Undefined 7 = Reference 8 = ECMA array 9 = Object end marker 10 = Strict array 11 = Date 12 = Long string |
ScriptDataValue |
IF Type == 0 DOUBLE IF Type == 1 UI8 IF Type == 2 SCRIPTDATASTRING IF Type == 3 SCRIPTDATAOBJECT IF Type == 7 UI16 IF Type == 8 SCRIPTDATAECMAARRAY IF Type == 10 SCRIPTDATASTRICTARRAY IF Type == 11 SCRIPTDATADATE IF Type == 12 SCRIPTDATALONGSTRING |
Script data value. The Boolean value is (ScriptDataValue ≠ 0). |
类型在FLV的官方文档中都有详细介绍.
onMetaData
onMetaData 是SCRIPTDATA中对我们来说十分重要的信息,结构如下表:
Property Name |
Type |
Comment |
audiocodecid |
Number |
Audio codec ID used in the file (see E.4.2.1 for available SoundFormat values) |
audiodatarate |
Number |
Audio bit rate in kilobits per second |
audiodelay |
Number |
Delay introduced by the audio codec in seconds |
audiosamplerate |
Number |
Frequency at which the audio stream is replayed |
audiosamplesize |
Number |
Resolution of a single audio sample |
canSeekToEnd |
Boolean |
Indicating the last video frame is a key frame |
creationdate |
String |
Creation date and time |
duration |
Number |
Total duration of the file in seconds |
filesize |
Number |
Total size of the file in bytes |
framerate |
Number |
Number of frames per second |
height |
Number |
Height of the video in pixels |
stereo |
Boolean |
Indicating stereo audio |
videocodecid |
Number |
Video codec ID used in the file (see E.4.3.1 for available CodecID values) |
videodatarate |
Number |
Video bit rate in kilobits per second |
width |
Number |
Width of the video in pixels |
这里面的duration、filesize、视频的width、height等这些信息对我们来说很有用.
keyframes
当时在做flv demux的时候,发现官方的文档中并没有对keyframes index做描述,但是flv的这种结构每个tag又不像TS有同步头,如果没有keyframes index 的话,seek及快进快退的效果会非常差,因为需要一个tag一个tag的顺序读取。后来通过网络查一些资料,发现了一个keyframes的信息藏在SCRIPTDATA中。
keyframes几乎是一个非官方的标准,也就是民间标准.在网上已经很 难看到flv文件格式,但是metadata里面不包含 keyframes项目的视频 . 两个常用的操作metadata的工具是flvtool2和FLVMDI,都是把keyframes作为一个默认的元信息项目.在FLVMDI的主页 (http://www.buraks.com/flvmdi/)上有描述:
keyframes: (Object) This object is added only if you specify the /k switch. 'keyframes' is known to FLVMDI and if /k switch is not specified, 'keyframes' object will be deleted.
'keyframes' object has 2 arrays: 'filepositions' and 'times'. Both arrays have the same number of elements, which is equal to the number of key frames in the FLV. Values in times array are in 'seconds'. Each correspond to the timestamp of the n'th key frame. Values in filepositions array are in 'bytes'. Each correspond to the fileposition of the nth key frame video tag (which starts with byte tag type 9).
也就是说keyframes中包含着2个内容 'filepositions' and 'times'分别指的是关键帧的文件位置和关键帧的PTS.通过keyframes可以建立起自己的Index,然后再seek和快进快退的操作中,快速有效的跳转到你想要找的关键帧的位置进行处理。
相关推荐
1. FLV封装格式的组成 FLV视频封装格式总体上由两部分组成,分别是文件头(FlvHeader)和文件体(FlvBody)。文件头包含了全局信息,而文件体则包含了实际的数据流。 2. FLV文件头(FlvHeader) FLV文件头通常由九...
flv格式封装分析器 介绍了flv各个tag的字段及意义,使其对flv封装格式有更好的了解。
《FLV格式详解——FLV封装格式深度剖析》 FLV(Flash Video)格式,作为Adobe公司推出的一种流媒体格式,因其文件体积小、封装简便的特性,深受互联网上的广泛应用。从主流视频网站到个人博客,FLV的身影无处不在。...
flv封装格式解析,主要介绍flv容器的具体封装,包括头信息,音视频信息及数据封装,通过特定的例子来详细阐述各字段的具体涵义及解析流程。
flv-muxer是实现H.264裸流到FLV封装的关键工具。它的工作流程大致如下: 1. **读取H.264 NAL单元**:NAL(Network Abstraction Layer)单元是H.264编码的基本传输单位,包含了一个或多个视频帧的部分或全部信息。 ...
2. FLV格式详解 FLV文件由头部、数据部分和尾部组成。头部包含文件标识、版本信息以及数据流的元数据;数据部分包含音频、视频和脚本数据标签;尾部标记文件结束。视频数据通常采用H.264或VP6编码,音频数据常用AAC...
这个"FLV封装格式分析器"是一个专门用于解析和理解这种格式的工具,由个人开发者制作,并且开源,提供源代码供学习和研究。 FLV文件格式主要包括三个部分:文件头、文件体和文件尾。文件头包含FLV的标识符、版本...
音视频封装是数字媒体处理中的关键技术,涉及到将编码后的音视频数据按照特定的格式组织,以便于存储、传输和播放。本文将详细讲解几种常见的音视频封装格式,以及它们的特点和应用场景。 首先,我们来看看MPEG组织...
### FLV文件格式详解 #### 一、FLV文件格式简介 FLV(Flash Video)是一种流行的流媒体视频格式,以其轻量级的文件体积、简单的封装方式以及便捷的网络播放特性著称。这些特点使得FLV非常适合在网络上传播,尤其是...
总结来说,浏览器中的m3u8和flv格式播放器封装涉及到对不同视频格式的理解,以及选择合适的JavaScript库来处理这些格式,确保在各种浏览器和设备上的兼容性。随着技术的发展,未来可能会有更多高效、跨平台的流媒体...
而“flv视频播放程序”意味着我们需要处理和播放FLV格式的视频文件,这通常涉及到前端的Flash Player插件和后端的视频处理逻辑。 **核心技术点解析:** 1. **JavaWeb基础**:理解JavaWeb的基础架构,包括HTTP协议...
FLV流媒体视频格式文件提取工具是一款专门针对FLV(Flash Video)格式的软件,用于解析、提取或转换此类视频文件。FLV是Adobe Systems开发的一种流行的在线视频格式,广泛应用于网页上的视频播放,特别是在YouTube...
- FLV:用于封装音视频数据的容器格式,包含音频帧、视频帧和同步元数据。 - RTMP:实时消息协议,通常用于将视频流从源头推送到服务器,但不适用于HTTP分发。 4. **软件/插件** - Adobe Flash Player:尽管现代...
RTMP协议负责将视频流从服务器传输到客户端,而FLV则作为封装这些视频流的容器格式。这种组合使得用户可以在网络上流畅地观看实时视频流。 #### 四、总结 FLV文件格式以其高效的数据压缩能力和在网络上的快速传输...
- **转码与转换**: 在文件转换或适应不同设备播放时,需要对FLV文件进行解析,重新封装或转码。 - **直播流处理**: 在实时流媒体传输中,服务器可能需要解析FLVTag来实现流的动态适应或分发。 - **日志与调试**: ...
环境:Linux 192.168.1.110 3.10.0-1160.59.1.el7.x86_64 #1 SMP Wed Feb 23 16:47:03 UTC 2022 x86_64 x86_64 ...linux下编译运行,主要针对FLV封装格式的音视频文件进行解析,代码主要实现功能逻辑,后续再行优化。
在转换过程中,工具会先读取FLV文件中的数据,然后通过解码器将FLV编码格式解析为原始的音视频流。接着,这些流被重新编码成MP4支持的编码格式,如H.264视频编码和AAC音频编码。最后,新编码的数据被封装到MP4容器中...
在本文中,我们将深入探讨如何使用Java程序调用FFmpeg执行视频文件格式转换,特别是将非FFmpeg原生支持的格式转换为FLV格式。FFmpeg是一个强大的多媒体处理工具,支持多种视频、音频格式的编码、解码和转换。在这个...