视频H.264压缩格式

摄像头采集到的原始数据,需要将图片进行压缩处理,而 H.264恰好保证了良好的压缩

压缩算法只压缩图像改变的部分(需要找到上一帧和下一帧的区别)。

软编码:ffmpeg编码,进行 h.264编码后进行传输。
h.264分为 I、P、B帧

RTMP\RTSP当中依然包含 h.264 数据

摄像头采集到的是 RGBA 数据,需要将数据进行编码为 H.264 的流(encode,这里面可以通过硬件编码或者软件编码,就变得很小,适合进行网络传输)

收到网络传输的 h.264 数据,需要还原成一帧一帧的图片,这个过程叫做 decode(硬件解码(VideoToolBox)、软件解码(FFMpeg))。

将解码后的 h.264 数据(解码之后就成为 YUV 数据),交给硬件去播放。

音频:采集(PCM,无损压缩格式) -> 编码(压缩算法:g711(打电话),adpcm,aac(进行网络传输)) -> 解码 -> 将解码 pcm 交给硬件进行播放
使用 AudioQueue、openAL 进行播放视频

OpenCL:进行并行计算、深度学习等
OpenGL:3D、2D 游戏

码率:
采样率:设备在1秒钟对音频或者视频的采样次数。

H264编码原理:I/B/P

I 帧:帧内编码帧,I 帧表示关键帧,可以理解为这一帧画面的完整保留
解码时使用本帧数据就可以完成。解码时 I 帧就可以完全还原图像
P 帧:是 I 帧的参考帧,是 I 帧后面间隔1~2秒后的参考帧,也是 B 帧的参考帧
B 帧:双向差别帧,需要前面的 I 帧和后面的 P 帧进行压缩

H264 NAL 头文件解析(重要)

PCM -> aac 编码规则

在实际的音频编码中,假设网络每次接收到的音频数据为1280,
而在编码中我们设定输入的 PCM 数据为1024,实际的输出为768
那么如果输入的 PCM 数据小于实际接收到的音频数据,那么下次的数据
就会从下一帧中开始截取对应长度的音频,凑够1024长度的数据量。来进行编码
参考图片:PCM编码为 aac 规则