简述

播放视频前得知道要播放的视频是什么格式的,所以第一步是数据接收。接受完数据后,需要对视频做一个解复用(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

【转】播放器基本原理(播放四步法)相关推荐

  1. 【Android FFMPEG 开发】OpenSLES 播放音频 ( 创建引擎 | 输出混音设置 | 配置输入输出 | 创建播放器 | 获取播放/队列接口 | 回调函数 | 开始播放 | 激活回调 )

    文章目录 I . FFMPEG 播放视频流程 II . OpenSLES 播放音频流程 III . OpenSLES 播放参考 Google 官方示例 IV . OpenSL ES 播放代码 ( 详细 ...

  2. C# 视频监控系列(13):H264播放器——控制播放和截图

    C# 视频监控系列(13):H264播放器--控制播放和截图 前言 本该把这部分和上一篇合成一篇的,无奈挣扎半天,还是想对称起来,客户端3篇.服务器端3篇--所有播放器也勉强凑3篇吧(封装API的文章 ...

  3. Android中调用系统已安装的播放器来播放网络流媒体视频

    2019独角兽企业重金招聘Python工程师标准>>> 实现思路比较简单几行代码就可以搞定,在界面放一个Button或者带有播放图标的imageview,点击事件中调用本地播放器来播 ...

  4. Android实现控制第三方音乐播放器暂停/播放

    实现控制第三方音乐播放器思路: 1.参考方法:可能实现第三方音乐播放器暂停/播放/下一曲/上一曲 思路:android模拟发送键值,就像蓝牙耳机等远程设备切换歌曲操作,但是行不通.原因是现在Andro ...

  5. 网络摄像头无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理?

    EasyPlayer播放器系列项目提供了非常简单易用的SDK及API接口,用户通过API调用就可以非常快速地开发出属于自己的应用程序,进行第二次开发.新版的EasyPlayer因为支持H265网页播放 ...

  6. jsp网页嵌入PHP网页,JSP_(jsp/html)网页上嵌入播放器(常用播放器代码整理),这个其实很简单,只要在HTML上 - phpStudy...

    (jsp/html)网页上嵌入播放器(常用播放器代码整理) 这个其实很简单,只要在HTML上添加以上代码就OK了,前提是你的电脑上已经安装了播放器,如RealPlay. 还有更多的的播放器和设置可供选 ...

  7. 鸿蒙系统怎样去掉下拉音乐播放器,windows10系统下怎样取消音乐播放器默认播放器...

    一位用户反馈自己的windows10系统电脑中,默认音乐播放器是百度音乐,因为自己并不喜欢用百度音乐来播放歌曲,就想将其取消掉.这该如何操作呢?接下来,就随小编看看windows10系统下取消音乐播放 ...

  8. openGL ES进阶教程(五)制作一个简单的VR播放器,播放全景视频

    之前写过全景(VR)图片,和用openGL ES+MediaPlayer 渲染播放视频+滤镜效果 这一篇就在之前的基础上实现一个最简单的VR播放器,播放全景视频. 概述: 全景视频是一种用3D摄像机进 ...

  9. 多个VLC播放器同步播放本地VCam视频流

    多个VLC播放器同步播放本地VCam视频流 配置如下: 下载安装VLC播放器,VCam虚拟摄像头 VCam打开一个视频文件 VLC设置捕获设备选择适配设备名称为e2esoft VCam:然后点击播放 ...

  10. Win10系统播放器无法播放视频怎么办【系统天地】

    Win10自带的视频播放器叫做"电影和电视",简洁轻巧,如果没有安装第三方视频播放器,那么"电影和电视"也是个不错的选择,不过有时受其他软件或情况的影响,播放器 ...

最新文章

  1. 摄像头Camera标定Calibration原理Theory
  2. 8086汇编-实验10-字符打印程序
  3. times(NULL) Segmentation fault
  4. 110-简单类型之整数类型和小数类型
  5. 大白菜UEFI版制作u盘启动盘使用教程
  6. android 后台代码设置动画
  7. 谈谈出入React框架踩过的坑
  8. 爬虫的一些知识点 目录 1. 网络爬虫 1 2. 产生背景 垂直领域搜索引擎 2 3. 1 聚焦爬虫工作原理以及关键技术概述 3 4. 涉及技术 3 4.1. 下载网页 一般是通过net api
  9. 多缝夫琅禾费衍射matlab,用matlab实现夫琅禾费多缝衍射代码
  10. face_recognition库的使用
  11. 韩国严厉监管元宇宙相关企业
  12. java se1.6配套Jdk,javase 1.6与jdk1.6
  13. Jeesite4图片上传
  14. 马云谈大数据:数据时代的“五个新” 做好准备
  15. 确定有限自动机(DFA)和不确定有限自动机(NFA)的主要区别
  16. 达梦dmrman dmap备份报[-7103]:创建命名管道失败
  17. 华为云数据库SQL Server 上云最佳实践
  18. vue 定位所在地_vue使用高德地图,精确定位ip定位,获取城市、地区位置
  19. 计算机考试老师怎么评卷,详解高考电脑阅卷流程,原来老师看到的试卷是这样的!...
  20. idea替换区分大小写

热门文章

  1. python发音机器人_python qq机器之 使用阿里云语音合成让机器人发送好听到炸裂的语音...
  2. 如何使用TestFlight进行Beta测试(AppStore iTunesConnect发布的好东东)
  3. background-repeat: no-repeat;
  4. Backtrader:继续学习,把通达信的mace交易指标公式改为Backtrader交易策略
  5. pyhon_selenium_火狐实现网页自动化点击代码
  6. 联想电脑欲重返手机市场,首款机型揭秘
  7. 消息传递通信的实现方式
  8. 03-官方种子项目,目录,文件介绍
  9. arm汇编指令ldr用法总结
  10. Oracle中用exp/imp命令快速导入导出数据