博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
视频文件回放原理
阅读量:4319 次
发布时间:2019-06-06

本文共 1741 字,大约阅读时间需要 5 分钟。

转自:

一、知识点

 

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个图象, 就在这一个音频包完成的过程中按帧率显示图象)

 

视频编解码器 :  

视频文件格式 :  
参考 : 

A Simple Media Player based on the FFmpeg libraries — ffplay

ffplay.c – File Reference : 

ffplay.c : 

转载于:https://www.cnblogs.com/boonya/p/8487779.html

你可能感兴趣的文章
更换pip源到国内镜像,提升pip下载速度.
查看>>
Kendo MVVM 数据绑定(七) Invisible/Visible
查看>>
插入返回ibatis 的selectKey 实现插入数据后获得id
查看>>
解决win7下打开Excel2007,报“向程序发送命令时出现问题”的错误
查看>>
Win form碎知识点
查看>>
避免使用不必要的浮动
查看>>
第一节:ASP.NET开发环境配置
查看>>
sqlserver database常用命令
查看>>
rsync远程同步的基本配置与使用
查看>>
第二天作业
查看>>
访问属性和访问实例变量的区别
查看>>
Spring MVC 异常处理 - SimpleMappingExceptionResolver
查看>>
props 父组件给子组件传递参数
查看>>
【loj6038】「雅礼集训 2017 Day5」远行 树的直径+并查集+LCT
查看>>
十二种获取Spring的上下文环境ApplicationContext的方法
查看>>
UVA 11346 Probability 概率 (连续概率)
查看>>
linux uniq 命令
查看>>
Openssl rand命令
查看>>
HDU2825 Wireless Password 【AC自动机】【状压DP】
查看>>
BZOJ1015: [JSOI2008]星球大战starwar【并查集】【傻逼题】
查看>>