【转】播放器基本原理(播放四步法)

简述

播放视频前得知道要播放的视频是什么格式的,所以第一步是数据接收。接受完数据后,需要对视频做一个解复用(demux)的处理,分解为图像轨道(track)、音频轨道、字幕轨道。分解完之后,则需要进行解码,图像解码、音频解码,解码完才是输出,调用显示设备播放。

一、数据接收

播放器的模型其实就是输入输出模型,输入的是视频文件,如MP4文件,或者http/httpLiveStream(http流),还有rtp数据包(直播),ftp,ts(电视广播)等。视频文件的封装格式,简单理解为后缀,其实就是容器类型,为什么叫容器,后文会谈到。下表列出了常见的容器类型,普通用户最常见的是.mp4文件,而宅男用户最常见的是.avi文件??

视频容器类型说明
avi(audio video interleave)微软出品
wmv微软出品
mp4mpeg组织
tsmpeg组织,一般用于数字电视广播
mkv某开源组织
rmvb/rmRealNetworks公司,私有标准不公开
flvadobe 保护版权用

不同的容器类型,每一种容器的头部信息都是不同的,头部信息包括视频时长、创建时间等基本信息。所以数据解析这一步,就是统一一个接口,来处理不同的数据来源。提供不同的数据包解析器,将接收到的数据解成相应的容器类型。
ffmpeg中的AVFormatContext有个方法:avformat_open_input就是用来做数据解析用的,解析完的数据通过context可以拿到。

二、容器解析(解复用demux)

得知视频容器的类型之后,就可以对其进行解复用了。为什么要进行解复用,得先了解复用(mux)的过程。复用的结果是生成一个视频容器,即某一种格式(如mp4)的视频。
每一个视频文件中,其实都包含了多种轨道(track),图像的轨道就是我们看到的画面,音频轨道就是我们听到的声音,而字幕轨道就是显示出来的字幕。如果视频文件不用经过传输,那这几个轨道的资源(resource)其实可以不用经过复用而合成到容器里。正是由于要传输,所以必须把不同轨道的资源集中在一起,然后经过网络或者其他方式传输到目的地。所以,复用的过程就是将多个轨道的资源合成为一个容器。
所以解复用的过程,就是将视频文件中的多个轨道给分解出来。不同的容器需要不同的解析器,比如mp4和flv的解复用就要用不同的解析器。
在ffmepg中,解复用所需的信息其实都由上一步获得的context提供,然后调用不同的demux接口,对音频轨道和图像轨道进行分离。

三、数据解码

第二步一般会产生图像、声音、文本三种不同轨道。图像会有大小,声音也会有大小,如果不对图像和声音进行编码处理,对视频的传输会带来非常大的阻碍。所以数据解码这一步,做的视频就是将经过编码后传输的图像轨道和声音轨道进行解码。编解码也有各种格式。下表列出了常见的几种格式。

编码格式应用场景说明
mpeg-1vcdmpeg最初的版本
mpeg-2DVDmpeg
mpeg-4mp4随计算机运算能力增强后逐渐产生的
h.264everywherempeg和itu-t练手组成JVT(joint video team)制定 avc/mpeg part 10
vc-1nullnull
realvideonull私有标准

其中最需要关注的就是h.264,目前绝大多数视频编解码的格式。编码格式涉及到的I帧,P帧,B帧,分别对应帧内解码,帧间预测,双向预测的编解码方式。

四、数据输出

视频解码后通常是yuv的数据,音频则通常解为pcm文件,对这些文件的读取和还原,就是外接设备的事情了,输出给外接设备即可正常播放视频。具体外接设备怎么解析这些数据,就不在本文的讨论范围内了。

from :http://www.jianshu.com/p/82e778eb618b

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值