ST7109 音视频码流的播放与同步.doc_第1页
ST7109 音视频码流的播放与同步.doc_第2页
ST7109 音视频码流的播放与同步.doc_第3页
ST7109 音视频码流的播放与同步.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品论文推荐st7109 音视频码流的播放与同步纪执明 北京邮电大学,北京 (100044) e-mail:摘要:随着网络技术与多媒体技术迅速发展和相关硬件芯片处理能力的提高,iptv 作为 一项新兴的业务,已经进入到实际的商业运营阶段。作为一种基于 st7109 芯片的 iptv 机顶盒设计方案,流媒体播放器是其中最重要组成部分。本文简单介绍了 iptv 流媒体播放器 通过网络和 rtp 协议获取音视频媒体 es 码流帧数据的过程;叙述了 st7109 芯片及调用相应 api 函数播放音视频码流的过程;最后提出并实现了 st7109 芯片按帧播放媒体码流数据, 并对相关音视频码流数据的播放进行同步控制的方案。关键词:iptv;机顶盒;st7109中图分类号:tn949.1971. 引言随着多媒体技术和ip网络技术的发展,iptv作为一种宽带网应用业务,拥有更强的交 互性和实时性,并能够比传统的数字电视提供更多的扩展业务。iptv还能与现有ip网络应 用无缝融合,充分利用现有internet网络资源和各种网络技术,提供更丰富的用户体验。iptv 业务的发展,能够极大的推动三网融合,符合未来网络的发展趋势。iptv 利用宽带互联网基础设施,以 iptv机顶盒+电视机,或以 pc 机作为主要接收 和显示终端,通过因特网协议向用户提供交互数字电视等多媒体业务的技术1。iptv基本业务包括宽带多媒体点播业务与宽带多媒体直播业务和宽带信息访问业务2。 其中音视频码流的直播与点播,要求能够从网络实时获得音视频码流数据,并使用硬件芯片 对码流进行同步解码和播放。本文属于iptv机顶盒项目软件部分,机顶盒采用st公司的st7109芯片。支持mpeg1/2/4, h264,vc1与mp3,aac,ac3等众多音视频格式的解码,并支持最大幅度为1920-1080i的 高清视频码流的播放,系统的实际运行环境为stlinux 2.2。机顶盒的媒体播放器,需要调用硬件api对相关码流进行网络接收,并对码流进行解码 和显示。本文介绍使用st7109芯片对接收到的音视频es(elementary stream)码流播放与同步 方案。2. 码流的接收与获取 iptv机顶盒要求能够通过网络,和本地文件获取码流和相应的信息。 此iptv机顶盒媒体播放器支持rtsp4/sdp5、与rtp/rtcp6协议栈,通过ip网络,获得音视频es码流数据。机顶盒的媒体播放器,使用rtsp协议获取码流的sdp描述信息,并对流媒体会话进行 播放控制。sdp用于描述会话和传输媒体码流的相关信息。对每一种类型的媒体流,都有相 关ietf rfc文档定义sdp描述格式和rtp负载格式(rtp playload format)。媒体服务器与机顶盒客户端,对需播放的每一条音视频码流,都要根据rtsp的协商, 在相应的端口,建立一个rtp会话。es码流的媒体数据作为rtp的负载,发送到用户接收端。 而对每一种类型的码流都要符合相应的rtp负载格式规范。一般来说音视频码流都以帧为单位,并根据网络mtu的大小,按照rtp负载格式规范将-5-媒体数据进行打包,并填写相应的rtp负载头,并通过网络发送打包后的数据。打包可以每包多帧,或多帧一包,体现了多媒体传输协议的应用层分帧的原则。 当客户端接收到音视频码流后,需要对码流解分组,分析rtp负载头等相关信息,并在缓冲区中等待一定时间后,对接收到的es数据进行解码并播放。rtp数据包,按解码次序发送,包头中规定的包的序列号,标识包中媒体数据的发送和 解码的次序。查看rtp包的序号,可以确定是否丢包。rtp包头中也定义的显示时间戳,用 于码流的流内同步。而媒体服务器发送rtcp sr(sender report)报文中,定义了rtp时间戳 和ntp时间的对应关系。通过rtp报文获得音视频数据。在其rtp header中伴随着rtp时间戳,可以获得视频帧 在流内的相对播放时间,用于流内同步。而与rtcp时间ntp作对比,可以获得的绝对播放 时间,用于流间同步。对每一条rtp连接,都要建立相应的rtcp连接。rtcp的主要作用,就是反馈传输质量 如:丢包率,延时抖动等;获得流间同步的时间信息;并获得媒体会话参与者标识cname 等。根据以上过程,我们通过rtsp与rtp/rtsp获取参与多媒体会话的每一条音视频码流的 相应码流及其播放时间。3. 码流的解码与播放播放器播放器使用st7109硬件芯片对音视频码流进行解码和播放。我们编写硬件适配 层,调用st提供的api对音视频视频进行解码和播放。播放过程如下。(1)调用init函数,对相关设备进行初始化。包括音视频设备(stvid,staud),显示 层(layer)等。(2)调用open函数,打开相关设备句柄,每个设备可以打开一个/多个句柄。(3)调用setup函数设置相关设备进行设置,播放参数,并设置播放的格式。对设备事 件注册回调处理函数,处理设备同时用户的消息。(4)调用start函数开始进行解码和播放。(5)向音视频解码设备注入码流数据(6)当设备使用完毕,调用stop函数停止播放。调用close 函数,关闭设备句柄。(7)调用term函数关闭设备。图1 stvid设备播放过程具体st芯片播放音视频码流的过程,请参考st提供的相应文档,和相关api测试代码。 音视频播放过程中,需要将压缩过的es码流数流输入芯片进行解码和播放。 由于es码流,使用rtp协议从网络中获得媒体es数据,经解分组后,以帧为单位。需要向解码芯片,按帧输入数据。st提供的api没有对以帧为单位注入音视频码的支持,需要自己修改或增加相应的api 函数。此api函数工作于stlinux的内核模式,并提供ioctl调用的接口。在stlinux的用户模 式下,使用类似stapi的函数进行封装,供应用程序调用。增加的api函数工作流程为:在内核模式中,调用stvid相应api可以获得st7109芯片待解码缓冲区的首地址及缓冲区大小。此缓冲为固定长度的循环使用的缓冲区,需要上层系 统不断向缓冲区写入媒体数据,只要视频设备处于工作状态,就会自动对其进行解码和播放。 使用此缓冲区,需要初始化读写指针,并设置系统回调函数,用于告知系统待解码缓冲区中 写指针的位置,并获得硬件系统读指针的位置,以防止覆盖未处理数据。这样就解决了st芯片对于es码流的按帧输入问题,并机顶盒可以顺利播放从网络通过rtp协议接收的音视频码流。4. 硬件播放码流的同步 iptv业务要求对同一节目的音视频码流,在时域上达到流内同步和流间同步的要求。 如第二节所述,我们可以从rtp/rtcp协议,获得音视频码流帧数据,及其相应的显示(播放)时间。此时间均为相对于系统开始启动播放码流的绝对时间。而st7109对es码流并没有提供函数,可以直接将媒体数据和显示时间同时传入系统。为了利用st设备本身的同步 机制,我们利用st7109对mpeg2 pes7码流的播放能力,达到音视频码流的同步播放的目 的。pes包头格式如图2所示:byte 0byte 1byte 2byte 3byte 4byte 50000 0000 0000 0000 0000 0001start codestream idpes packet lengthbyte 67654321010pes scrambling controlpesprioritydata alignment indicatorcopyrightoriginal or copybyte 7byte 87654321076543210pts dtsflagsescr flages rate flagdsm trick mode flagadditional copy infoflagpes crcflagpesextension flagpes header data length76543210765432107654321076543210765432100010pts32.301pts 29.151pts 14.001同步过程如图3所示为: 第一步:初始化设置相关参数。图2 pts包头格式我们将stvid和staud设备参数设置为播放pes码流模式,并设置相关同步参数。设置同步模式。stvid设备设置为手动同步,staud设备设置为自动同步, 原因见下文。第二步:告知解码器音视频数据帧的播放时间。 机顶盒通过调用硬件设备对码流进行播放和控制。帧数据注入到解码器已经在上节描述,而此帧码流的播放时间,需要以某种方式告知解码器。 因为芯片对mpeg相关系统层标准支持较好,我们通过将帧数据打成pes包的形式,将数据的播放时间告知解码器,并调用相应的api对其进行同步。pes包头中含有pts dts flags,可以将pts即码流的显示时间戳,频率为90000hz,即 每秒增长900000。将pts dts flags 设置为10,则不用设着码流的解码时间戳dts。将码流的播放时间, 翻译成pts时间戳,填充到包头中,并注意设置包头中指定的数据大小,包括包头和码流数 据两部分之和,还有注意pes packet length需要减去包头前六字节。填充好pes包头的数据后,将接收的码流数据作为负载,添加到pes包头后面。将pes码流帧注入到解码器中。这样,stvid设备就可以得知具体的视频帧播放时间。 而st相关音视频解码设备可以对pes包进行加码和分析,从而可以理解pes包头中的码流播放时间,从而能够对其进行播放同步的控制。 第三步:设置系统的stc时间。 stclkrv是stapi各个模块中,负责音视频播放时间与同步相关的设备。 因为pes码流数据中没有同步系统stc的数据。当我们通过填写pes包头,告知解码器播放时间后。我们需要通过stclkrv设备,设置整个系统的stc时间,即设置其播放系统 的基准时间,解码器将pes中的pts时间与系统stc时间比较,决定其播放的时机。在码流播放设置阶段,我们对设备事件注册回调处理函数,处理设备同时用户的消息。 对于设置系统的stc基准时间,我们关心解码器成功解码码流第一帧的st设备相关消息。当我们获得系统的成功解码并即将播放的第一帧(音视频)数据后,通过相应的st音 视频事件。我们可以得到此帧写入的pes包包头的头的pts时间戳。此时可以调用相应stclkrv函数,设置系统stc时间为此时间,音视频设备开始对码流进行播放。 这样,当系统正确设置好其stc时间后,系统就可以利用pts和stc时间。在音视频帧应播放的时间(pts=stc)播放音视频码流。就可以达到同步音视频码流的目的。 第四步:调整系统不同步。 同步行为分为手动和自动两种方式。自动方式为系统自动对超过同步时限的帧,进行同步调整。 而手动同步方式为,当系统检测到不同步现象。由编程者手动调用函数进行同步调整。因为视频采用自动同步方式时,在出现不同步现象时,只能调整一帧,而对失步现象如 果出现多帧的情况后,则自动同步方式不能进行处理。从而出现停止解码器解码播放的情况。 因此我们采用手动方式,调节失步。手动调整,要求通过stvid的同步检查事件可以获得失去同步造成的时间偏差。然后调 用stvid设备的相关函数,进行暂停或跳过播放相应的时间的视频帧,来达到码流的重同步目的。而音频数据选择自动调整方式,芯片系统会自动对不同步状况进行调整。5. 总结图3 st7109媒体播放与同步本文提出的st7109硬件适配层方案,经实现能够使st7109按帧播放从网络或本地文件 中获取的音视频码流数据,并能够照其显示时间戳同步对码流进行播放,成功解决码流数据 的注入和音视频码流的流间同步问题,为进一步对播放器软件进行优化打下了良好的基础。参考文献1 徐俭. iptv 机顶盒技术浅析. 新媒体技术j. 2006, 04: 31-342 中国网络通信集团公司. 中国网通 iptv 体系架构技术规范(version1.0)s. 北京: 中国网通, 2006 3 蔡安妮, 孙景鳌. 多媒体通信技术基础m. 电子工业出版社, 2000.84 schulzrinne h, rao a, lanphier r. real time streaming protocol (rtsp)s. rfc 2326. 1998 5 handley m, jacobson v. sdp: session description protocols. rfc 2327. 19986 schulzrinne h, casner s l. a transport protocol for realtime applications(rtp)s. rfc 3550. 20037 coding of audio-visual objects-part 1: systemss. iso/iec 14496-1 international standard, iso/iec jtc1/ sc29/wg11 n2501, 2000-03audio and video elementary stream playback ands

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论