一、知识点

ES流(Elementary Stream): 也叫基本码流,包含视频、音频或数据的连续码流.

PES流(Packet Elementary Stream): 也叫打包的基本码流, 是将基本的码流ES流根据需要分成长
度不等的数据包, 并加上包头就形成了打包的基本码流PES流.

TS流(Transport Stream): 也叫传输流, 是由固定长度为188字节的包组成, 含有独立时基的一个或
多个program, 一个program又可以包含多个视频、音频、和文字信息的ES流; 每个ES流会有不同的
PID标示. 而又为了可以分析这些ES流, TS有一些固定的PID用来间隔发送program和ES流信息的表格: PAT和PMT表.

(在MPEG-2系统中,由视频, 音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流)

封装 : 就是捆绑打包, 将画面视频文件和音轨文件打包在一起, 并按照一定规则建立排序和索引, 便
于播放器或播放软件来索引播放. 包括AVI \ PS(Program Stream)\ TS(Transport Stream)\ MKV(Matroska)等.

二、播放过程回放

Figure 1. 视频播放基本处理流程

①access 访问: 无需多说, 可理解为接收、获取、得到数据流

②demux 解复用: 把合在一起的音频和视频分离(还有可能的字幕)

③decode 解码: 包括音频和视频的解码

④output 输出: 也分为音频和视频的输出(aout 和 vout)

这里需要着重说明的是: demux 和 decode 部分

demux部分
我们都知道, 音视频在制作的时候实际上是独立编码的, 得到的是分开的数据, 为了传输方便必须要用某种
方式合起来, 这就有了各种封装格式. 例如, rm \ avi \ mov \ mpg 等等. 同时, 在视频播放器上demux解
复用部分也就有了他存在意义 .

他首先解析TS流的信息, 之后把分解出来的音频和视频流分别送往音频解码器和视频解码器, 进行解码操作.

decode部分
影像在录制后, 原始的音视频都是占用大量空间, 而且是冗余度较高的数据. 因此, 通常会在制作的时候就会进
行某种压缩 ( 压缩技术就是将数据中的冗余信息去除数据之间的相关性 ). 这就是我们熟知的音视频编码格式,
 包括MPEG1(VCD)\ MPEG2(DVD)\ MPEG4 \ H.264 等等. 音视频解码器的作用就是把这些压缩了的数据还原
成原始的音视频数据. 当然, 编码解码过程基本上都是有损的 .

那播放器是如何实现视频一帧一帧的播放的呢?

一般在内存中将压缩的视频帧依次解码出来(当然不可能把一个视频文件的所有压缩数据一次性装到内存中去,
而是读出一点, 然后解码出来一点), 然后一帧一帧送到显卡的显存中就能显示了.
如果机器性能跟得上(基本上不用考虑机器性能), 解一帧的时间小于帧与帧之间的正常间隔, 就能流畅的播放.  
每帧的播放是靠PTS来控制的, 解码器解完每幅图像, 都会给出该图像的PTS, video  renderer就能按图像的PTS
来安排显示.

与此同时, 别忘了音频和视频在demux之后是独立的,这就需要有一套机制把它们同步起来. 同时我们需要有一套机
制来控制速度、暂停、停止、跳进、 获取各种媒体信息、设置属性等等 .这些也就是同步控制机制来完成的事情
(基于时间戳来搞定) .简略来说, 就是以音频时间为主 (声卡有时间同步处理机制), 声音图象交错发送
视频解码时, 按当前播放时间找到对应的视频帧 (可以假设一个音频包有N个图象, 就在这一个音频包完成的过
程中按帧率显示图象)

视频编解码器 : http://zh.wikipedia.org/zh-cn/%E8%A7%86%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81%E5%99%A8
视频文件格式 : http://zh.wikipedia.org/zh-cn/%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F
参考 : http://bbs.chinavideo.org/viewthread.php?tid=1183&extra=page%3D1

A Simple Media Player based on the FFmpeg libraries — ffplay

ffplay.c – File Reference : http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/ffplay_8c.html

ffplay.c : http://cekirdek.pardus.org.tr/~ismail/ffmpeg-dssocs/ffplay_8c-source.html

视频播放器实现技术(一)相关推荐

  1. 音视频播放器关键技术探讨

    1. 常用播放器介绍 目前,市面上存在为数众多的各种各样媒体播放器,即使是被广泛使用的播放器也超过10种.这些播放器有公司的产品,也有个人爱好者出于自身兴趣推出的作品:有收费的,也有不少是免费的.目前 ...

  2. linux音视频质量,linux好用的视频播放器

    想知道在Linux上应该使用哪种视频播放器吗?我们在这里列出了Linux发行版中可用的7款最佳开源视频播放器. 您可以在Linux上观看在线流媒体服务,但是在电脑上观看电影/电视连续剧或其他视频内容还 ...

  3. WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放、播放、暂停、可拖动播放进度效果实现...

    WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放.播放.暂停.可拖动播放进度效果实现 原文:WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放.播放.暂停.可拖动播放进度效果 ...

  4. 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”九、整合阿里云视频播放器、课程评论功能、讲师详情页、课程详情页、检索功能、课程和讲师列表功能

    文章目录 一.讲师 1.分页查询接口(后端) 1.controller 2.service 3.测试 2.分页显示讲师(前端) 3.讲师详情页(后端) 1.controller 2.测试 4.讲师详情 ...

  5. python开发视频播放器_python视频播放器

    广告关闭 100GB直播流量包仅需9.9元,10TB点播流量包仅需999元,参与活动还赠移动直播SDK,短视频SDK,小程序插件等,大促100%中奖率 最近研究了python的两个gui包,tkint ...

  6. ArtVideoPlayer:一个灵活的视频播放器

    这是一个灵活的视频播放器. MediaPlayer与VideoView完全分开,可以替换为其他播放器内核,如ExoPlayer和ijkPlayer. 可以完全自定义播放器视图,我们称之为控制面板. 此 ...

  7. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  8. Android进阶:自定义视频播放器开发(下)

    上一篇文章我们主要讲了视频播放器开发之前需要准备的一个知识,TextureView,用于对图像流的处理.这篇文章开始构建一个基础的视频播放器. 一.准备工作 在之前的文章已经说过了,播放器也是一个vi ...

  9. linux开源视频播放器_什么定义了Linux的顶级开源音乐播放器?

    linux开源视频播放器 在我撰写此音乐专栏的两年左右的时间里,Linux发烧友的世界得到了发展. 出现了新的Linux发行版和开源音频播放器,旧的已经消失了,随着高质量的数字下载,新的和高质量的播放 ...

最新文章

  1. 十个效果酷炫的Linux系统操作指令(像黑客帝国般的效果~)
  2. linux ext4 img解包打包教程,解打包.img.ext4(转)
  3. c 清除 html标签,13.4. 去除HTML的标签tag:htmlRemoveTag
  4. 【渝粤教育】国家开放大学2018年春季 0269-22T文学概论 参考试题
  5. 来自阿里巴巴佛系安卓程序员的指南,专题解析
  6. python求组合数_求组合数的算法_Cppowboy's Blog - SegmentFault 思否
  7. java File类入门学习
  8. [ HNOI 2015 ] 亚瑟王
  9. 强悍书单:概率与测度论+数理统计+随机过程+金融
  10. 视频编解码硬件加速器分类
  11. Json Schema 是什么?
  12. Java Service Wrapper将java程序设置为服务
  13. mac最方便的文件管理器--Qspace
  14. 【龙芯1c库】封装CAN接口和使用示例
  15. bootstrap4.0图标使用_很不错的两款Bootstrap Icon图标选择组件
  16. 关于弹性布局flex
  17. 《拖延心理学》思维导图精华版
  18. 《Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network》阅读笔记(二)
  19. 截图翻译的方法有哪些
  20. 央行回应备付金存管办法修改:可及时监测风险 提高清算效率

热门文章

  1. (二)Activity启动模式
  2. python写彩票预测软件_初学python-练习_2使用python编写彩票软件
  3. RestEasy编写API
  4. 防火墙Little Snitch的BUG导致Mac系统受到攻击
  5. tableau:多维地图
  6. opencv python打开双目摄像头
  7. ubuntu Linux 20.04 dpkg安装vscode过程
  8. 名茶事典——【径山茶】
  9. 开学季选什么牌子蓝牙耳机好?2022学生党性价比蓝牙耳机推荐
  10. oracle awr的意义,在Oracle AWR报告中Elap的含义