投屏之flv格式

这里我决定采用flv作为我的投屏格式,为什么呢?应为他可以做直播,刚好满足我桌面投屏的需求。

推荐一个视频测试源地址

samples.mplayerhq.hu

测试源找到之后,还需要一个解析工具,这里使用FlvParse工具

接下来,进入到一个漫长的过程,,,研究他的格式。。参考下面这位大哥的

https://www.cnblogs.com/lidabo/p/9018548.html

**********************************解析过程********************************

 上定义

 我们对照定义,比较一下值

Signature:0x46

Signature:0x4C

Signature:0x56

Version:0x01

TypeFlagReserved: 0x05----->0000 0101--->0

TypeFlagsAudio:1

TypeFlagsReserved:0

TypeFlagsVideo:1

DataOffset:00 00 00 09--->9个

*********************flv头之后就是flv的body,他的格式如下:

 通过这个定义,其实通俗一点说就是tag与previoustagsize的交互

file header之后的第一个previoustagsize为0,如下图:

 接下来是tag了,我们看tag的定义:

 通过上诉描述,可以看到,tag有3种格式,我们直接上码流进行解析

 TagType:0x12  --->18

DataSize:0x00 0x00 0xB7--->183

Timestamp:0x00 0x00 0x00

TimestampExtended:0x00

StreamID :0x00 0x00 0x00

这里的tagtype为18的时候,定义非常复杂,我就就事论事,研究我的这一段格式

Type:0x02 --->2   String Type

StringLength:0x00 0x0A --->10

StringData:0x6F 0x6E 0x4D 0x65 0x74 0x61 0x44 0x61 0x74 0x61(10个字符)

Type:0x08--->ECMA array type

EcmAArrayLength:0x00 0x00 0x00 0x07--->7  表示有7个描述对象

StringLength:0x00 0x08 --->8

duration:

type:0x00  ->double 表示下面有8个字节的数据

 ScriptDataValue: 0x40 0x67 0xA2 0x8F 0x5C 0x28 0xF5 0xC3 (8个字节) --->这里是double的内存数据

具体参考

https://blog.csdn.net/g0415shenw/article/details/91350532

终于找到了定义

Type:0x00   -->numbertype

*****************************************************20190609**************

再继续往下看

这里的pre tag size 为什么是194呢?

他的值是上一个tag的字节数量

我们算一下,一共11*16+15+3 = 176+18 = 194,这里就对应上了。

 再往下分析一个audio tag

TagType:0x08  ---》代表audio

DataSize:0x00 0x01 0x3A-->314  表示后面的tagData的大小

Timestamp:0x00 0x00 0x00

TimestampExtended:0x00

StreamID: 0x00 0x00 0x00

AudioData:

上定义:

 SoundFormat :0010 --》2  mp3格式

SoundRate:11 ---》3   44KHZ

SoundSize:1 ---》Snd16BIt

SoundType:1---》sndStereo  (立体声)

*****************************audio tag相对好简单*************************

下面开始video tag

先看定义:

 

 这里我直接上一段码流:

 

 

TagType:0x089 ---》代表Video

DataSize:0x00 0x30 0xDE-->12510  表示后面的tagData的大小

Timestamp:0x00 0x00 0x00

TimestampExtended:0x00

StreamID: 0x00 0x00 0x00

video tag解析

TagType :0001  --》keyFrame

CoderID:0010---》H.263

VideoData:H263Data

*****************至此flv的格式解析结束了*****************

由于我的实际使用中,是H264的码流格式,所以,我想再分析一段H264的码流。

所以我找了一段mp4的文件,用ffmpeg命令合成了一段flv文件

ffmpeg -i test.mp4 -c:v libx264 test.flv
pause

再次打开文件

 

TagType :0001  --》keyFrame

CoderID:0111---》7---》AVC(H264)

AVCPacketType:00  --》AVC Sequence header

CompositionTime:00 00 00

 

第一包防止sps 与pps

 各个数字如下:

configurationVersion: 0x01

AVCProfileIndication:0x64  (sps[1])

profile_compatibility:0x00 (sps[2])

AVCLevelIndication:0x1E (sps[3])

Reserved:111111

lengthSizeMinusOne:11--->3

reserved:111

numofSequenceParameterSets:00001 --->1

sequenceParameterSelLength:0x00 0x19 --->25

numofPicyurePatameterSets:0x01 --->1

pictureParameterSetLength:0x00 0x06 --->6

 

再看下一包的视频

 

TagType :0001  --》keyFrame

CoderID:0111---》7---》AVC(H264)

AVCPacketType:01 --》AVC NALU

CompositionTime:0x00 0x00 0x53 -->83

Length:0x00 0x00 0x02 0xAE--->686

data:

Length:0x00 0x00 0x65 0x37---》25911

不过这个定义我在文档上面没有找到。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值