FLV帧全面分析。研究心得。

Stella981
• 阅读 619

做视频会议,用RTMP协议,就要把视频流封装成flv包。

最近几星期一直在纠结怎么封装,终于让我找到规律了。

首先下载一个flvparse软件。来分析flv的帧数据。打开软件,点浏览选择路径打开flv文件可以得到下图:

FLV帧全面分析。研究心得。

上图打开的是一个好的flv文件,就是封包格式是正确的,我们可以来分析和观察一下。

File Header和 MedadataTag是rtmp协议自动添加上的数据,所以不用我们来分析。(当然如果你又需求要自己编写rtmpclient的话这些数据也需要你自己添加,目前我使用的是java版的rtmpclient。个人感觉太臃肿了,尤其是跑在android平台上,所以后期我可能会修改一下这个rtmpclient。)

下面回归正题,我们从第一帧开始分析。上图青绿色部分就是第一帧的数据了。前面10个数据也是在rtmpclient中添加的。09 00 00 2C就是视频数据相关。00 00 00 00是时间戳。在后面2个00 00我目前还没有研究。17 00 00 00 00就是帧类型。这个类型是第一帧的代表,也就是在这帧里面插入sps pps等信息。

紧接着在帧类型到最后一位中的数据就是avc中的数据了,就是视频的一些参数。具体内容可以参考这个帖子http://blog.csdn.net/peijiangping1989/article/details/6934312

只有第一帧才是17 00 00 00 00哦。在数据后面跟着4位数据为数据的长度。00 00 00 37也就是这个第一帧的长度了。

下面我们点击第2帧。如图:

FLV帧全面分析。研究心得。

可以看到前面10位数据大致相同。同时时间戳也发生了变化。这个先不管。帧类型大家可以看到第2帧的是 27 01 00 00 00。这说明这帧是p帧。就是不是关键帧。

但是在后面不是紧跟着数据了00 00 00 DA代表的是后面数据的长度,不是整个帧的长度哦是从DA 以后数据,也就是裸数据的长度,在41到F0就是裸数据了。

这里我来说下怎么分析是不是关键帧其实很简单只要裸数据第一个数据是41就不是关键帧,是65才是关键帧。关键帧的数据类型是 17 01 00 00 00.

同样在裸数据后接着4为帧长度,就只要一直下去,当遇到是65就插入17 01 00 00 00为关键帧,41就27为P帧。只要就完成了flv文件的格式。和封包。

$(document).ready(function(){dp.SyntaxHighlighter.HighlightAll('code');});
原文链接: http://blog.csdn.net/peijiangping1989/article/details/6999224

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
srs
SRS简介SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。SRS提供了丰富的接入方案将RTMP流接入SRS,包括推送RTMP到SRS、推送RTSP/UDP/FLV到SRS、拉取流到SRS。SRS还支持将接入的RTMP流进行各种变换,譬如将RTMP流转码、流截图、转发给其他服务器、转封装成HTTPFLV流、转封
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
FLV视频封装格式详解
_Overview_FlashVideo(简称FLV),是一种流行的网络格式。目前国内外大部分视频分享网站都是采用的这种格式._FileStructure_从整个文件上开看,FLV是由TheFLVheader 和 TheFLVFile
Stella981 Stella981
2年前
LiveVideoStack线上分享第三季(十四):FLV封装格式介绍及解析
随着流媒体的高速发展,FLV成为了最主流的视频流传输封装格式,但是作为占市场较大份额的Web端的实际应用中,各大浏览器却没有对FLV解码做完善的支持。8月17日20:00,LiveVideoStack线上分享第三季,第十四期,高顿网校平台开发部流媒体工程师戴兵将对比FLV实际文件带大家详细了解一下它的具体格式标准。!(h
Stella981 Stella981
2年前
FLV文件格式解析
1.FLV文件整体结构FLV文件由FLVheader和FLVbody组成,FLVbody由一系列的FLVtags组成,如下图所示!(https://oscimg.oschina.net/oscnet/f71941d1979461f6785938802b6fb25f4ad.jpg)tag又可以分成三类:audio
Wesley13 Wesley13
2年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
2年前
Flv 视频格式(转)
最近要用到flv,整理了一些flv格式的资料,供参考。flv文件主要由两部分组成:header和body。1.headerheader部分记录了flv的类型、版本等信息,是flv的开头,一般都差不多,占9bytes。具体格式如下:文件类型3bytes“FLV”版本1byte一般为0x01流信息1
Stella981 Stella981
2年前
FLV视频封装格式详解
_Overview_FlashVideo(简称FLV),是一种流行的网络格式。目前国内外大部分视频分享网站都是采用的这种格式._FileStructure_从整个文件上开看,FLV是由TheFLVheader和TheFLVFile
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这