Linux下基于Gstreamer的流媒体播放器设计

时间:2022-05-06 09:36:56

Linux下基于Gstreamer的流媒体播放器设计

摘 要:本文设计了一种linux系统下的流媒体播放器。该播放器基于gstreamer架构进行设计,通过RTSP插件和RTP/RTCP插件等的构建,实现了多媒体数据流的接收、解码、回放以及控制等功能。

关键词:Gstreamer; 流媒体; RTSP; RTP/RTCP

中图分类号:TN919.8 文献标识码:A 文章编号:1006-3315(2013)03-149-002

1.前言

流媒体技术以流的方式在网络中传输媒体,具有良好的实时性和交互性。随着3G、4G等高速移动通信技术的发展成熟和多媒体智能移动设备的普及,流媒体技术获得了广泛应用和迅速发展。本文基于GStreamer架构,采用RTP/RTCP协议实现数据传输,设计了一种流媒体播放器,处理芯片采用OMAP3430,操作系统为嵌入式Linux系统,借助高速网络,可以实现高质量的流媒体播放。

2.相关技术介绍

2.1流媒体技术。流媒体是指以流的方式在网络中传输音频、视频和多媒体文件的形式。流媒体文件格式是支持采用流式传输及播放的媒体格式。流式传输方式是将视频和音频等多媒体文件经过特殊的压缩方式分成一个个压缩包,由服务器向用户计算机连续、实时传送。用户采用内容缓存的方式,只需要进行很短时间的缓冲,就可以一边播放一边下载,而不需要提前下载整个文件。

流媒体传输一般都是采用建立在udp协议上的rtp/rtsp实时传输协议。相对于注重传输质量的tcp协议来说,udp协议更加注重传输速度,这种协议对于实时性要求很高的流媒体文件来说,无疑是更加合适的。

2.2Gstreamer概述。GStreamer是一种流媒体应用框架,采用了基于插件(plugin)和管道(pipeline)的体系结构,框架中的所有的功能模块都被实现成可以插拔的组件(component),并且在需要的时候能够很方便地安装到任意一个管道上,由于所有插件都通过管道机制进行统一的数据交换,因此很容易利用已有的各种插件“组装”出一个功能完善的多媒体应用程序。其主要功能模块包括元件、衬垫、箱柜等。

元件(Elements)是Gstreamer框架中所有可用组件的基础,是组成管道的基本构件。元件可以分为数据源元件、过滤器元件、接收器元件等,实现数据的输入、处理和输出等功能。

衬垫(pad)是元件(element)与外界的连接通道,每个衬垫都带有特定的功能信息,通过将不同元件的衬垫依次连接起来构成一条媒体处理管道,使数据在流经管道的过程能够被各个元件正常处理,最终就可以实现特定的多媒体功能。

箱柜(Bins):箱柜是一个可以装载元件的容器,同时其自身也是一个GstElement对象,也能够被用来容纳其他的箱柜对象。

2.3实时传输协议(RTP/RTCP)。RTP/RTCP协议栈由两个相互紧凑的协议组成,其中RTP协议负责传送具有实时特征的多媒体数据,而RTCP协议负责反馈控制、监测QoS、监视和传递相关信息。由于流媒体数据传输对于传输实时性的要求远高于传输可靠性,RTP/RTCP数据通常采用UDP/IP封装,它们共同完成网络传输层的功能。

2.4实时流媒体协议(RTSP)。RTSP协议是一种对流媒体数据的传输进行控制的应用级协议。通过RTSP协议,可以实现音视频的控制、点播等功能。

3.流媒体播放器的实现

本文设计的流媒体播放器,可以分为以下几个模块:用户界面、RTSP控制模块、RTP/RTCP传输模块、数据转换模块、解码模块、视音频输出模块。如图1所示。用户通过用户界面与客户端交互,RTSP模块响应用户界面发送的命令,建立RTP数据传输会话,会话建立之后,由RTP/RTCP模块循环接收RTP数据包并进行排序,然后转换模块对RTP数据进行解包,转换成原始的音视频数据,然后送入解码模块进行解码,最后通过音视频输出模块将媒体展示给用户。

图1流媒体播放器架构

用户界面是客户端跟用户之间交互的界面,它包括两部分内容:一是媒体播放控制,比如暂停、快进等;二是媒体内容的展示,比如视频画面的显示等。在Linux系统下,本文利用GTK+库开发GUI框架。

RTSP模块用于会话的建立和控制,它提供响应界面操作的接口,直接响应界面发送的命令。RTSP也提供互联的双方或多方的一个传输方式和编码方式的协商操作,在网络允许的情况下,建立一条最佳的传输通道。当客户端用户选择服务器上某项流媒体内容的时候,播放器会通过RTSP协议,与服务器建立会话,通知服务器往本地RTP接收端口发送音视频数据。

RTP/RTCP模块为流媒体播放器的核心组成部分,当RTSP建立传输会话之后,RTP和RTCP会各使用一个端口,RTP端口会循环接收RTP数据包,同时RTCP端口会周期性的发送RTCP报,RTCP包中包含已发送的数据包的数量、丢失的数据包的数据等统计资料,因此,服务器可以利用这些信息动态的改变传输速率,甚至改变有效载荷类型。RTP包由RTP包头和RTP数据构成,RTP包头中包含了一些可以较好保证流数据连续性实时性的信息,如序列号、时间戳等。序列号可以保证到达客户端的RTP包的连续,而时间戳可以同步音视频包。根据包头中的时间戳接收的数据包进行重新排序,然后传送到转换模块进行处理。

4.小结

本文采用Gstreamer架构,对RTP/RTCP/RTSP协议进行了深入研究,设计了一种基于Linux系统的流媒体播放器,通过构建RTP/RTCP流媒体传输插件,实现了流媒体数据的实时传输和播放,在终端设备中可以取得良好的流媒体播放效果。

这种基于Gsreamer的媒体播放器具备良好的灵活性和可移植性,借助高速传播网络,特别适合在各种不同类型的智能终端实现流媒体的接收和播放等功能,在视频监控、远程会议、视频教学、多媒体娱乐等多种不同场合都可以获得广泛应用。

参考文献:

[1]孙弼阳,李虹,王颖.移动流媒体业务的技术与应用[J]现代电信科技,2008(06):13-18

[2]陈丹,郭先会.RTP/RTCP协议在3GPP移动流媒体业务中的研究与应用[J]山西电子技术,2010(06):65-66

[3]陈洪敏.基于RTP/RTCP协议流媒体传输的研究[J]福建电脑.2010(02):93-94

[4]王蕊,刘卫东,王金童.基于GStreamer的媒体播放研究[J]电子设计工程.2012(03):34-36

[5]刘尚麟,刘军.GStreamer RTP插件的改进及应用[J]信息安全与通信保密,2009,(01):91-95

[6]赵进,叶梧,冯穗力.基于RTP/RTCP的流媒体服务器技术研究[J]中国有线电视.2004(01):3-6

上一篇:星空下的夜曲 下一篇:做一名心智型的体育教师