【音视频零基础入门 1】视频播放器原理、流媒体协议、封装格式、视频编码

  • 一、视频播放器原理
    • 1.1 解协议
    • 1.2 解封装
    • 1.3 解码
    • 1.4 视音频同步
  • 二、流媒体协议
  • 三、封装格式
  • 四、封装格式
    • 4.1 主流编码标准
    • 4.2 下一代编码标准
  • 五、音频编码
  • 六、现有网络视音频平台对比
  • 6.1 直播平台参数对比
  • 6.2 点播平台参数对比

一、视频播放器原理

音视频技术主要包含以下几点:封装技术视频压缩编码技术 以及 音频压缩编码技术
如果考虑到网络传输的话,还包括流媒体协议技术。

视频播放器的源代码详细解析(Media Player Classic - HC,Mplayer,FFplay,XBMC)可以参考系列文章:
《Media Player Classic:Media Player Classic - HC源代码分析 1:整体结构[系列文章]》
《Mplayer:MPlayer源代码分析》
《FFplay: FFplay源代码分析:整体流程图》
《XBMC: XBMC源代码分析 1:整体结构以及编译方法[系列文章]》

简要说明一下视频播放器的原理。

视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。
如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。

他们的过程如图所示。

1.1 解协议

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。
视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。
这些协议在传输视音频数据的同时,也会传输一些信令数据。
这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。
解协议的过程中会去除掉信令数据而只保留视音频数据。
例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

1.2 解封装

解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。
封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。

例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

1.3 解码

解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。
音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。

解码是整个系统中最重要也是最复杂的一个环节。
通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;
压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

1.4 视音频同步

视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

二、流媒体协议

流媒体协议是服务器与客户端之间通信遵循的规定。
当前网络上主要的流媒体协议如表所示:

名称 推出机构 传输层协议 客户端 目前使用领域
RTSP+RTP IETF TCP+UDP VLC, WMP IPTV
RTMP Adobe Inc. TCP Flash 互联网直播
RTMFP Adobe Inc. UDP Flash 互联网直播
MMS Microsoft Inc. TCP/UDP WMP 互联网直播+点播
HTTP WWW+IETF TCP Flash 互联网点播
  1. RTSP+RTP 经常用于IPTV领域
    因为其采用UDP传输视音频,支持组播,效率较高。但其缺点是网络不好的情况下可能会丢包,影响视频观看质量。
    因而围绕IPTV的视频质量的研究还是挺多的。

  2. RTSP规范可参考:《RTSP协议学习笔记》

  3. RTSP+RTP系统中衡量服务质量可参考:《网络视频传输的服务质量(QoS)》

因为互联网网络环境的不稳定性,RTSP+RTP较少用于互联网视音频传输。
互联网视频服务通常采用TCP作为其流媒体的传输层协议,因而像RTMP,MMS,HTTP这类的协议广泛用于互联网视音频服务之中。
这类协议不会发生丢包,因而保证了视频的质量,但是传输的效率会相对低一些。

  1. RTMFP是一种比较新的流媒体协议,特点是支持P2P

  2. RTMP
    可参考《RTMP规范简单分析》《RTMP流媒体播放过程》
    相关工具的源代码分析:《RTMPdump源代码分析 1: main()函数[系列文章]》
    RTMP协议学习:《RTMP流媒体技术零基础学习方法》

三、封装格式

封装格式的主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。

现如今流行的封装格式如下表所示:

名称 推出机构 流媒体 支持的视频编码 支持的音频编码 目前使用领域
AVI Microsoft Inc. 不支持 几乎所有格式 几乎所有格式 BT下载影视
MP4 MPEG 支持 MPEG-2, MPEG-4, H.264, H.263等 AAC, MPEG-1 Layers I, II, III, AC-3等 互联网视频网站
TS MPEG 支持 MPEG-1, MPEG-2, MPEG-4, H.264 MPEG-1 Layers I, II, III, AAC, IPTV,数字电视
FLV Adobe Inc. 支持 Sorenson, VP6, H.264 MP3, ADPCM, Linear PCM, AAC等 互联网视频网站
MKV CoreCodec Inc. 支持 几乎所有格式 几乎所有格式 互联网视频网站
RMVB Real Networks Inc. 支持 RealVideo 8, 9, 10 AAC, Cook Codec, RealAudio Lossless BT下载影视

由表可见,除了AVI之外,其他封装格式都支持流媒体,即可以“边下边播”。
有些格式更“万能”一些,支持的视音频编码标准多一些,比如MKV。而有些格式则支持的相对比较少,比如说RMVB。

这些封装格式都有相关的文档,在这里就不一一例举了。

可参考的开源项目:
《TS封装格式分析器》《FLV封装格式分析器 》

四、封装格式

视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。
如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。
视频编码是视音频技术中最重要的技术之一。

视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。

视频编码的简单原理可以参考:《视频压缩编码和音频压缩编码的基本原理》

注:视频编码技术在整个视音频技术中应该是最复杂的技术。
如果没有基础的话,可以先买一些书看一下原理,
比如说《现代电视原理》《数字电视广播原理与应用》(本科的课本)中的部分章节。

主要视频编码一览:

名称 推出机构 推出时间 目前使用领域
HEVC(H.265) MPEG/ITU-T 2013 研发中
H.264 MPEG/ITU-T 2003 各个领域
MPEG4 MPEG4 2001 不温不火
MPEG2 MPEG 1994 数字电视
VP9 Google 2013 研发中
VP8 Google 2008 不普及
VC-1 Microsoft Inc. 2006 微软平台

4.1 主流编码标准

H.264仅仅是一个编码标准,而不是一个具体的编码器,H.264只是给编码器的实现提供参照用的。

基于H.264标准的编码器还是很多的,究竟孰优孰劣?可参考:《MSU出品的 H.264编码器比较(2011.5)》

在学习视频编码的时候,可能会用到各种编码器(实际上就是一个exe文件),
他们常用的编码命令可以参考:《各种视频编码器的命令行格式》

学习H.264最标准的源代码,就是其官方标准JM了。但是要注意,JM速度非常的慢,是无法用于实际的:《H.264参考软件JM12.2RC代码详细流程》

实际中使用最多的就是x264了,性能强悍(超过了很多商业编码器),而且开源。
其基本教程网上极多,不再赘述。
编码时候可参考:《x264编码指南——码率控制》
编码后统计值的含义:《X264 输出的统计值的含义(X264 Stats Output)》

Google推出的VP8属于和H.264同一时代的标准。
总体而言,VP8比H.264要稍微差一点。
有一篇写的很好的VP8的介绍文章:《深入了解 VP8》
除了在技术领域,VP8和H.264在专利等方面也是打的不可开交,可参考文章:《WebM(VP8) vs H.264》

此外,我国还推出了自己的国产标准AVS,性能也不错,但目前比H.264还是要稍微逊色一点。
不过感觉我国在视频编解码领域还算比较先进的,可参考:《视频编码国家标准AVS与H.264的比较(节选)》

近期又推出了AVS新一代的版本AVS+,具体的性能测试还没看过。不过据说AVS+得到了国家政策上非常强力的支持。

4.2 下一代编码标准

下一代的编解码标准就要数HEVC和VP9了。
VP9是Google继VP8之后推出的新一代标准。VP9和HEVC相比,要稍微逊色一些。
它们的对比可参考:(1)《HEVC与VP9编码效率对比》 (2)《HEVC,VP9,x264性能对比》

HEVC在未来拥有很多大的优势,可参考:《HEVC将会取代H.264的原因》

学习HEVC最标准的源代码,就是其官方标准HM了。
其速度比H.264的官方标准代码又慢了一大截,使用可参考:《HEVC学习—— HM的使用》

未来实际使用的HEVC开源编码器很有可能是x265,目前该项目还处于发展阶段,可参考:
《x265(HEVC编码器,基于x264)介绍》
x265的使用可以参考:《HEVC(H.265)标准的编码器(x265,DivX265)试用》

主流以及下一代编码标准之间的比较可以参考文章:《视频编码方案之间的比较(HEVC,H.264,MPEG2等)》

此外,在码率一定的情况下,几种编码标准的比较可参考:《限制码率的视频编码标准比较(包括MPEG-2,H.263, MPEG-4,以及 H.264)》

结果大致是这样的:
HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2。

截了一些图,可以比较直观的了解各种编码标准:
HEVC码流简析:《HEVC码流简单分析》
H.264码流简析:《H.264简单码流分析》
MPEG2码流简析:《MPEG2简单码流分析》
以上简析使用的工具:《视频码流分析工具》
我自己做的小工具: 《H.264码流分析器》

五、音频编码

音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。
音频编码也是互联网视音频技术中一个重要的技术。
但是一般情况下音频的数据量要远小于视频的数据量,因而即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。
高效率的音频编码在同等的码率下,可以获得更高的音质。

音频编码的简单原理可以参考:《视频压缩编码和音频压缩编码的基本原理》

主要音频编码一览:

名称 推出机构 推出时间 目前使用领域
AAC MPEG 1997 各个领域(新)
AC-3 Dolby Inc. 1992 电影
MP3 MPEG 1993 各个领域(旧)
WMA Microsoft Inc. 1999 微软平台

由表可见,近年来并未推出全新的音频编码方案,可见音频编码技术已经基本可以满足人们的需要。
音频编码技术近期绝大部分的改动都是在MP3的继任者——AAC的基础上完成的。

这些编码标准之间的比较可以参考文章:《音频编码方案之间音质比较(AAC,MP3,WMA等)》

结果大致是这样的:
AAC+ > MP3PRO > AAC > RealAudio > WMA > MP3

AAC格式的介绍:《AAC格式简介》
AAC几种不同版本之间的对比:《AAC规格(LC,HE,HEv2)及性能对比》
AAC专利方面的介绍:《AAC专利介绍》
此外杜比数字的编码标准也比较流行,但是貌似比最新的AAC稍为逊色:《AC-3技术综述》
我自己做的小工具:《AAC格式分析器》

六、现有网络视音频平台对比

现有的网络视音频服务主要包括两种方式:点播和直播。

点播意即根据用户的需要播放相应的视频节目,这是互联网视音频服务最主要的方式。绝大部分视频网站都提供了点播服务。

直播意即互联网视音频平台直接将视频内容实时发送给用户,目前还处于发展阶段。直播在网络电视台,社交视频网站较为常见。

6.1 直播平台参数对比

主流互联网视音频平台直播服务的参数对比如表所示:

名称 协议 封装 视频编码 音频编码 播放器
CNTV 私有
华数TV RTMP FLV H.264 AAC Flash
六间房 RTMP FLV H.264 AAC Flash
中国教育电视台 RTMP FLV H.264 AAC Flash
北广传媒移动电视 RTMP FLV H.264 AAC Flash
上海IPTV RTSP+RTP TS H.264 MP2 机顶盒

可以看出,直播服务普遍采用了RTMP作为流媒体协议,FLV作为封装格式,H.264作为视频编码格式,AAC作为音频编码格式。采用RTMP作为直播协议的好处在于其被Flash播放器支持。而Flash播放器如今已经安装在全球99%的电脑上,并且与浏览器结合的很好。因此这种流媒体直播平台可以实现“无插件直播”,极大的简化了客户端的操作。封装格式,视频编码,音频编码方面,无一例外的使用了FLV + H.264 + AAC的组合。FLV是RTMP使用的封装格式,H.264是当今实际应用中编码效率最高的视频编码标准,AAC则是当今实际应用中编码效率最高的音频编码标准。视频播放器方面,都使用了Flash播放器。

6.2 点播平台参数对比

主流网络视音频平台点播服务的参数对比如表所示:
现有互联网视音频平台参数对比

名称 协议 封装 视频编码 音频编码 播放器
CNTV HTTP MP4 H.264 AAC Flash
CNTV(部分) RTMP FLV H.264 AAC Flash
华数TV HTTP MP4 H.264 AAC Flash
优酷网 HTTP FLV H.264 AAC Flash
土豆网 HTTP F4V H.264 AAC Flash
56网 HTTP FLV H.264 AAC Flash
音悦台 HTTP MP4 H.264 AAC Flash
乐视网 HTTP FLV H.264 AAC Flash
新浪视频 HTTP FLV H.264 AAC Flash

可以看出,点播服务普遍采用了HTTP作为流媒体协议,H.264作为视频编码格式,AAC作为音频编码格式。
采用HTTP作为点播协议有以下两点优势:
一方面,HTTP是基于TCP协议的应用层协议,媒体传输过程中不会出现丢包等现象,从而保证了视频的质量;
另一方面,HTTP被绝大部分的Web服务器支持,因而流媒体服务机构不必投资购买额外的流媒体服务器,从而节约了开支。

点播服务采用的封装格式有多种:MP4,FLV,F4V等,它们之间的区别不是很大。
视频编码标准和音频编码标准是H.264和AAC。
这两种标准分别是当今实际应用中编码效率最高的视频标准和音频标准。视频播放器方面,无一例外的都使用了Flash播放器。

《[总结]视音频编解码技术零基础学习方法》
《[总结]FFMPEG视音频编解码零基础学习方法》

《视音频数据处理入门:RGB、YUV像素数据处理》
《视频压缩编码和音频压缩编码的基本原理》

【音视频零基础入门 1】视频播放器原理、流媒体协议、封装格式、视频编码、音频编码相关推荐

  1. 雷神:音视频零基础入门教程

    雷神:音视频零基础入门教程 总结:视音频编解码技术零基础学习方法 CSDN里能找见的最好的音视频教程了,没有之一. 雷神一路走好.

  2. 【Go】Go语言视频零基础入门到精通项目实战web-基础篇

    文章目录 day3 1.类型转换 1.1 简单的类型转换 1.2 strconv 1.3 strings 1.4 println 与printf 的区别 2.指针 3.函数参数传递 4.defer 5 ...

  3. 零基础入门神经网络:从原理、主要类型到行业应用

    原作 Jay Shah Root 编译自 Jay Shah寄几的博客 量子位 出品 | 公众号 QbitAI 最近,神经网络这个词特别火,吸引不少眼球.但是神经网络是个啥?有啥用? 这篇文章和大家唠唠 ...

  4. 【神经网络】零基础入门神经网络:从原理、主要类型到行业应用

    原作 Jay Shah Root 编译自 Jay Shah寄几的博客 量子位 出品 | 公众号 QbitAI 最近,神经网络这个词特别火,吸引不少眼球.但是神经网络是个啥?有啥用? 这篇文章和大家唠唠 ...

  5. 视频编码零基础入门(0):零基础,史上最通俗视频编码技术入门

    [来源申明]本文引用了微信公众号"鲜枣课堂"的<视频编码零基础入门>文章内容.为了更好的内容呈现,即时通讯网在引用和收录时内容有改动,转载时请注明原文来源信息,尊重原作 ...

  6. 视频教程-一夫AE视频教程After EffectsCC 2018零基础入门抖音快手影视后期制作特效教学课程-After Effects(AE)

    一夫AE视频教程After EffectsCC 2018零基础入门抖音快手影视后期制作特效教学课程 中国电商服务联盟品牌讲师.中国国际互联网节品牌顾问. 12年视觉设计经验,5年视觉讲师经验.电商品牌 ...

  7. 2023年最新最全uniCloud入门学习,零基础入门到实战项目 uni-admin打造uniapp网页后端 微信支付宝抖音小程序后端 unicloud数据后台快速打造uniapp小程序项目

    今天开始带着大家一起零基础学习uniCloud,在下面的课程中我们就简称uniCloud为cloud吧.我这里从零基础开始教大家,后面可以带大家简单的做一个实战项目.所以不用担心自己没有基础,跟着石头 ...

  8. 罗马音平假名中文可复制_日语零基础入门五十音,日语零基础五十音图表

    日语零基础入门五十音,日语入门的最基本要求就是记住五十音图,但是这个记住不仅是你能背下来或是默写下来.而是你需对号入座! 下面是一张五十音图表. 即每个假名单独拿出来你要立马反应出来怎么读.其重要性甚 ...

  9. 生日祝福小程序_广告配音剪映零基础入门教程第二十六篇:如何给朋友制作生日祝福视频...

    经常听到小伙伴问到生日祝福视频怎么做,当然我想既然要为他人做生日祝福视频,那么这个人必定是自己身边比较重要的人,而生日又是每个人都是非常重要的,在这种充满意义的时刻,我们想给自己极其重要的人送上一份祝 ...

最新文章

  1. vue实现文件上传功能
  2. java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误
  3. winform 基础
  4. 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程
  5. python中统计特征
  6. Vue中使用pdf.js通过流的方式传参给pdfviewer.html
  7. Linux中COPYODM的作用,odm操作指南
  8. 沈阳农业大学计算机专业排名,沈阳农业大学王牌专业排名
  9. java excel 图表_java POI实现向Excel中插入图片
  10. 视频传输协议之MPEG-DASH
  11. 天上的街市Unity游戏场景制作案例(一)
  12. C++描述 LeetCode 5677. 统计同构子字符串的数目
  13. Python输出回文数
  14. 操作系统 -- 处理器管理
  15. CES 2018前瞻:家居/音箱/AR/汽车都有什么新玩法 | 关注
  16. sketch切换画板_Sketch App:如何与团队共享画板
  17. Sony spad sensor 周边的tdc电路要求满足什么
  18. 每日一题——质因数个数(蓝桥杯2022年第十三届省赛真题)
  19. QLabel设置自动换行
  20. hutool 获取某月最后一天_huTool--工具类常用方法

热门文章

  1. MATLAB Jacobi迭代法 求解线性方程组
  2. 日志平台-统一日志平台ELK管理
  3. mac 的 excel 替换换行符
  4. Git 使用的一些命令以及Git commit 注释格式
  5. C4996 scanf:This function or variable may be unsafe. / C6031 返回值被忽略.
  6. Oracle:lsnrctl status无监听
  7. android t9搜索算法,T9拨号盘搜索和排序算法
  8. 计算机应用程序无响应,电脑上应用程序很容易未响应,怎么办?
  9. 超人气思维导图XMind新年新版本,这6个新功能你一定要看
  10. 力推美团企业版 美团究竟意欲何为?