新闻中心

EEPW首页 > 消费电子 > 设计应用 > 基于DVB-C的流媒体广播系统实验研究

基于DVB-C的流媒体广播系统实验研究

——
作者:时间:2007-10-17来源:电视技术收藏

  1 引言

  基于的数据广播在共享多媒体等海量数据方面具有明显的优势,可解决网络上传输海量流媒体信息资源引起的网络阻塞,是一种低成本接收和可提供优质服务的优秀信息共享结构。因此,基于数据广播网的流媒体技术是具有潜力的技术。

  为此,本文介绍了一种搭建在实验室的统,可用于有线电视广播网平台,为现有DVB-C数字有线电视系统开展流媒体业务提供了一种由发送端到接收端的解决方案。

  2 流媒体传输技术方案

  流媒体的传输涉及到两方面的技术:其一,服务器端与客户端的通信技术,包括多媒体数据的传输、命令控制等;其二,客户端对收到的多媒体流实时解码播放的技术。

  本文中,对多媒体流的解码播放使用DirectShow技术,它将流媒体处理划分为若干个连续的步骤,包括音视频数据的采集、传输、分离、合并、编码、解码和回放等。每个具体的流媒体处理过程可由其中的几个步骤组成。利用其中滤波器处理一个或多个步骤,用不同的滤波器实现不同的功能。开发人员可创建自己的滤波器,也可用微软或第三方提供的滤波器。应用程序连接若干个滤波器进行指定的流媒体处理。数据可在不同的滤波器间传输,传输方向一般是单向的。一个过滤器通过输出针将特定的输出送到下游过滤器的输入针。传输的数据加有时间戳,用来同步音视频数据的回放。

  图1为利用DirectShow开发流媒体程序的框图。

  

  在DirectShow中,滤波器分为3类。

  1) 源滤波器:从数据源获取原始数据。不同的源滤波器可处理一类或多类数据源,包括本地文件、网络和数据采集卡等。

  2) 变换滤波器:用来获取、处理和传送媒体数据,它包括分离视频和音频的切分过滤器、解压视频数据的视频解码过滤器、解压音频数据的音频解码过滤器。

  3) 终端滤波器:对数据进行最后的处理,可显示视频、回放音频、保存数据或者将数据发送到网络等。

  3 系统设计

  3.1 系统总体设计

  在DVB传输协议的基础上,采用合适的硬件和软件结构可构建一套数据广播系统。图2给出了在实验室搭建的基于DVB-C的数据广播系统平台结构图。

  

  系统所用设备:北京蓝拓扑的IP/DVB网关(BDG-10)和数据接收卡(BDR-10C);九州QAM调制器;普通PC机,其中服务器使用WIN XP操作系统;客户机使用的WIN 2000操作系统;IP/DVB网关使用WIN 2000Server操作系统。

  该系统同时具备本地文件广播及流媒体广播功能。服务器利用IP多播技术,将UDP数据包通过内部以太网传送到IP/DVB网关,把输入的IP数据打包成DVBTS码流输出,经过640AM调制器调制到一个特定的8MHz带宽的模拟电视频道上,在有线电视网上传送,信号经过分支器进行衰减,客户端的PC机使用DVB-C接收卡接收各类文件及流媒体数据。

  根据流媒体系统的设计要求,整个基于DVB-C的流媒体广播软件系统由服务器数据广播发送软件系统和客户端接收实时播放软件系统组成。

  3.2 服务器端软件设计

  实验系统软件设计采用面向对象的程序设计方法,蓝拓扑接收卡提供了适用于Visual C++6.0的API接口函数,因此,软件开发台使用Visual C++提供的MFC编程平台,发送接收使用Windows Socket技术,采用面向无连接的UDP协议来实现服务器端主动发送数据、用户端被动接收数据。发送端选择MPEG-1编码格式的多媒体文件作为节目源。

  其发送进程如图3所示。

  

  1) 初始化进程环境

  

  2) 数据库记录集对象_RecordsetPtrm_pRecordset首先移动到记录集中的第一条记录处m_pRecordset.Movefirst();

  3) 读取数据库获得文件路径(数据库第三栏)m_p Recordset->GetCollect(“位置”),用函数CFile::Open打开待发送的文件;

  4) 启动文件发送线程(一个函数循环),用函数CFile::read顺序读取文件数据(74 368 bit)到缓冲区,缓冲区定义为

  #define MPEG1_PACK  9296

  cbar*  pBuf = new char[MPEG1_PACK]

  用CSocket::SendTo函数将缓冲区数据封装成UDP包并发送到网关,等待30 ms后继续此循环,直至文件发送完毕;

  5) 将记录集对象指针移动到下一条记录处,发送下一个文件,程序执行3),直至记录集对象指针指到最后一条记录处。

  3.3 客户端软件设计

  客户端接收并解码播放部分是系统的难点也是重点。客户端解码播放部分建立的DirectShow过滤器如图4所示。除了源滤波器外,其他滤波器由DirectShow SDK中提供,但MPEG-1切分过滤器只能工作在拉模式(切分过滤器向源过滤器发送数据请求,源过滤器发送数据来回应请求)下,因此,Source Filter也设计成拉模式。

  

  客户端接收实时回放软件系统所用的关键技术有:

  1) 双缓冲队列技术

  客户端通过函数CSocket::ReceiveFrom循环接收服务器端发送的数据包,为减轻网络抖动的影响,必须进行一定量的缓冲,才能交给DirectShow解码处理,动态地一边继续从网络接收数据,一边将得到的数据进行解码回放。因此,使用了双缓冲队列技术,封装的CDataAdmin类实现对数据接收队列的管理。

  建立了两个队列:第一队列是空闲的缓冲队列Pool-List,用以接收存放数据包;另一个是尚未处理的数据缓冲队列DataList,等待下游Filter的读取。其代码如下:

  

  当客户端接收到一个包的数据,从PoolList的头部拿出一个缓冲块,存放数据,然后将这个缓冲块加入到DataList的尾部等待DirectShow的Filter读取;从DataL-ist头部拿出一个缓冲块,DirectShow的Filter读取缓冲块内的数据,读完后将缓冲块加入到PoolList的尾部,等待再一次地接收数据。

  2) 源过滤器的设计

  流媒体数据传输技术决定了DirectShow Filter只能读取缓冲中的各个包数据,由于DirectShow只提供了异步文件源过滤器和URL文件源过滤器,因此,自己必须设计源过滤器。如图5所示。

  

  在源过滤器的模块结构中,过滤器CMemStream是从DirectShow SDK中的基类CAsyncStream继承而来,处理从第二队列中读取数据,主要是由重载的CMem-Stream::read函数完成。输出CAsyrncOutPin实现了I-AsyncReader接口以支持异步操作。所使用的切分过滤器的输入pin是拉模式,它从CAsyncOutputPin的IAsyn-cReader接口中索取数据。图中所有的数据请求都是由异步I/O操作类CAsyncIo来处理,而CAyncIo的核心是请求对列处理线程,它不停地从请求队列中取数据请求并处理,实现异步数据请求操作。

  总体数据流向为:在建立源滤波器CMemReader时,CMemReader会建立一个CAyncIo对象且CAsyncIo在合适启动一个请求丢队列处理线程,然后开始以下的处理流程:1)MPEG-1切分过滤器向CAyncOutputPin提出数据请求;2) CAsyncOutputPin将该请求加以包装并加入到CAsyncIo的请求队列中,由处理线程来处理;3)处理线程通过内部流类CMemStream访问缓冲区,读取数据并通过CAyncOutputPin发给MPEG-1切分过滤器。实际应用时,使用了DirectShow SDK提供的基类CAyncIo和CAyncOutputPin,CMemReader是从DirectShow SDK中的基类CAsyncReader继承而来,这一切简化了程序设计。

  4 实验结果分析

  实验完成了单路多媒体数据的广播流式发送与接收并实时播放。利用丢包率与网络带宽等信息来检测网络状态与确定发送速率。

  1) 丢包的检测

  在单播环境中,本文采用的检测方法为:发送端在发送固定数量的MPEG-1格式文件的同时,发送固定频率的空UDP包;接收端通过检查能接收到的包数目来检测包丢失情况。本服务器端发送4 495个数据包的MPEG-1格式文件,每个数据包9 296 byte,同时服务器端以2.1 Mbit/s的速率发送空的UDP测试包,接收端能收到的平均包数日为3 701,丢包率为17.7%。这主要是由网络拥塞与网络线路衰减引起的。

  丢包情况下接收端有马赛克现象,但是现象影响轻微,用户可观看流畅的流媒体节目,并能把收到的节目存入文件。这表明在实验中,流媒体广播能成功接收。

  2) 网络带宽

  DVB-C平台中调制器参数设置为:64QAM调制;网关最大传输速率为32 Mbit/s,可复用多路服务器的数据在8 MHz的模拟频道上进行传输,例如文件服务器等。流媒体数据的占用带宽情况可在IP/DVB网关中观测到,实际占的最大带宽可等效于3.17 Mbit/s,网关可复用多路独立的流媒体服务器的同时并行发送。

  因此,DVB-C广播平台拥有较高的传输速率,在单向传输大容量多媒体数据时比因特网更具有优势,可有效缓解因特网中的信息拥塞问题。



评论


相关推荐

技术专区

关闭