术语:
容器(Container):容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。
流(Stream):是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。
帧(Frame):帧代表一幅静止的图像,分为I帧,P帧,B帧。(下文介绍)
编解码器(Codec):是对视频进行压缩或者解压缩的工具。
复用(mux):把不同的流按照某种容器的规则放入容器。
解复用(demux):把不同的流从某种容器中解析出来。
视频编码方式
硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等
软编码:使用CPU进行编码,软编码通常使用:ffmpeg+x264
编码的流程:
采集--> 获取到视频帧--> 对视频帧进行编码 --> 获取到视频帧信息 --> 将编码后的数据以NALU方式写入到文件
视频编码协议:
H. 264:低码率,高质量,高容错 。(编码单位固定16*16)开源实现:ffmpeg、openh264、x264。
H. 265:能达到H.264两倍之压缩率,可支持4k分辨率,最高到8k。(编码单位8*8-64*64)开源实现:ffmpeg、libde265、x265。
二者比较:H.265更为先进,同样画质的情况下,265理论存储空间节省50%,同样码率下,265理论画质提高30%-40%。
视频编解码开源实现:
ffmpeg:是一套开源的、用于对音视频进行编码&解码&转化计算机程序
x264:x264是一种免费的、开源的、具有更优秀算法的H.264/MPEG-4 AVC视频压缩编码方式
视频单位:
帧率:每秒钟多少帧画面
码率:单位时间内保存的数据量
GOP:gr