快速探索,音视频技术不再神秘

qcloudcommunity · · 2775 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

**欢迎大家前往[腾讯云+社区](https://cloud.tencent.com/developer/?fromSource=waitui),获取更多腾讯海量技术实践干货哦~** > 本文由[goo](https://cloud.tencent.com/developer/user/2557878)发表于[云+社区专栏](https://cloud.tencent.com/developer/column/73035?fromSource=waitui) > 与生活紧密相连的音视频,为何有那么多格式?直播、点播以及即时视频其中又有怎样的机制支撑?面对纷繁复杂的音视频知识,应该如何学起?快速探索,音视频技术不再神秘。 ## 前言 面对一门技术,我们熟悉而陌生,我们能够熟练的基于平台的API完成各种各样的需求,掌握平台特性、框架与原理。但随着技术点不断深入,却发现自己存在基础性与深度性的知识盲区。 局限于平台API开发,并不能使我们走的很远。突破技术成长必经的瓶颈期,关键在于技术沉淀与对业务方向相结合,需要我们对知识积累与深入。本文分享了笔者对音视频技术知识网络的探索路径,希望能给大家带来帮助。 ![img](https://ask.qcloudimg.com/draft/2557878/sm5byls176.png?imageView2/2/w/1620) ## 一、采集 - 数据从哪里来? ### 1.1 采样原理 **定义:**对连续变化图像在空间坐标上做离散化处理,将**模拟信号转变成数字信号**的过程,即为图像进行采样。 **通俗来说:**采集就是将看到的东西转成二进制流的过程。 ### 1.2 基础概念 #### 1.2.1 图像 「图像」是个集合的概念,帧、顶场、底场都可以称为图像。 - 帧 一帧通常是一幅完整图像,当采用逐行扫描方式扫描,每次扫描得到的信号就是一帧。 - 顶场与底场 采集视频信号时,扫描方式分为逐行扫描与隔行扫描。如果采用逐行扫描,得到的则是一幅完整的图像;而采用隔行扫描(奇、偶数行),则扫描下来的一帧图像就被分为了两个部分,这每一部分就称为「场」,根据次序分为:「顶场」和「底场」 - 隔行扫描 每一帧被分割为两场画面交替显示。每一帧被分割为顶场与底场,通常是先扫描奇数行得到第一场,然后扫描偶数行得到第二场。由于视觉暂留效应,人眼将会看到平滑的运动而不是闪动的半帧半帧的图像。但是这时会有闪烁出现,尽管不容易被察觉,但会使得人眼容易疲劳。当屏幕的内容是横条纹时,这种闪烁特别容易被注意到,并且会有锯齿瑕疵。 - 逐行扫描 则是将每帧的所有画面同时显示。每次都显示整个扫描帧,如果逐行扫描的帧率和隔行扫描的场率相同,人眼将看到比隔行扫描更平滑的图像,相对于隔行扫描来说闪烁较小。每一帧图像均是由电子束顺序地一行接着一行连续扫描而成,这种扫描方式称为逐行扫描。 - 两者区别 举个栗子,25fps 100行帧图像,那么隔行扫描需要一秒扫描50次,但每次只需要扫描50行。而逐行扫描则只需要扫描25次,但每次需要扫描100行。 结论:隔行扫描扫描频率为逐行扫描双倍,信道带宽为逐行扫描的一半。在图像体验降低不多的情况下,信道带宽减少了一半,使得设备成本减少,因此,早期大多数显示器都采用隔行扫描。 - 传送门:[逐行扫描、隔行扫描详细讲解](http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380143fd3d1027fa3c215cc79051a003fb0e772351770d1c37e6116a94b5feaf42b22695e75aada8edb0c86ea8f2f288c2d347716854110d019a9c84126c227945de8aa1ae0a7e477ceee84dcc82459dd27036d81809c2c0203bc6de71541f4d7925f665507cbec2712f54e775888524ba136faf7431e10f1fc&p=c23fce16d9c15de00fbd9b7d0d1091&newp=8b2a971d92d505ee02bd9b7d0d1081231610db2151d7d601298ffe0cc4241a1a1a3aecbf27281706d5c37a6d02a94a56e0f73074350034f1f689df08d2ecce7e77cc31703146&user=baidu&fm=sc&query=%25B8%25F4%25D0%25D0%25C9%25A8%25C3%25E8+%25C9%25C1%25CB%25B8&qid=c355ac760035ba58&p1=3) ![img](https://ask.qcloudimg.com/draft/2557878/c2l3e0ml2q.png?imageView2/2/w/1620)逐行扫描与隔行扫描 ![img](https://ask.qcloudimg.com/draft/2557878/nvg9f95c2f.png?imageView2/2/w/1620)顶场与底场,隔行扫描锯齿瑕疵 #### 1.2.2 颜色模型 ##### RGB颜色模型 ![img](https://ask.qcloudimg.com/draft/2557878/d0pd13swo6.png?imageView2/2/w/1620)RGB模型 RGB分别代表红绿蓝,每种颜色需要用3个数字表示,一个数字占用1字节,一种颜色则需要3字节,24位。 更高效的颜色模型?YUV ##### YCbCr颜色模型 YCbCr颜色模型是YUV家族的一员,关键特点在于它亮度信号Y与色度信号U、V相互分离。当缺失U、V,仅有Y信号时,也能够表示出黑白图像。 ``` Y = kr\*R + kg\*G + kb\*B ``` Y 即「亮度」,kr、kg、kb 即 R、G、B 的权重值。 ``` Cr = R – Y; Cg = G – Y; Cb = B – Y; ``` 疑问:对比RGB模型,YCbCr模型每个像素也需要3个信号表示,为什么说该模型更高效? ##### 优化思路 人眼对亮度分辨率敏感度高于色彩敏感度。 ![img](https://ask.qcloudimg.com/draft/2557878/jhh3sjw0lo.png?imageView2/2/w/1620)视觉特性 基于人眼视觉特性,很明显,我们需要从颜色方面入手,于是提出“色度取样”,使颜色存储减半或者更多。容易实现,编码压力较小,收益较高。 ![img](https://ask.qcloudimg.com/draft/2557878/fkgh2gkc26.png?imageView2/2/w/1620)色度取样 ##### 优化实现 我们知道显示器扫描原理分为逐行扫描与隔行扫描,每条扫描线被扫描时,色度数值传送频率会比亮度低,颜色取样方式有多种,取样方式通常基于亮度值,以4:X:Y的形式描述,X和Y是每两个色度通道中的数值的相对数量: ![img](https://ask.qcloudimg.com/draft/2557878/jexhvxd029.png?imageView2/2/w/1620)显示器扫描显示原理 继续举个栗子: ![img](https://ask.qcloudimg.com/draft/2557878/chawztr9z9.png?imageView2/2/w/1620)YCbCr像素点 我们有这样一幅图片,上面有像素阵列: ![img](https://ask.qcloudimg.com/draft/2557878/fktvmvtfos.png?imageView2/2/w/1620)原始像素阵列 ![img](https://ask.qcloudimg.com/draft/2557878/j54z3662q6.png?imageView2/2/w/1620)YCbCr 4:4:4 会有以下几种采样优化方式: ![img](https://ask.qcloudimg.com/draft/2557878/ycwy4r1807.png?imageView2/2/w/1620)4:2:2优化后像素阵列 ![img](https://ask.qcloudimg.com/draft/2557878/f4r0pso1g5.png?imageView2/2/w/1620)4:2:2取样方式 ![img](https://ask.qcloudimg.com/draft/2557878/s3g4cgj28k.png?imageView2/2/w/1620)4:2:0优化后像素阵列 ![img](https://ask.qcloudimg.com/draft/2557878/o36em3hgko.png?imageView2/2/w/1620)4:2:0取样方式 上图可以很直观的看出:采用YCbCr颜色模型后,并不需要每个像素都存有3个分量,颜色分量通过“色度取样”后,有效的减少了颜色分量的存储。 ### 1.3 图像感知与获取 <center> <img src="https://ask.qcloudimg.com/draft/2557878/yjqoq9qlhg.png" width="70%" /> 成像传感器 </center> 1. 通过电功率和对特殊类型检测能源敏感的传感器材料组合。 2. 将输入的光照能量变为特殊的电压波形。 3. 波形的幅度和空间特性都与感知的物理现象有关。为了产生数字图像,接下来需要进行**取样与量化**处理。 ### 1.4 取样与量化 举个栗子,对于黑白图像图(a)为连续图像,如果需要转换成数字形式,需要几步主要操作: ![img](https://ask.qcloudimg.com/draft/2557878/wlp7ng9s3c.png?imageView2/2/w/1620)取样与量化 1. **取样:**(a)图上沿AB线段等间隔对该图像取样,得到灰度级曲线(b) 2. 量化: (c)图右侧将灰度分为8个灰度级,再横向每一取样的连续灰度值,量化为8个灰度之一,最终得到(d)图,感知器输出的量化完成流产生数字图像的过程。 ![img](https://ask.qcloudimg.com/draft/2557878/rxsjuvee7h.png?imageView2/2/w/1620) a. 图像投影至传感器阵列 b. 图像取样与量化结果 ## 二、渲染 - 数据如何展现? ### 2.1 播放器原理 播放器播放从互联网上播放视频,需要经过:解协议、解封装、解码、音视频同步这几个核心步骤。<center> ![img](https://ask.qcloudimg.com/draft/2557878/w75d1nnsiv.png?imageView2/2/w/1620)互联网播放视频流程 1. **解协议:**将流媒体协议数据,解析为标准封装格式数据。流媒体协议传输音视频数据同时,也会传输一些信令数据,其中包括:播放控制、网络状态描述等。常见流媒体协议如HTTP、RTMP或MMS等。 2. **解封装:**将解协议得到的标准封装格式数据,分离为音频流压缩编码数据与视频流压缩编码数据。封装格式也称为容器,即是将已经编码压缩好的视频轨与音频轨按照一定格式放到一个文件中。 **需要注意的是:**就算是同一个封装格式,其编码方式并不一定一样,我们可以从后缀名中直观的看到视频文件到封装格式。常见封装格式:avi,rmvb,mp4,flv,mkv等。 3. **解码:**就是将音视频压缩编码数据,解码成为非压缩的音视频原始数据。音频编码标准有AAC,MP3,AC-3等;视频编码标准包含H.264,MPEG2,VC-1等。编解码是整个流程最核心与最复杂的环节。 4. **音视频同步:**根据解封装过程获取的参数信息,将解码出来的音视频数据进行同步对其,最终将数据传送到系统,由系统调用硬件进行播放。 ### 2.2 视频编码方式 视频编解码过程是数字视频压缩与解压缩的过程。 选取音视频编码方案时,需要考虑:视频的质量、码率、编码算法和解码算法的复杂度、针对数据丢失和错误的鲁棒性(Robustness)、编辑的方便性、随机访问、编码算法设计的完美性、端到端的延时以及其它一些因素。 #### 2.2.1 H.26X系列概述 H.26X 系列,由国际电传视讯联盟远程通信标准化组织(ITU-T)主导,包括 H.261、H.262、H.263、H.264、H.265。 - H.261,主要用于老的视频会议和视频电话系统。是第一个使用的数字视频压缩标准。实质上说,之后的所有的标准视频编解码器都是基于它设计的。 - H.262,等同于 MPEG-2 第二部分,使用在 DVD、SVCD 和大多数数字视频广播系统和有线分布系统中。 - H.263,主要用于视频会议、视频电话和网络视频相关产品。在对逐行扫描的视频源进行压缩的方面,H.263 比它之前的视频编码标准在性能上有了较大的提升。尤其是在低码率端,它可以在保证一定质量的前提下大大的节约码率。 - H.264,等同于 MPEG-4 第十部分,也被称为高级视频编码(Advanced Video Coding,简称 AVC),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。该标准引入了一系列新的能够大大提高压缩性能的技术,并能够同时在高码率端和低码率端大大超越以前的诸标准。 - H.265,被称为高效率视频编码(High Efficiency Video Coding,简称 HEVC)是一种视频压缩标准,是 H.264 的继任者。HEVC 被认为不仅提升图像质量,同时也能达到 H.264 两倍的压缩率(等同于同样画面质量下比特率减少了 50%),可支持 4K 分辨率甚至到超高画质电视,最高分辨率可达到 8192×4320(8K 分辨率),这是目前发展的趋势。 - 详解待整理另外文章 #### 2.2.2 MPEG系列概述 MPEG 系列,由国际标准组织机构(ISO)下属的运动图象专家组(MPEG)开发。 - MPEG-1 第二部分,主要使用在 VCD 上,有些在线视频也使用这种格式。该编解码器的质量大致上和原有的 VHS 录像带相当。 - MPEG-2 第二部分,等同于 H.262,使用在 DVD、SVCD 和大多数数字视频广播系统和有线分布系统中。 - MPEG-4 第二部分,可以使用在网络传输、广播和媒体存储上。比起 MPEG-2 第二部分和第一版的 H.263,它的压缩性能有所提高。 - MPEG-4 第十部分,等同于 H.264,是这两个编码组织合作诞生的标准。 - 详解待整理另外文章 ### 2.3 音频编解码方式 除了视频,音频当然也需要编码,而音频常用编码格式: - AAC,英文全称 Advanced Audio Coding,是由 Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,在 1997 年推出的基于 MPEG-2 的音频编码技术。2000 年,MPEG-4 标准出现后,AAC 重新集成了其特性,加入了 SBR 技术和 PS 技术,为了区别于传统的 MPEG-2 AAC 又称为 MPEG-4 AAC。(AAC详解待整理另外文章) - MP3,英文全称 MPEG-1 or MPEG-2 Audio Layer III,是当曾经非常流行的一种数字音频编码和有损压缩格式,它被设计来大幅降低音频数据量。它是在 1991 年,由位于德国埃尔朗根的研究组织 Fraunhofer-Gesellschaft 的一组工程师发明和标准化的。MP3 的普及,曾对音乐产业造成极大的冲击与影响。 - WMA,英文全称 Windows Media Audio,由微软公司开发的一种数字音频压缩格式,本身包括有损和无损压缩格式。 ## 三、处理 - 数据怎么加工? 音视频加工处理,是业务的核心需求,对开发者自由度最大的一个环节,通过音视频处理,可以实现各种各样炫酷的特效。 **图像、视频常见处理方式:**美化、裁剪、缩放、旋转、叠加、编解码等。 **音频常见处理方式:**重采样、去噪,回声消除,混音、编解码等 **常见框架:** 1. 图像处理:OpenGL,OpenCV,libyuv,ffmpeg 等; 2. 视频编解码:x264,OpenH264,ffmpeg 等; 3. 音频处理:speexdsp,ffmpeg 等; 4. 音频编解码:libfaac,opus,speex,ffmpeg 等。 (传送门:[音视频开发开源码工程汇总](http://www.52im.net/thread-1395-1-1.html)) ## 四、传输 - 数据如何传输? ### 4.1 流媒体协议 流媒体,指通过互联网以流式传输方式的媒体。流媒体协议,则是服务器与客户端之间通信遵循但规定。说到音视频传输,我们不得不提流媒体协议,常见流媒体协议有: | 协议 | 概述 | 特点 | 应用场景 | | ----- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | RTP | (Real-time Transport Protocol)一种网络传输协议,RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。 | 基于UDP 协议实现 | RTP协议常用于流媒体系统(配合 RTSP 协议) | | RTCP | (Real-time Transport Control Protoco)实时传输协议(RTP)的一个姐妹协议。 | RTCP为RTP媒体流提供信道外(out-of-band)控制。RTCP 本身并不传输数据,但和 RTP 一起协作将多媒体数据打包和发送。RTCP 定期在流多媒体会话参加者之间传输控制数据。 | 为 RTP 所提供的服务质量(Quality of Service)提供反馈。 | | RTSP | (Real Time Streaming Protocol)定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。 | RTSP 在体系结构上位于 RTP 和 RTCP 之上,使用 TCP 或 UDP 完成数据传输 | 使用 RTSP 时,客户机和服务器都可以发出请求,即 RTSP 可以是双向的。 | | RTMP | (Real Time Messaging Protocol)Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议。 | 协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。 | 一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。 | | RTMFP | (Real Time Media Flow0 Protoco)Adobe 公司开发的一套新的通信协议,全称 Real Time Media Flow Protocol | 协议基于 UDP,支持 C/S 模式和 P2P 模式,即该协议可以让使用 Adobe Flash Player 的终端用户之间进行直接通信 | Adobe Flash Player 的终端用户之间进行直接通信 | | HTTP | (HyperText Transfer Protoco)运行在 TCP 之上 | | 这个协议是大家非常熟悉的,它也可以用到视频业务中来。 | | HLS | (HTTP Live Streaming)是苹果公司实现的基于 HTTP 的流媒体传输协议,全称 ,可支持流媒体的直播和点播 | 短时长的媒体文件(MPEG-TS 格式),客户端不断的下载并播放这些小文件。由于数据通过 HTTP 协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放 HLS 的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议 | 主要应用在 iOS 系统,为 iOS 设备(如 iPhone、iPad)提供音视频直播和点播方案。 | ### 4.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 有两方面优势: - HTTP 是基于 TCP 协议的应用层协议,媒体传输过程中不会出现丢包等现象,从而保证了视频的质量。 - HTTP 是绝大部分的 Web 服务器支持的协议,因而流媒体服务机构不必投资购买额外的流媒体服务器,从而节约了开支。 对于封装格式:MP4,FLV,F4V 几者只是容器,带来的差异不大,而关键的是音视频解码方式:H.264与AAC,这两种编码标准目前仍被最广泛的应用。 ### 4.3 网络视频直播业务 | 公司 | 协议 | 封装 | 视频编码 | 音频编码 | 播放器 | | ------------ | ---- | ---- | -------- | -------- | ------ | | 华数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 作为直播协议的好处是可以直接被 Flash 播放器支持,而 Flash 播放器在 PC 时代有着极高的普及率,并且与浏览器结合的很好。因此这种流媒体直播平台基本上可以实现了「无插件直播」,极大降低了用户使用成本。 封装格式、视频编码、音频编码、播放器方面几乎全部采用了 FLV、H.264、AAC、Flash。FLV、RTMP、Flash 都是 Adobe 公司的产品,天生有着良好的结合性。 ### 4.4 总结 以上为PC时代旧数据,现移动互联网已爆发,H5 以及客户端应用的普及,行业中对视频业务技术方案的选择也逐渐在发生着变化,而我们则需要结合眼下的实际情况和技术发展的趋势去做出合适的技术选型。 ## 结语 音视频技术道路很长,本文旨在搭建音视频知识知识网,许多知识未能深入,后续仍需要我们不断学习与实践,抱着追求极致的精神去探索发现,加油,我们共同快速成长! >**相关阅读** >[【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识](https://cloud.tencent.com/developer/edu/course-1128?fromSource=waitui) **此文已由作者授权腾讯云+社区发布,更多原文请[点击](https://cloud.tencent.com/developer/article/1360546?fromSource=waitui )** **搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!** 海量技术实践经验,尽在[云加社区](https://cloud.tencent.com/developer?fromSource=waitui)!

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2775 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传