初次学习有关音视频这一块的开发,主要是基于 flv.js 的学习。这一块的知识概念实在是太多太深了,所以本人是先在本地做记录,后面会整理慢慢地上传与各位分享,假如有地方说错,请勘误。谢谢指点。
解析FLV-Header(9bytes)
在上一篇中我们得知,FLV-Header其实很好解析,无非就是读出前面的9个字节。
1 | const data = new Uint8Array(buffer);// buffer为读取的二进制缓冲区 |
解析FLV-Body
Previous Tag Size #0
因为第一个Previous Tag Size
基本上都是固定的,占用4个字节,可以略过的了。关于大端小端:网络序?本地序?傻傻分不清楚,而flv是采取大端序的。
1 | let v = new DataView(chunk, offset); |
Tag # 1( ScriptTag )
Tag Header(11bytes)
1 | // 11bytes |
Tag Body
1 | // 上面的字节总共为11个字节,所以offset + 11,应该为24 |
根据上一篇的结构图,这里就是ScriptTag的Tag Data中的key,关于AMF
1 | // AMFParser |
ScriptTag的Tag Data中的value。
1 | let value = AMF.parseValue(arrayBuffer, dataOffset + name.size, dataSize - name.size); |
后面即为各元素的封装,为一一对应的键值对,常见的MetaData如下:
- duration:时长
- width:视频宽度
- height:视频高度
- videodatarate:视频码率
- framerate:视频帧率
- videocodecid:视频编码方式
- audiosamplerate:音频采样率
- audiosamplesize:音频采样精度
- stereo:是否为立体声
- audiocodecid:音频编码方式
- filesize:文件大小
最后用3个字节的固定值0000 09表示value值结束。
Related Issues not found
Please contact @lucius0 to initialize the comment