【专题2:qt工程师】 之 【38.音视频基础概念 之 上】

  笔者在嵌入式领域深耕6年,对嵌入式项目构建,BLDC电机控制,产品上位机开发以及产品量产和产品售后维护有多年工作经验。经验分享,从0到1, 让我带你从实际工作的角度走进嵌入式成长之路。

  原创不易欢迎大家关注我的微信公众号嵌入式工程师成长之路扫下面二维码
                     在这里插入图片描述
所有文章总目录:【电子工程师 qt工程师】

原创视频总目录:【电子工程师 qt工程师】

  音视频技术主要包含:封装技术、视频压缩编码技术和音频压缩编码技术以及网络传输方面的流媒体协议技术。

1.信息查看工具

综合信息查看:

  • MediaInfo

二进制信息查看:

  • UltraEdit:将视频用二进制工具打开。

单项详细分析:

  • 封装格式:Elecard Format Analyzer,查看各种封装格式。
  • 视频编码数据:Elecard Stream Eye,查看码流。
  • 视频像素数据:YUV Player,查看YUV格式数据。
  • 音频采样数据:Adobe Audition。

2.播放一个视频文件的流程

【专题2:qt工程师】 之 【38.音视频基础概念 之 上】_第1张图片
  (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)视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

3.流媒体协议

(1)流媒体协议是服务器与客户端之间视频流收发所遵循的规定。
(2)当前网络上主要的流媒体协议如表所示:
【专题2:qt工程师】 之 【38.音视频基础概念 之 上】_第2张图片

4.封装格式

(1)视频码流和音频码流按照一定的格式存储在一个文件中。这里的音频码流和视频码流是压缩数据,占用的空间比较小。仅仅靠看文件的后缀,很难能看出具体使用了什么视音频编码标准。

(2)封装格式数据主要包含三方面的内容:视频描述信息、音频码流、视频码流。不同的封装格式它们三者的位置可能不一样,所以需要解封装格式,将三者的数据分离提取出来。
【专题2:qt工程师】 之 【38.音视频基础概念 之 上】_第3张图片
(3)封装格式分析工具
Elecard Format Analyzer

(4)常见的封装格式
【专题2:qt工程师】 之 【38.音视频基础概念 之 上】_第4张图片
  不同的封装格式支持的编解码技术是一样的。由表可见,除了AVI之外,其他封装格式都支持流媒体(可以“边下边播”)。有些格式更“万能”一些,支持的视音频编码标准多一些,比如MKV。而有些格式则支持的相对比较少,比如说RMVB。

  • AVI:是一种比较开放的封装格式,里面可以存放任意的压缩格式,甚至可以存放没有压缩的文件。早期的音视频开发,一般都是用这种格式,直接将录像机录下的视频放到AVI格式里面,所以文件比较大,现在用的比较少。
  • FLV:做直播一般用这种格式,直接将音视频数据封装为FLV格式,然后用rtmp推流到服务器。
  • Ts:电视一般使用这种格式。
  • ASF:微软推出的,一般用来做点播。
  • MP4…

(5)解封装格式
  将音频码流和视频码流分开,分开之后的数据依然是压缩了的数据。音频流可能是AAC、MP3等格式的音频码流。视频流可能是H.254或MPEG2等格式的视频码流,即H.264视频码流。

  码流是不能直接显示在屏幕的像素点数据,即它是不能直接显示在屏幕上的。码流是通过算法对原视频加工之后的数据,播放前必须先解码,即音频解码和视频解码,解码成显示器能识别的像素点形式的数据。

(6)H.264码流解码出来的数据被称为YUV数据,即视频的像素点数据。

5.视频编码

(1)解码和编码是两个逆过程。

(2)将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。譬如高清视频,如果不编码压缩,10秒钟的高清视频可能就有1G大小。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。视频编码技术在整个视音频技术中应该是最复杂的技术。

(3)正常的帧率为1秒钟播放24帧数据。

(4)分析工具:Elecard Stream Eye

(5)常用的编码技术
【专题2:qt工程师】 之 【38.音视频基础概念 之 上】_第5张图片

  • H264:最常用的编码格式。
  • Mjpeg:在一些usb摄像头中会遇到,即usb摄像头出来的视频数据就是mjpeg格式的。这种格式没有被压缩,也就是每一帧视频数据都是I帧(关键帧),所以文件比较大。H264在一个GOP(一组视频)中,只有一个I帧,其它帧存储的都是前后帧之间的变化。同等清晰度的视频文件,h264可能只要2M,但mjpeg可能就要20M。
  • 使用H264其实更复杂,尤其是在视频拖动时,做seek时,如果是Mjpeg编码,因为每一帧都是关键帧,所以可以直接拖动;但如果是H264,手动拖动的位置可能不是关键帧,所以必须先找到前面的关键帧,然后在解码。

(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倍以上。

6.音频编码

(1)将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。
(2)常见编码技术
【专题2:qt工程师】 之 【38.音视频基础概念 之 上】_第6张图片

  • Aac:在视频领域,一般使用aac作为音频的编码。
  • Mp3:很普及,但用得越来越少。
    aac和mp3都是有损压缩。
  • Ape/flac:无损压缩,音质非常好。
    视频都是有损压缩,音频可以无损压缩。

(3)ACC是使用最多的一种码流格式,每一帧的声音数据被解码成了一个一个的ADTS,他们依次连在一起。将原始的音频数据压缩成ACC格式的码流,大概可以压缩10倍以上。

在这里插入图片描述

你可能感兴趣的:(专题2:qt工程师)