码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-12-10 19:32:46      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:flv   输出   目的   mpeg   标准   int   www   保护   数字电视   

简述

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

一、数据接收

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

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

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

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

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

三、数据解码

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

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

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

四、数据输出

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

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

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

标签:flv   输出   目的   mpeg   标准   int   www   保护   数字电视   

原文地址:http://www.cnblogs.com/xuan52rock/p/6156325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!