学习视音频笔记

因为之前的公司是做视频app的 同事们都特别厉害,关于视音频大家都有所研究,而我就啥也不会所以趁现在有时间我多学习学习

我研究主要是根据@雷霄骅 大神的博客研究 和自己去网上查询相关资料 特此感谢雷霄骅大神 我也希望他一路走好 谢谢您给了我们好多宝贵的学习文章 谢谢您##

下面就开始我们的学习之路

视频播放器原理

学习视音频笔记_第1张图片
视频播放器原理.jpg

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。
解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。
解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。
视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

流媒体协议
流媒体(英文Stream Media)是用来描述时间性要求发送媒体信息的术语,尤其特指通过因特网发送压缩媒体,流化技术使得内容打包并向流水一样发送。
大家在观看网上电影或者电视时,一般都会注意到这些文件的连接都不是用http或者ftp开头,而是一些rtsp或者mms开头的东西,为什么是这样呢?实际上,这些和http和ftp一样,都是数据在网络上传输的协议,只是它们是专门用来传输流式媒体的协议而已
流媒体协议是服务器与客户端之间通信遵循的规定

学习视音频笔记_第2张图片
流媒体协议.png

RTSP+RTP经常用于IPTV领域。因为其采用UDP传输视音频,支持组播,效率较高。但其缺点是网络不好的情况下可能会丢包,影响视频观看质量。
因为互联网网络环境的不稳定性,RTSP+RTP较少用于互联网视音频传输。互联网视频服务通常采用TCP作为其流媒体的传输层协议,因而像RTMP,MMS,HTTP这类的协议广泛用于互联网视音频服务之中。这类协议不会发生丢包,因而保证了视频的质量,但是传输的效率会相对低一些。
Apple的QuickTime使用哪种协议呢?在多数情况下,QuickTime使用http协议,但实际上它也有标准的流媒体传输协议,这就是标准RTSP协议。

在架设流媒体服务器之前,我们一定要了解一些点播与广播的知识。
点播是客户端与服务器之间的主动的连接,在点播连接中,用户通过选择内容项目来初始化客户端连接,一个客户端从服务器接收一个媒体流(这个连接是唯一的,其它用户不能占用),并且能够对媒体进行开始、停止、后退、快进或暂停等操作,客户端拥有流的控制权,就像在看影碟一样。这种方式由于每个客户端各自连接服务器,服务器需要给每个用户建立连接,对服务器资源和网络带宽的需求都比较大。
广播指的是用户被动接收流。在广播过程中,客户端接收流,但不能控制流,用户不能暂停、快进或后退该流,广播使用的数据发送手段有单播与广播。使用单播发送时,服务器需要将数据包复制多个拷贝,以多个点对点的方式分别发送到需要它的那些用户,而使用广播方式发送,数据包的单独一个拷贝将发送给网络上的所有用户,而不管用户是否需要,上述两种传输方式会非常浪费网络带宽和服务器资源,因此产生了组播(多播)技术。
组播(多播)吸收了上述两种发送方式的长处,克服了上述两种发送方式的弱点,将数据包的单独一个拷贝发送给需要的那些客户,组播不会复制数据包的多个拷贝传输到网络上,也不会将数据包发送给不需要它的那些客户,保证了网络上多媒体应用占用网络的最小带宽。但组播不仅需要服务器端支持,更需要有多播路由器乃至整个网络结构的支持。(可能对流媒体技术叙述的还不是太详细,我以后一定会研究的再写一篇关于流媒体协议的)

封装格式
(封装格式(也叫容器),就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,或者一个锅,用来盛放饭菜的容器)
avi,rmvb,mp4,flv,mkv,这些是视频下载下来的格式,也就是封装格式,所谓的封装格式就是对音视频打包成文件的一个规范

学习视音频笔记_第3张图片
封装格式.png

除了AVI之外,其他封装格式都支持流媒体,即可以“边下边播”

视频编码
所谓视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。

码率也叫比特率,表示经过压缩编码后的视音频数据每秒需要用多少个比特来表示,即把每秒显示的图像进行压缩后的数据量,一般采用的单位是kbps即千位每秒。
一般来说码率越大,处理出来的文件就越接近原始文件,但文件体积与码率是成正比的,所以几乎所有的编码格式重视的都是如何用最低的码率达到最少的失真。
声音中的比特率是指将模拟声音信号转换成数字声音信号后,单位时间内的二进制数据量,是间接衡量音频质量的一个指标。 视频中的比特率(码率)原理与声音中的相同,都是指由模拟信号转换为数字信号后,单位时间内的二进制数据量。

学习视音频笔记_第4张图片
视频编码.png

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

学习视音频笔记_第5张图片
音频编码.png

解码
就是将已转换成代码的视频文件通过对应的工具(也就是解码器)重新转换成视频的形式,然后给你播放出来,因为各种格式的视频文件虽然叫视频文件,它们本身仍旧是一段代码,只有通过特定的工具,也就是解码器将对应的代码转换成视频的形式,才能让你看见视频的内容。所以视频播放器调用解码器将视频文件解码之后才能播放出来,有时候你的播放器无法播放一段视频,就可能是因为播放器并没有相应的解码器,或者电脑里没有对应的解码器给播放器使用,所以播放失败。

因为我是iOS开发 所以又简单的了解了一下M3U8

  • M3U8是苹果专用的“视频格式”;
  • M3U8视频只能苹果设备访问,即苹果设备才能解码此类视频
  • “iPad模式”只是用“iPad的加载方式”来加载网页,因为屏蔽了flash,对方网站自然就推送HTML5页面(如果有的话)
  • 对于含有M3U8视频的HTML5网页,安卓设备不能解析和播放M3U8视频,但可以访问该网页
  • HTML5并非苹果独占,苹果独占的是某些HTML5网页里面的U3M8视频
  • 如果该HTML5网页里面没有M3U8视频,则安卓设备可以完美访问,即完美“伪装iPad”
  • 结论:“伪装iPad”就是叫对方网站推送HTML5版的界面给我们,而不是访问iPad专用资源,如果对方资源全是M3U8,即便伪装iPad,安卓平板也不能拿下。
    不过 我上网查了下安卓也可播放,不过 Android原生系统好像是不支持m3u协议的,所以一般情况要继承第三方的播放器,百度或者vatimio 使用参考各自的api文档即可比较简单。

以上内容只是简单了解了,视频播放编解码的流程,而且是参考了许多大神们的笔记,对我很有帮助,我也只是大神们的搬运工 嘿嘿 我会努力多研究的 有所不对 欢迎指正

你可能感兴趣的:(学习视音频笔记)