笔者在嵌入式领域深耕6年,对嵌入式项目构建,BLDC电机控制,产品上位机开发以及产品量产和产品售后维护有多年工作经验。经验分享,从0到1, 让我带你从实际工作的角度走进嵌入式成长之路。
原创不易,欢迎大家关注我的微信公众号:嵌入式工程师成长之路 或 扫下面二维码
所有文章总目录:【电子工程师 qt工程师】
原创视频总目录:【电子工程师 qt工程师】
音视频技术主要包含:封装技术、视频压缩编码技术和音频压缩编码技术以及网络传输方面的流媒体协议技术。
综合信息查看:
二进制信息查看:
单项详细分析:
(1)视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。
(2)解协议的作用:将流媒体协议(流媒体协议是指音视频在网上传输过程中遵循的协议,是一种传输协议,H264是视频压缩算法、mp4或AVI是视频格式/封装格式,后面会细讲)的数据,解析为标准的与之对应的封装格式数据。
视音频在网络上传播时,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止)或者对网络状态的描述等。
解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。
(3)解封装的作用:将输入的封装格式的数据,分离成为音频编码压缩了的数据(ACC裸流)和视频编码压缩了的数据(H264裸流)(压缩和编码是同一个意思,编码就是将原始数据按H264或ACC算法压缩为H264码流或ACC码流,也成为裸流)。
封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。
例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。不同的封装格式音频流和视频流之间的存放位置可能不同。
(4)解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。
解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。
(5)视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。
(1)流媒体协议是服务器与客户端之间视频流收发所遵循的规定。
(2)当前网络上主要的流媒体协议如表所示:
(1)视频码流和音频码流按照一定的格式存储在一个文件中。这里的音频码流和视频码流是压缩数据,占用的空间比较小。仅仅靠看文件的后缀,很难能看出具体使用了什么视音频编码标准。
(2)封装格式数据主要包含三方面的内容:视频描述信息、音频码流、视频码流。不同的封装格式它们三者的位置可能不一样,所以需要解封装格式,将三者的数据分离提取出来。
(3)封装格式分析工具
Elecard Format Analyzer
(4)常见的封装格式
不同的封装格式支持的编解码技术是一样的。由表可见,除了AVI之外,其他封装格式都支持流媒体(可以“边下边播”)。有些格式更“万能”一些,支持的视音频编码标准多一些,比如MKV。而有些格式则支持的相对比较少,比如说RMVB。
(5)解封装格式
将音频码流和视频码流分开,分开之后的数据依然是压缩了的数据。音频流可能是AAC、MP3等格式的音频码流。视频流可能是H.254或MPEG2等格式的视频码流,即H.264视频码流。
码流是不能直接显示在屏幕的像素点数据,即它是不能直接显示在屏幕上的。码流是通过算法对原视频加工之后的数据,播放前必须先解码,即音频解码和视频解码,解码成显示器能识别的像素点形式的数据。
(6)H.264码流解码出来的数据被称为YUV数据,即视频的像素点数据。
(1)解码和编码是两个逆过程。
(2)将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。譬如高清视频,如果不编码压缩,10秒钟的高清视频可能就有1G大小。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。视频编码技术在整个视音频技术中应该是最复杂的技术。
(3)正常的帧率为1秒钟播放24帧数据。
(4)分析工具:Elecard Stream Eye
(6)解码和编码必须使用同一套标准,譬如不能使用H.265的标(算法)准去解码H.254的码流。
(7)主流编码标准
H.264仅仅是一个编码标准,而不是一个具体的编码器,H.264只是给编码器的实现提供参照用的。基于H.264标准的编码器还是很多的,譬如x264编码器。
(8)H.264
① 当前使用最多的视频编码方案就是H.264.
② 格式:码流数据由大小不固定的NALU组成。最常见的情况下,1个NALU存储了一帧画面的压缩编码之后的数据。
③ H.264码流的格式:就是一个一个的NALU组织在一起,一个接一个,连续在一起。每一个NALU的大小是不固定的,一个NALU代表一帧画面,帧与帧通过一个标志位来隔开。
④ 压缩方法比较复杂。包含了帧内预测、帧间预测、熵编码、环路滤波等环节构成。将YUV格式的视频数据压缩成H.264格式的码流,大概可以压缩100倍以上。
(1)将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。
(2)常见编码技术
(3)ACC是使用最多的一种码流格式,每一帧的声音数据被解码成了一个一个的ADTS,他们依次连在一起。将原始的音频数据压缩成ACC格式的码流,大概可以压缩10倍以上。