2021-04-13 学习音视频推流。

2021-04-13  本文已影响0人  赖益文

1.视频推流的过程就事,获取到摄像头的数据。

把每一帧图片由NV21转为I420。把YUVI420的每一帧图片分解成RTMPPacket

NV21转为YUVI420怎么转?先来两张图对比数据组成就是。。。就是把原始数据转成这个yuv 4:1:1 的一结构。

然后把YUV420 通过H264编码:

转成 I p b;I帧相似度95% p帧相似度是70%的帧。

先去封装i帧中的。SPS和PPS ,包含了初始化H.264解码器所需要的信息参数,包括编码所用的profile,level,图像的宽和高,deblock滤波器等。

SPS:序列参数集

PPS:图像参数集

然后在包装这个i帧的其他数据和p帧和b帧。

怎么去包装这个个sps 和pps。怎么把一帧图片拆成RTMPPacket?其实还要分两步:

把一帧图片拆成N个NALU单元,上面提到过这个词

把每个NALU单元分装成RTMPPacket。 打包的固定格式。。不管是sps 还是pps 还是非关键帧都是通过打包成packet。

NALU单元:为了方便传输(传输指  文件传输,网络流传输) 我们并不能把一整帧传输过去,一帧的内容太大了,还需要细分才能更方便的传输。如果通过传递一完整帧传过去,对方等的花都谢了。所以我们需要更小的传输单元以保证  更好的压缩性,容错性和实时观看性。这种更小的单元成为NALU单元,所以H264 原始码流(又称为裸流),是有一个接一个的 NALU 组成的,关于NALU的组成(组成可以不去了解,知道传输数据是以NALU为单位就可以了):

NALU=NALU头+RBSP(切片)RBSP=片头+片数据片数据=n*宏块//把一张图片划分成若干个小的区域,这些小的区域称之为宏块//H264默认是使用 16X16 大小的区域作为一个宏块,也可以划分成 8X8 大小。所以:NALU=NALU头+(片头+n宏块)

最后打包封装成一个packet。然后点击开始直播之后。开始从队列中取出packet 发送给服务器。

2.音频推流。

视频数据格式化:摄像头数据(NV21) -> H264 -> RTMPPacket

音频数据格式化:麦克风数据(PCM) -> AAC -> RTMPPacket

1.采集麦克风数据。

2.转码成为faac。

3.封装成packet。上传服务器。

上一篇 下一篇

猜你喜欢

热点阅读