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和快进快退的操作中,快速有效的跳转到你想要找的关键帧的位置进行处理。
相关推荐
FLV视频封装格式详解.pdf
flv格式封装分析器 介绍了flv各个tag的字段及意义,使其对flv封装格式有更好的了解。
flv封装格式解析,主要介绍flv容器的具体封装,包括头信息,音视频信息及数据封装,通过特定的例子来详细阐述各字段的具体涵义及解析流程。
环境: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封装格式的音视频文件进行解析,代码主要实现功能逻辑,后续再行优化。
4.PES头虽然复杂,但是我们只解析里面的PTS和DTS,里面的六大标记字段只有是0,解析起来也是非常简单的,其中第7和第8字节是关键;TS 封装格式解析TS流
前两年看过音频格式的spec, 想到后来学者再一点点去读spec,太过繁琐,遂整理成tool,让学习者可以...TAG: 多媒体格式,mkv格式,mp4格式,3gp格式,mp3格式,rmvb格式,flv解析工具,avi解析工具,全格式解析工具
H264视频流文件转flv文件源码实现(C语言,不用第三方库) H264视频流文件转flv文件源码实现(C语言,不用第三方库) H264视频流文件转flv文件源码实现(C语言,不用第三方库) 附加flv解析工具 附加flv解析工具 ...
它的工作原理是 Flv.js 在 JavaScript 中流式解析 flv 文件流,并实时转封装为 fmp4 ,通过 Media Source Extensions 喂给浏览器,实现了 FLV 格式视频的播放。 内附mp4测试视频,切记,代码中由http请求,即项目必须...
Header:文件头表明了文件的封装格式为FLV,存储对象为音频、视频或两者。 以下为FLV文件的Header,共 9 个字节: b’FLV\x01\x05\x00\x00\x00\t’ 前 3 个字节(FLV)说明这是一个FLV文件 第 4 个字节
本项目是一个 FLV 封装格式解析程序,可以将 FLV 中的 MP3 音频码流分离出来。
它的工作原理是 Flv.js 在 JavaScript 中流式解析 flv 文件流,并实时转封装为 fmp4 ,通过 Media Source Extensions 喂给浏览器,实现了 FLV 格式视频的播放。 flv插件可以直接运行js转换html5,可以直接引入项目...
查看flv文件的小工具,方便的观看flv封装格式,适合初学者
解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令...
通过JavaCV读取并解析rtsp/rtmp视频流,并转复用/转码为浏览器可以播放的flv格式缓存到内存中,利用netty将内存中的flv格式视频流通过http或者websocket协议实现的http-flv、websocket-flv传输到浏览器页面,浏览器...
包括语音信号处理、数字图像处理、信息论、封装格式、编解码、流媒体协议、网络传输、渲染、算法等方面。在现实生活中,音视频也扮演着越来越重要的角色,比如 视频会议、直播、短视频、播放器、语音聊天 等。接下来...
本项目包含如下几种视音频数据解析示例: (1)像素数据处理程序。包含RGB和YUV像素格式... (5)FLV封装格式分析程序。可以将FLV中的MP3音频码流分离出来。 (6)UDP-RTP协议分析程序。可以将分析UDP/RTP/MPEG-TS数据包。
更重要的是,它不仅在UI层上很灵活,而且在功能上也大胆:它摆脱了视频加载,缓冲和对视频依存性的格式支持。 特别是在mp4上,可以分阶段加载,因为它不支持流mp4。 这意味着可以进行无缝切换,同时实现清晰度,...
更重要的是,它不仅在UI层上很灵活,而且在功能上也大胆:它摆脱了视频加载,缓冲和对视频依赖性的格式支持。 尤其是在mp4上,可以分阶段加载,因为它不支持流mp4。 这意味着可以进行无缝切换,同时实现清晰度,...
(5)FLV封装格式分析程序。可以将FLV中的MP3音频码流分离出来。 (6)UDP-RTP协议分析程序。可以将分析UDP/RTP/MPEG-TS数据包。 This project contains following samples to handling multimedia data: (1) Video ...