做视频会议,用RTMP协议,就要把视频流封装成flv包。
最近几星期一直在纠结怎么封装,终于让我找到规律了。
首先下载一个flvparse软件。来分析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