视音频常见问题总结

1. 视频编码标准两大系统是什么?

视频编码标准有两大系统:MPEG和ITU-T:
视频编码标准:
MPEG标准是由MPEG制定,MPEG-1,MPEG-2,MPEG-3,MPEG-4,MPEG-7,MPEG-21
ITU-T标准是由VCEG制定,H.261,H.262,H.263,H.263v2,H.2 64

什么是音视频编码格式?什么是音视频封装格式?

常见的AVI,RMVB,MKV,ASF,WMV,MP4,3GP,FLV等文件其实只能算是一种封装标准。
一个完成的视频文件是由音频和视频两部分组成。H264,Xvid等就是视频编码格式,MP3,AAC等就是音频编码格式。
例如:将一个Xvid视频编码文化和MP3视频编码文件按AVI封装标准封装以后,就得到一个AVI后缀的视频文件。

由于很多种视频编码文件,音频编码文件都符合AVI等着要求,则意味着即使是AVI后缀,也可能里面的具体编码格式不同,因此出现在一些设备上,通识AVI后缀文件,一些能正常播放,一些就无法播放。

同样的情况也存在于其他容器格式。即使RMVB,WMV等也不例外,事实上,很多封装容器对音频编码和视频编码的组合方式放的很开,如AVI还可以使用H.264+ACC组合。尤其是MKV封装容器,基本无论什么样的组合都可以!但一般MKV用的最多的就是H.264+ACC组合,此组合文件体积最小,清晰度最高。因此网上很多MKV视频都是高清晰度。

因此,视频转换需要设置的本质就是:A,设置需要的视频编码;B,设置需要的音频编码;C,选择需要的容器封装;一个完成的视频转换设置都至少包括了上面3个步骤。

软解码和硬解码,是什么?

硬解就是硬件解码,指利用GPU来部分替代CPU进行解码,软解就是软件解码,指利用软件让CPU进行解码:

硬解码:是将原来全部交给CPU来处理的视频数据的一部分交给GPU来做,而GPU的并行运算能力要远远高于CPU。这样可以大大的降低对CPU的负载,CPU的占用率较低了之后就可以运行一些其他程序了,当然对于比较好的处理器来说,硬解和软解的区别只是个人偏好了。

软解码:即通过软件让CPU来对视频进行解码处理;而硬解码,指不借助与CPU,而通过专用的子卡设备来独立完成视频解码任务。增加的VCD/DVD解压卡,视频压缩卡等都隶属于硬解码这个范畴。先如今,要完成高清解码已经不再需要额外的子卡,因为硬解码的模块已经被整合到显卡CPU的内部,所以目前主要的显卡都能够支持硬解码技术。

何为直播?何为点播?

直播:是一个三方交互(主播,服务器,观众),这个交互实时的。尽管会根据选择的协议不同而有一些延迟,但我们仍认为它直播是实时的:主播在本地发送音频给服务器(推流),观众从服务器实时解码(拉流)收看收听主播发送给服务器的音视频(直播容器)。

点播:首先要明确一点,点播不存在推流这一过程,因为你本身的流已经推给服务器了,或者说应该是你的音视频早就上传到服务器,观众只需要在线收看即可。

推流和拉流

推流:在直播中,一方向服务器发送请求,向服务器推送自己正在实时直播的数据,而这些内容在推送到服务器的这一过程中是以“流”的形式传递的,这就是推流,把音视频数据以流的方法上传到服务器的过程。推流方的音视频往往会很大,在推流的过程首先按照ACC音频编码和H.264视频编码的标准把推过来的音视频压缩,然后合并成MP4或者FLV格式,然后根据直播的封装协议,最后传给服务器完成推流。

拉流:与推流正好相反。拉流是用户从服务器获取推流方给服务器的音视频的过程。拉流首先用ACC音频解码和H.264视频解码,把推过来的音视频解压缩,然后合成MP4或者FLV格式,再解封装,最后到我们的客户端与观众进行交互。

常见的直播协议有三种:RTMP,HLS,FLV
  1. RTMP:实时传输协议,RTMP协议比较全能,即可以用来推送又可以用来直播,其核心理念是将大块的视音频和音频帧“剁碎”,然后以小数据包的形式在互联网上进行传输,而且支持加密,因此隐私性相对比较理想,但拆包组包的过程比较复杂,所以在海量并发时也容易出现一些不可预期的稳定性问题。
  2. FLV:FLV协议由Adobe公司主推,格式极其简单,只是在大块的视频帧和音视频头部加入一些标记头信息,由于这种极致的简洁,在延迟表现和大规模并发方面都很成熟。唯一的不足就是在手机浏览器上的支持非常有限,但是用作手机端APP直播协议却异常合适。
  3. HLS:苹果原生:HTTP Live Streaming,遵循的是 HTTP 超文本传输协议,端口号8080,将视频分成5-10秒的视频小分片,然后用m3u8索引表进行管理,由于客户端下载到的视频都是5-10秒的完整数据,故视频的流畅性很好,但也同样引入了很大的延迟(HLS的一般延迟在10-30s左右);
点播中常见的数据传输协议:

HLS,HTTP

m3u8构成是?直播中m3u8、ts如何实时更新?

是一个索引地址/播放列表,通过FFmpeg将本地的xxx.mp4进行切片处理,生成m3u8播放列表(索引文件)和N多个 .ts文件,并将其(m3u8、N个ts)放置在本地搭建好的webServer服务器的指定目录下,我就可以得到一个可以实时播放的网址,我们把这个m3u8地址复制到 VLC 上就可以实时观看!
在 HLS 流下,本地视频被分割成一个一个的小切片,一般10秒一个,这些个小切片被 m3u8管理,并且随着终端的FFmpeg 向本地拉流的命令而实时更新,影片进度随着拉流的进度而更新,播放过的片段不在本地保存,自动删除,直到该文件播放完毕或停止,ts 切片会相应的被删除,流停止,影片不会立即停止,影片播放会滞后于拉流一段时间

转载自:https://blog.csdn.net/hejjunlin/article/details/54962205

猜你喜欢

转载自blog.csdn.net/qq_36391075/article/details/83019890