DTV多节目传送流实时多画面播放软件设计
2014-07-02褚晶辉刘子玉
闵 行,褚晶辉,刘子玉,俞 滢
(天津大学 电子信息工程学院,天津 300072)
DTV多节目传送流实时多画面播放软件设计
闵 行,褚晶辉,刘子玉,俞 滢
(天津大学 电子信息工程学院,天津 300072)
设计了一种实时播放数字电视(DTV)传送流的软件,支持多达16路节目的解码和多画面显示。该设计利用商用的数字电视传送流采集卡将码流输入到计算机内存中,然后利用FFmpeg开源库实现对传送流的解复用和多路视频解码,最后利用SDL开源库将解码后的图像以多画面的形式显示在屏幕上。该设计提供了一种低成本的数字电视播出质量监测手段,软件也具有较高的可移植性。
多节目传送流;多画面显示;FFmpeg;SDL
随着数字电视行业的迅猛发展,以及电视频道的增多,对数字电视频道播出质量监测的要求也越来越高。模拟电视时代,对于多路视频监测多采用CRT显示器构成的电视墙;在数字电视系统中,常见的方案也是将多个硬件解码器的输出接到电视墙上,此类方法的成本较高,不能充分发挥数字电视的优势,而采集数字电视传送流并直接进行多路视频解码和显示的设计方案具有较大的硬件成本优势和更大的灵活性[1]。
目前,我国的数字电视系统采用MPEG-2标准系统层规定的传送流(Transport Stream,TS)格式对多路数字电视节目进行复用形成基带信号(多节目传送流,MPTS)。本文实现的方案首先利用商用的数字电视传送流采集卡将码流输入到计算机内存中,再利用FFmpeg开源库实现对传送流的解复用和多路视频解码,利用SDL开源库将解码后的图像以多画面的形式显示。
1 FFmpeg多路视频解码
FFmpeg是一款支持多种格式音频与视频播放、录制、转换和串流功能的自由软件,它包含了目前领先的音频、视频编码库libavcodec,对大部分格式的视频编码都有良好的支持,VLC等多款开源播放器也都用到了FFm⁃peg。虽然FFmpeg是在Linux下开发的,对于GCC的依赖性非常强,但是可以在Windows等大多数操作系统下编译,保证了其良好的可移植性。本文设计主要使用FFm⁃peg进行传送流解复用和视频解码,具体过程如下:
在解码之前,先调用av_register_all()初始化FFmpeg库,注册所有容器格式和解码器。初始化结构体AVFor⁃matContext作为输入输出容器,将数字电视传输码流保存到计算机的内存中,调用avformat_open_input()读取计算机内存中TS码流的头部信息保存到容器中。结构体AV⁃CodecContext是一个描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息,例如,视音频流的个数、时长、比特率、文件名以及视音频流数据本身等。将TS码流中的视频流与音频流进行分离,读取包括视频流个数在内的视频流信息,使用avcodec_open2()打开解码器,avcodec_alloc_frame()为解码帧分配内存,不断地从码流中提取视频流帧数据,并调用FFmpeg的解码核心函数avcodec_decode_video2()完成单线程的视频解码的全过程[2]。
考虑到要实现多画面实时播放多个视频流,本文采用了多线程的设计,根据TS码流中视频流的个数确定线程数量,每个线程独立完成一路视频的解码与显示,提高系统资源的利用率。此外,在此之前还需要创建一个独立的线程,以便将来自数字电视传送流采集卡的TS码流保存至计算机内存中,供视频解码使用[3]。
2 SDL多画面显示
SDL是一套跨平台支持多操作系统的开源多媒体开发库,是各种多媒体应用与操作系统之间的接口。SDL共包括8个子系统,在视频处理子系统中,要显示的视频区域被当作一块视频缓冲区,也就是一块内存区域,SDL可以对该区域进行读写。视频缓冲区内的最小单位是像素,SDL可以对视频区域内的任意一个像素做处理,包括改变其颜色等,缓冲区的数据更新后调用刷新函数刷新显示,完成视频播放的过程[4]。
本文设计了如图1所示的共6种不同的画面播放模式,用户可以根据自身需求选择单路播放或者多路播放,多路视频播放也可根据需要选择不同画面、大小、主次播放,支持多达16路节目同时播放。用户选定播放模式后,将其作为参数传入主程序中,程序根据选择的播放模式以及屏幕分辨率,计算多路视频画面的播放位置。
图1 多画面视频播放模式
SDL的初始化过程主要包括以下步骤:调用SDL_CreateWindow()创建一个可以用来绘制的窗口,调用SDL_CreateRenderer()创建一个渲染器,调用SDL_Cre⁃ateTexture()创建纹理缓存(texture)。SDL初始化之后,就可以将FFmpeg解码输出的视频帧数据作为纹理缓存的输入,本文将视频帧数据保存为YUV420P数据格式。根据选定的播放模式,计算每个视频流在画面中对应的显示位置,不断地将视频帧数据写入纹理缓存并刷新显示,就实现了多路视频的多画面播放。
3 软件实现
本文设计的软件工作流程如图2所示。首先,将TS码流路径和播放模式作为参数传递给主程序,主程序对TS码流路径进行判断;当路径为0时,主程序读取通过数字电视传输流采集卡输入的实时TS码流,否则,读取保存在本地或是某个服务器上的TS码流文件。然后,对TS码流进行分析,分离出视频流和音频流,计算视频流的个数。根据播放模式确定每个视频流对应的播放画面位置。最后,为每一个视频流创建一个独立的视频解码和视频显示线程。在此过程中,FFmpeg开源库提供了传送流的解复用和视频流的解码方法,SDL开源库则提供了多画面视频显示方法。
图2 软件工作流程
4 测试结果与分析
分别使用数字电视传送流采集卡接收数字电视广播基带信号(即TS码流)和用计算机硬盘上保存的TS文件对软件的实时解码和离线解码功能进行测试,支持6种预设的播放模式,其中3种模式下的测试结果如图3所示。
实验表明,本文设计的软件能够实时读取数字电视传送流采集卡输入的TS码流,或者读取计算机存储设备中的TS码流文件,支持6种预设的播放模式,最多可以实现16路画面同时播放。
图3 模式2、模式5及模式6下的播放效果
5 结论
本文设计的数字电视传送流多画面播放软件是在跨平台的开源库FFmpeg和SDL的基础上实现的,经过简单修改在Windows、Linux和Mac OS操作系统上都可以运行,相对于文献[5-7]提出的利用Microsoft公司的Direct⁃Show和DXVA等Windows平台专有技术实现的系统,其适应性与扩展性更强,因此使用更加灵活,可满足不同的用户需求。在数字电视行业迅猛发展的背景下,对于数字电视多路视频监测的需求使得该设计具有良好的应用前景。
致谢
[1]李欣时,仲影.数字电视多画面显示及监控系统的实现[J].有线电视技术,2008(8):108-110.
[2]辛长春,娄小平,吕乃光.基于FFmpeg的远程视频监控系统编解码[J].电子技术,2013(1):3-5.
[3]李科,李璐,兰时勇.基于FFmpeg和SDL实现多路实时流变换及播放[J].计算机技术与发展,2014(4):65-68.
[4]蒋鹏,刘玓.基于SDL库的跨平台多媒体应用[J].福建电脑,2003(5):39-40.
[5] 尚青青,朱秀昌.高清视频监控中心的设计与实现[J].电视技术,2013,37(11):183-187.
[6]苏俊峰,朱秀昌.基于DXVA的多路H.264高清视频解码器的实现[J].电视技术,2011,35(18):30-33.
[7]高誉菊,吕鹍,张刚.Windows平台上AVS视频监控客户端的实现[J].电视技术,2014,38(11):94-96.
Design of Real-time M ulti-screen Decoding Software for DTV M ulti-program Transport Stream
MIN Hang,CHU Jinghui,LIU Ziyu,YU Ying
(School of Electronic Information Engineering,Tianjin University,Tianjin 300072,China)
A software is designed to play DTV multi-program transport stream in real-time,which supports decoding up to 16 programs and multi-screen display.The software acquires transport stream into the computer memory with a commercial digital TV transport stream capture card,and then the stream is demultiplexed and decoded with the open-source library FFmpeg. Finally,the decoded pictures are displayed on the screen in a multi-screen layout with the open-source library SDL.The design provides a low-cost method to monitor the quality of digital television broadcasting,and the software is highly portable.
MPTS;multi-screen display;FFmpeg;SDL
TN949.1
A
闵 行,硕士生,研究方向为数字多媒体技术和模式识别;
褚晶辉,博士,副教授,研究方向为数字多媒体技术和模式识别;
刘子玉,硕士生,研究方向为数字多媒体技术和模式识别;
俞 滢,硕士生,研究方向为数字多媒体技术和模式识别。
��健男
2014-08-11
【本文献信息】闵行,褚晶辉,刘子玉,等.DTV多节目传送流实时多画面播放软件设计[J].电视技术,2014,38(21).
国家自然科学基金项目(61271069)