FFMpeg对MPEG2TS流解码流程分析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
FFMpeg对MPEG2TS流解码流程分析

FFMpeg对MPEG2 TS流解码的流程分析1.引子gnxzzz广告都打出去了,不能没有反应.现在写东西很少了,一是年纪大了,好奇心少了许多,;二则是这几天又犯了扁桃体炎,每天只要是快睡觉或刚起床,头晕脑涨,不过功课还是的做的,是吧:)2. 从简单说起说道具体的音频或者视频格式,一上来就是理论,那是国内混资历的所谓教授的做为,对于我们,不合适,还是用自己的方式理解这些晦涩不已的理论吧。其实MPEG2是一族协议,至少已经成为ISO标准的就有以下几部分:ISO/IEC-13818-1:系统部分;ISO/IEC-13818-2:视频编码格式;ISO/IEC-13818-3:音频编码格式;ISO/IEC-13818-4:一致性测试;ISO/IEC-13818-5:软件部分;ISO/IEC-13818-6:数字存储媒体命令与控制;ISO/IEC-13818-7:高级音频编码;ISO/IEC-13818-8:系统解码实时接口;我不是很想说实际的音视频编码格式,毕竟协议已经很清楚了,我主要想说说这些部分怎么组合起来在实际应用中工作的。第一部分(系统部分)很重要,是构成以MPEG2为基础的应用的基础. 很绕口,是吧,我简单解释一下:比如DVD实际上是以系统部分定义的PS流为基础,加上版权管理等其他技术构成的。而我们的故事主角,则是另外一种流格式,TS流,它在现阶段最大的应用是在数字电视节目的传输与存储上,因此,你可以理解TS实际上是一种传输协议,与实际传输的负载关系不大,只是在TS中传输了音频,视频或者其他数据。先说一下为什么会有这两种格式的出现,PS适用于没有损耗的环境下面存储,而TS 则适用于可能出现损耗或者错误的各种物理网络环境,比如你在公交上看到的电视,很有可能就是基于TS的DVB-T的应用:)我们再来看MPEG2协议中的一些概念,为理解代码做好功课:ES(Elementary Stream):wiki上说“An elementary stream (ES) is defined by MPEG communication protocolis usually the output of an audio or video encoder”恩,很简单吧,就是编码器编出的一组数据,可能是音频的,视频的,或者其他数据说到着,其实可以对编码器的流程思考一下,无非是执行:采样,量化,编码这3个步骤中的编码而已(有些设备可能会包含前面的采样和量化)。关于视频编码的基本理论,还是请参考其它的资料。PES(Packetized Elementary Stream):wiki上说“allows an Elementary stream to be divided into packets”其实可以理解成,把一个源源不断的数据(音频,视频或者其他)流,打断成一段一段,以便处理.TS(Transport Stream):PS(Program Stream):这两个上面已经有所提及,后面会详细分析TS,我对PS格式兴趣不大.3. 步入正题才进入正题,恩,看来闲话太多了:(,直接看Code.前面说过,TS是一种传输协议,因此,对应到FFmpeg,可以认为他是一种封装格式。因此,对应的代码应该先去libavformat里面找,很容易找到,就是mpegts.c:)还是逐步看过来:[libavformat/utils.c]int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,AVInputFormat *fmt,int buf_size,AVFormatParameters *ap){int err, probe_size;AVProbeData probe_data, *pd = probe_data;ByteIOContext *pb = NULL;pd-filename = ;if (filename)pd-filename = filename;pd-buf = NULL;pd-buf_size = 0;#########################################################################【1】这段代码其实是为了针对不需要Open文件的容器Format的探测,其实就是使用AVFMT_NOFILE标记的容器格式单独处理,现在只有使用了该标记的Demuxer很少,只有image2_demuxer,rtsp_demuxer,因此我们分析TS时候可以不考虑这部分#########################################################################if (!fm

文档评论(0)

ktj823 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档