ST7109 音视频码流的播放与同步.doc
《ST7109 音视频码流的播放与同步.doc》由会员分享,可在线阅读,更多相关《ST7109 音视频码流的播放与同步.doc(5页珍藏版)》请在三一文库上搜索。
1、精品论文推荐ST7109 音视频码流的播放与同步纪执明 北京邮电大学,北京 (100044) E-mail:摘要:随着网络技术与多媒体技术迅速发展和相关硬件芯片处理能力的提高,IPTV 作为 一项新兴的业务,已经进入到实际的商业运营阶段。作为一种基于 ST7109 芯片的 IPTV 机顶盒设计方案,流媒体播放器是其中最重要组成部分。本文简单介绍了 IPTV 流媒体播放器 通过网络和 RTP 协议获取音视频媒体 ES 码流帧数据的过程;叙述了 ST7109 芯片及调用相应 API 函数播放音视频码流的过程;最后提出并实现了 ST7109 芯片按帧播放媒体码流数据, 并对相关音视频码流数据的播放进
2、行同步控制的方案。关键词:IPTV;机顶盒;ST7109中图分类号:TN949.1971. 引言随着多媒体技术和IP网络技术的发展,IPTV作为一种宽带网应用业务,拥有更强的交 互性和实时性,并能够比传统的数字电视提供更多的扩展业务。IPTV还能与现有IP网络应 用无缝融合,充分利用现有Internet网络资源和各种网络技术,提供更丰富的用户体验。IPTV 业务的发展,能够极大的推动三网融合,符合未来网络的发展趋势。IPTV 利用宽带互联网基础设施,以 IPTV机顶盒+电视机,或以 PC 机作为主要接收 和显示终端,通过因特网协议向用户提供交互数字电视等多媒体业务的技术1。IPTV基本业务包括
3、宽带多媒体点播业务与宽带多媒体直播业务和宽带信息访问业务2。 其中音视频码流的直播与点播,要求能够从网络实时获得音视频码流数据,并使用硬件芯片 对码流进行同步解码和播放。本文属于IPTV机顶盒项目软件部分,机顶盒采用ST公司的ST7109芯片。支持mpeg1/2/4, H264,VC1与MP3,AAC,AC3等众多音视频格式的解码,并支持最大幅度为1920-1080i的 高清视频码流的播放,系统的实际运行环境为STLinux 2.2。机顶盒的媒体播放器,需要调用硬件API对相关码流进行网络接收,并对码流进行解码 和显示。本文介绍使用ST7109芯片对接收到的音视频ES(Elementary S
4、tream)码流播放与同步 方案。2. 码流的接收与获取 IPTV机顶盒要求能够通过网络,和本地文件获取码流和相应的信息。 此IPTV机顶盒媒体播放器支持RTSP4/SDP5、与RTP/RTCP6协议栈,通过IP网络,获得音视频ES码流数据。机顶盒的媒体播放器,使用RTSP协议获取码流的SDP描述信息,并对流媒体会话进行 播放控制。SDP用于描述会话和传输媒体码流的相关信息。对每一种类型的媒体流,都有相 关IETF rfc文档定义SDP描述格式和RTP负载格式(rtp playload format)。媒体服务器与机顶盒客户端,对需播放的每一条音视频码流,都要根据RTSP的协商, 在相应的端口
5、,建立一个RTP会话。ES码流的媒体数据作为RTP的负载,发送到用户接收端。 而对每一种类型的码流都要符合相应的RTP负载格式规范。一般来说音视频码流都以帧为单位,并根据网络MTU的大小,按照RTP负载格式规范将-5-媒体数据进行打包,并填写相应的rtp负载头,并通过网络发送打包后的数据。打包可以每包多帧,或多帧一包,体现了多媒体传输协议的应用层分帧的原则。 当客户端接收到音视频码流后,需要对码流解分组,分析RTP负载头等相关信息,并在缓冲区中等待一定时间后,对接收到的ES数据进行解码并播放。RTP数据包,按解码次序发送,包头中规定的包的序列号,标识包中媒体数据的发送和 解码的次序。查看RTP
6、包的序号,可以确定是否丢包。RTP包头中也定义的显示时间戳,用 于码流的流内同步。而媒体服务器发送RTCP SR(Sender Report)报文中,定义了RTP时间戳 和NTP时间的对应关系。通过RTP报文获得音视频数据。在其RTP Header中伴随着RTP时间戳,可以获得视频帧 在流内的相对播放时间,用于流内同步。而与RTCP时间NTP作对比,可以获得的绝对播放 时间,用于流间同步。对每一条RTP连接,都要建立相应的RTCP连接。RTCP的主要作用,就是反馈传输质量 如:丢包率,延时抖动等;获得流间同步的时间信息;并获得媒体会话参与者标识CNAME 等。根据以上过程,我们通过RTSP与R
7、TP/RTSP获取参与多媒体会话的每一条音视频码流的 相应码流及其播放时间。3. 码流的解码与播放播放器播放器使用ST7109硬件芯片对音视频码流进行解码和播放。我们编写硬件适配 层,调用ST提供的API对音视频视频进行解码和播放。播放过程如下。(1)调用Init函数,对相关设备进行初始化。包括音视频设备(STVID,STAUD),显示 层(Layer)等。(2)调用Open函数,打开相关设备句柄,每个设备可以打开一个/多个句柄。(3)调用Setup函数设置相关设备进行设置,播放参数,并设置播放的格式。对设备事 件注册回调处理函数,处理设备同时用户的消息。(4)调用Start函数开始进行解码和
8、播放。(5)向音视频解码设备注入码流数据(6)当设备使用完毕,调用stop函数停止播放。调用Close 函数,关闭设备句柄。(7)调用Term函数关闭设备。图1 STVID设备播放过程具体ST芯片播放音视频码流的过程,请参考ST提供的相应文档,和相关API测试代码。 音视频播放过程中,需要将压缩过的ES码流数流输入芯片进行解码和播放。 由于ES码流,使用RTP协议从网络中获得媒体ES数据,经解分组后,以帧为单位。需要向解码芯片,按帧输入数据。ST提供的API没有对以帧为单位注入音视频码的支持,需要自己修改或增加相应的API 函数。此API函数工作于STLinux的内核模式,并提供Ioctl调用
9、的接口。在STLinux的用户模 式下,使用类似STAPI的函数进行封装,供应用程序调用。增加的API函数工作流程为:在内核模式中,调用STVID相应API可以获得ST7109芯片待解码缓冲区的首地址及缓冲区大小。此缓冲为固定长度的循环使用的缓冲区,需要上层系 统不断向缓冲区写入媒体数据,只要视频设备处于工作状态,就会自动对其进行解码和播放。 使用此缓冲区,需要初始化读写指针,并设置系统回调函数,用于告知系统待解码缓冲区中 写指针的位置,并获得硬件系统读指针的位置,以防止覆盖未处理数据。这样就解决了ST芯片对于ES码流的按帧输入问题,并机顶盒可以顺利播放从网络通过RTP协议接收的音视频码流。4
10、. 硬件播放码流的同步 IPTV业务要求对同一节目的音视频码流,在时域上达到流内同步和流间同步的要求。 如第二节所述,我们可以从RTP/RTCP协议,获得音视频码流帧数据,及其相应的显示(播放)时间。此时间均为相对于系统开始启动播放码流的绝对时间。而ST7109对ES码流并没有提供函数,可以直接将媒体数据和显示时间同时传入系统。为了利用ST设备本身的同步 机制,我们利用ST7109对MPEG2 PES7码流的播放能力,达到音视频码流的同步播放的目 的。PES包头格式如图2所示:byte 0byte 1byte 2byte 3byte 4byte 50000 0000 0000 0000 000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ST7109 音视频码流的播放与同步 视频 播放 同步
链接地址:https://www.31doc.com/p-3618987.html