ts流解析毕业论文(TS流文件的概述)

1.TS流文件的概述

DVD节目中的MPEG2格式,是MPEG2-PS,全称是Program Stream,TS的全称则是Transport Stream。MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。这两种格式的主要区别是什么呢?你将DVD上的VOB文件的前面一截剪掉(或者干脆就是数据损坏),那么就会导致整个文件无法解码,而电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。

2.数字电视里面的TS流是个什么概念

MPEG-2(Moving Picture Exports Group)作为一个关于运动图像压缩的国际标准.于1988年成立。

MPEG-2 Ts流只是MPEG-2格式种类中的一种,其英文全称是(MPEG-2 Transport Stream) 这已经成为数字电视领域中普遍应用的系统层编码标准。传输流针对有一定误码信道的传输,可以将多路节目复合成一个流进行传输,它允许同一路节目包含多个音频和视频流,同时也可以加入一些附加信息。

传输流具有固定的包长188字节。它的结构是极其复杂的,对用户来说,针对一个特定的流,首先要知道其由哪些PID(Packet ID)的包构成。

MPEG-2定义了一些用来描述传输流所携带内容的信息表,称为节目特定信息(PSI)表,包括4个与之相关的表。其中,节目关联表PAT和节目映射表PMT是确定当前传输流中各节目内容的最关键的两个表。

我国目前采用的DVB标准是欧洲各国采用的数字电视标准,基带数据格式采用MPEG-2标准,即视频和音频编码以及码流的复用均符合MPEG-2标准。DVB标准对PSI进行扩展后统称为服务信息即SI。

这些信息以及传输流的规范性对于正确接收数字电视节目是至关重要的。 数字电视系统的集成是一项庞大复杂的工程,为了在开发中迅速有效地找出故障源、解决问题,经常需要对数字电视码流进行分析。

此外码流测试技术更为广泛的应用在对数字电视网络的监测中。由于TS是经过压缩的信号数据间的相关性很小,而且TS流有着严格的数据格式,因而很小的误差都将导致图像质量的急剧下降甚至无法解码,因此必须对信号进行监测。

为此我们开发了这个通用的传输流分析模块,它可以分析包括节目信息、码率、带宽分配、PCR精度和缓冲区溢出等在内的各种码流相关信息,同时还可以进行ETR290相关参数的测试,由于在设计时充分采用了模块化设计的思想,该模块可以配合各种获取数据的模块共同工作从而完成不同环境下的传输流分析工作。此外为验证分析模块的功能,我们开发了TS文件的静态分析系统,以下着重介绍分析模块的设计和实现以及该模块在系统中的应用。

设计思想 在功能上,整个分析模块完成对码流各种信息的分析和ETR290参数的测试。码流信息的分析包括:基本信息、节目信息、带宽信息、音视频信息、复用结构、PCR信息和缓冲区信息等部分。

其中基本信息包含了流的速率、流ID、提供者的名称等基本信息;节目信息包含了传输流中各个节目的名称,PID(Packet ID)分配,节目速率,节目单等信息;带宽信息包含了各个PID所占的带宽;音视频信息包含了流中音视频相关的各种信息;复用结构显示了流中各个节目的复用情况;PCR信息显示了流中各个PCR的精度和间隔;缓冲区信息包含了虚拟解码器(STD)在解码当前流时各个缓冲区的状态。除了这些信息之外,模块完成了ETR290参数的测试,这些参数是DVB标准的制定者在官方文档中给出的一系列测试的参数,其一般目标是对TS流中的最重要的元素提供“健康测试”,根据重要性以及不同的性质,这些推荐测试的参数被分为3个优先级,其中:第一个优先级集中了一套基本的参数,这些参数保证ts流能够被解码;第二个优先级集中了一些附加参数,这些参数推荐用来进行连续性检测;第三个优先级集中了一些特定应用可能感兴趣的参数。

模块在设计上希望能够保持通用性,即只要模块能够通过接口取得传输流的数据即可完成分析工作,实际中,为了测试分析模块的工作情况而设计了用于从文件获取数据的模块,该模块和分析模块都被设计成动态链接库即dll的形式,同时编写了用于显示结果的上层应用程序,该程序结合获取数据和分析模块即实现了一个完整的传输流静态分析系统,这里可以看出,若分析模块需要用于实时分析系统,则只要相应的获取数据的设备,例如硬件数据采集卡,提供相同功能的dll用于分析模块获取数据即可。此外,在设计中较强的可扩展性也是目标之一,希望今后能够根据需要灵活方便的增加更多的分析功能。

以下将以上述静态分析系统为载体说明分析模块的设计和实现以及在实际系统中的位置和作用。 现目前多节目、单节目、高清、标清、卫星节目、HDTV节目等各种类型TS流进行了测试,结果显示该模块工作正常、结果正确,同时,由于通过文件的码率和大小即可得知文件所对应传输流的实时持续时间,因而通过分析完成静态测试所用的时间同样可以得知该模块用于实时分析时的工作效率,实验表明,该模块具有较好的效率,能够用于静态和实时分析等各种场合,具有较好的通用性和可扩展性。

目前应用该分析模块的分析系统已经应用于实验室数字电视产品的辅助开发中,并发挥了很大的作用。 此格式现多用于电视台和教育系统。

3.TS流文件的概述

DVD节目中的MPEG2格式,是MPEG2-PS,全称是Program Stream,TS的全称则是Transport Stream。MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。这两种格式的主要区别是什么呢?你将DVD上的VOB文件的前面一截剪掉(或者干脆就是数据损坏),那么就会导致整个文件无法解码,而电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。

4.ffmpeg分析 之 如何解析mpegts流

AVInputFormat mpegts_demuxer = { "mpegts", NULL_IF_CONFIG_SMALL("MPEG-2 transport stream format"), sizeof(MpegTSContext), mpegts_probe, mpegts_read_header, mpegts_read_packet, mpegts_read_close, read_seek, mpegts_get_pcr, .flags = AVFMT_SHOW_IDS|AVFMT_TS_DISCONT,};mpegts_probe:这函数一看就知道是检测数据格式是不是mpegts格式的。

mpegts_read_header:读数据头信息,比如在ts流当中的数据包大小,还ts流中的节目信息,sdt表,pmt表,video pid,audio pid等等,以便后面读数据时使用。/* read the first 1024 bytes to get packet size */pos = url_ftell(pb);len = get_buffer(pb, buf, sizeof(buf));if (len != sizeof(buf)) goto fail;ts->raw_packet_size = get_packet_size(buf, sizeof(buf));if (ts->raw_packet_size probesize);/* if could not find service, enable auto_guess */ts->auto_guess = 1; 上面这几行代码是扫描节目信息,首先mpegts_scan_sdt当中调用mpegts_open_section_filter设置了一个SDT表的filter,SDT表当中会有节目的名子,提供商名子等等。

接着在mpegts_set_service当中又设置mpegts_open_section_filter设置了一个PAT表filter,PAT表当中会存放节目的SID, PMT_PID,从而可以取到对应的PMT表,然后解板出VIDEO PID, AUDIO PID来,handle_packets就不用看了,上面设置了filter,这里紧跟着就得让filter工作起来了。pat_cb: …… av_new_program(ts->stream, sid);ts->stop_parse--;mpegts_open_section_filter(ts, pmt_pid, pmt_cb, ts, 1);add_pat_entry(ts, sid);add_pid_to_pmt(ts, sid, 0); //add pat pid to programadd_pid_to_pmt(ts, sid, pmt_pid);……pmt_cb:……/* now create ffmpeg stream */switch(stream_type) {case STREAM_TYPE_AUDIO_MPEG1:case STREAM_TYPE_AUDIO_MPEG2:case STREAM_TYPE_VIDEO_MPEG1:case STREAM_TYPE_VIDEO_MPEG2:case STREAM_TYPE_VIDEO_MPEG4:case STREAM_TYPE_VIDEO_H264:case STREAM_TYPE_VIDEO_VC1:case STREAM_TYPE_VIDEO_DIRAC:case STREAM_TYPE_AUDIO_AAC:case STREAM_TYPE_AUDIO_AC3:case STREAM_TYPE_AUDIO_DTS:case STREAM_TYPE_AUDIO_HDMV_DTS:case STREAM_TYPE_SUBTITLE_DVB: if((stream_type == STREAM_TYPE_AUDIO_HDMV_DTS && !has_hdmv_descr) || (stream_type == STREAM_TYPE_VIDEO_DIRAC && !has_dirac_descr)) break; if(ts->pids[pid] && ts->pids[pid]->type == MPEGTS_PES){ pes= ts->pids[pid]->u.pes_filter.opaque; st= pes->st; }else{ if (ts->pids[pid]) mpegts_close_filter(ts, ts->pids[pid]); //wrongly added sdt filter probably pes = add_pes_stream(ts, pid, pcr_pid, stream_type); if (pes) st = new_pes_av_stream(pes, 0); } add_pid_to_pmt(ts, h->id, pid); if(st) av_program_add_stream_index(ts->stream, h->id, st->index); break;default: /* we ignore the other streams */ break;}……得到每个video, audio的PID,然后就设置成pes filter,到这里基本上获取流的基本信息就已经结束了。

下面再来看使用最多的一个函数mpegts_read_packet:mpegts_read_packet: handle_packets 这是我们刚刚跳过去的函数。 handle_packet 这函数是处理单个包的,所以后面没有sif (tss->type == MPEGTS_SECTION) { ……write_section_data(s, tss, p, p_end - p, 0); ……} else { // Note: The position here points actually behind the current packet. tss->u.pes_filter.pes_cb(tss, p, p_end - p, is_start, pos - ts->raw_packet_size); } 处理每一个包,如果是section包,就调用write_section_data,这个函数里面如果一个PAT, PMT, SDT表已经构成,则会调用刚刚看到的pat_cb, pmt_cb, sdt_cb,分析到这里,已经不用再管section包了,只看pes包,所以一般会调用tss->u.pes_filter.pes_cb,这个函数指针到底是什么呢?在函数add_pes_stream里面可以看到,mpegts_open_pes_filter函数的一个参数mpegts_push_data就是这里的tss->u.pes_filter.pes_cb,好,跟到这个函数里面瞧瞧。

mpegts_push_data: ……while (buf_size > 0) { switch(pes->state) { case MPEGTS_HEADER: case MPEGTS_PESHEADER_FILL: case MPEGTS_PAYLOAD: ts->stop_parse = 1; return; ……ts->stop_parse = 1意味着一个pes包构成了,所以上面的函数mpegts_read_packet就返回了,这样,一个pes包送上去了,再送到codec去解码,最后送去video或audio输出设置显示了。由些可以看到ts流和avi, mkv这些一样,都是一个容器,真真的数据都是包含在其中的一个一个的串流。

5.linux 有什么ts流的分析工具吗

没有涉及太多概念,也没有详细介绍这些概念,但并不代表作者对此不了解,也不代表作者对此很精通。

如文中提到的input,虽只出现一个单词,但是相信许多人都知道它在文中指的是Linux操作系统下的input子系统,该子系统不简单,看三天三夜也未必能全面掌握。作者水平有限,真正接触tslib不超过一周,错误在所难免,欢迎指正(可在文后留言,亦可在本站搜索作者联系方式)。

本文不涉及tslib的移植,如果感兴趣,可以看看这篇文章(有图有真相):Linux移植随笔:终于解决Tslib的问题了运行ts_test,在触摸屏上方显示三个按钮,按钮正文显示两行信息(效果图可参考上面给出的链接文章),当用笔触摸屏幕时,屏幕上有相应的显示(取决于“Drag”和“Draw”按钮),终端上会显示一些信息。一般地,没有添加任何调试信息时显示如下:1302776697.620288: 99 20 1前面两个是timeval结构体的两个成员:tv_sec和tv_usec,中间两列分别是X和Y的坐标,最后为pressure,这里可以理解成“触摸事件”,为1表示触摸笔点击了(接触)屏幕,为0表示触摸笔离开了屏幕。

我们将ts_test.c文件中的main函数分成4个部分(添加调试信息后的完整的源代码文件附于文后):。

ts流解析毕业论文

转载请注明出处众文网 » ts流解析毕业论文(TS流文件的概述)

资讯

平面设计毕业论文平面设计毕业论文(求平面设计的毕业论文)

阅读(60)

本文主要为您介绍平面设计毕业论文平面设计毕业论文,内容包括求平面设计的毕业论文,求平面设计专业,毕业论文题目及提纲,求平面设计论文、毕业论文。去百度文库,查看完整内容>内容来自用户:shanglaile10平面设计本科生毕业论文XXXXXXXX大学7>

资讯

写作毕业论文的顾虑和不安(毕业论文不足之处怎么写)

阅读(63)

本文主要为您介绍写作毕业论文的顾虑和不安,内容包括毕业论文不足之处怎么写,总是害怕毕业论文写不好,感到非常焦虑怎么办,毕业论文写作中存在的问题及对策。原发布者:李鹏亚毕业设计的不足之处【篇一:论文的创新和不足之处】论文的创新和不

资讯

毕业论文有必要写么(大学生毕业有必要写论文吗)

阅读(74)

本文主要为您介绍毕业论文有必要写么,内容包括大学生毕业有必要写论文吗,大学生必须写毕业论文吗,专科毕业时要写毕业论文吗必须写吗。通过写毕业论文,就专业范围内的某个问题进行相对深入的调查分析研究并形成文字,既可以在对毕业生做综合评

资讯

导师及毕业论文情况怎么填(毕业论文指导记录表怎么填)

阅读(74)

本文主要为您介绍导师及毕业论文情况怎么填,内容包括毕业论文指导记录表怎么填,毕业论文指导老师意见怎么写,毕业设计导师意见怎么写。第 一 次指导主要内容记录老师在授课时于我们分析了论文应该注意的事项,讲述了相关论文的格式和一些有代

资讯

平面设计毕业论文平面设计毕业论文(求平面设计的毕业论文)

阅读(60)

本文主要为您介绍平面设计毕业论文平面设计毕业论文,内容包括求平面设计的毕业论文,求平面设计专业,毕业论文题目及提纲,求平面设计论文、毕业论文。去百度文库,查看完整内容>内容来自用户:shanglaile10平面设计本科生毕业论文XXXXXXXX大学7>