秦端振
摘 要:本文設計了一種Linux系統(tǒng)下的流媒體播放器。該播放器基于Gstreamer架構進行設計,通過RTSP插件和RTP/RTCP插件等的構建,實現(xiàn)了多媒體數(shù)據(jù)流的接收、解碼、回放以及控制等功能。
關鍵詞:Gstreamer; 流媒體; RTSP; RTP/RTCP
中圖分類號:TN919.8 文獻標識碼:A 文章編號:1006-3315(2013)03-149-002
1.前言
流媒體技術以流的方式在網(wǎng)絡中傳輸媒體,具有良好的實時性和交互性。隨著3G、4G等高速移動通信技術的發(fā)展成熟和多媒體智能移動設備的普及,流媒體技術獲得了廣泛應用和迅速發(fā)展。本文基于GStreamer架構,采用RTP/RTCP協(xié)議實現(xiàn)數(shù)據(jù)傳輸,設計了一種流媒體播放器,處理芯片采用OMAP3430,操作系統(tǒng)為嵌入式Linux系統(tǒng),借助高速網(wǎng)絡,可以實現(xiàn)高質(zhì)量的流媒體播放。
2.相關技術介紹
2.1流媒體技術。流媒體是指以流的方式在網(wǎng)絡中傳輸音頻、視頻和多媒體文件的形式。流媒體文件格式是支持采用流式傳輸及播放的媒體格式。流式傳輸方式是將視頻和音頻等多媒體文件經(jīng)過特殊的壓縮方式分成一個個壓縮包,由服務器向用戶計算機連續(xù)、實時傳送。用戶采用內(nèi)容緩存的方式,只需要進行很短時間的緩沖,就可以一邊播放一邊下載,而不需要提前下載整個文件。
流媒體傳輸一般都是采用建立在udp協(xié)議上的rtp/rtsp實時傳輸協(xié)議。相對于注重傳輸質(zhì)量的tcp協(xié)議來說,udp協(xié)議更加注重傳輸速度,這種協(xié)議對于實時性要求很高的流媒體文件來說,無疑是更加合適的。
2.2Gstreamer概述。GStreamer是一種流媒體應用框架,采用了基于插件(plugin)和管道(pipeline)的體系結構,框架中的所有的功能模塊都被實現(xiàn)成可以插拔的組件(component),并且在需要的時候能夠很方便地安裝到任意一個管道上,由于所有插件都通過管道機制進行統(tǒng)一的數(shù)據(jù)交換,因此很容易利用已有的各種插件“組裝”出一個功能完善的多媒體應用程序。其主要功能模塊包括元件、襯墊、箱柜等。
元件(Elements)是Gstreamer框架中所有可用組件的基礎,是組成管道的基本構件。元件可以分為數(shù)據(jù)源元件、過濾器元件、接收器元件等,實現(xiàn)數(shù)據(jù)的輸入、處理和輸出等功能。
襯墊(pad)是元件(element)與外界的連接通道,每個襯墊都帶有特定的功能信息,通過將不同元件的襯墊依次連接起來構成一條媒體處理管道,使數(shù)據(jù)在流經(jīng)管道的過程能夠被各個元件正常處理,最終就可以實現(xiàn)特定的多媒體功能。
箱柜(Bins):箱柜是一個可以裝載元件的容器,同時其自身也是一個GstElement對象,也能夠被用來容納其他的箱柜對象。
2.3實時傳輸協(xié)議(RTP/RTCP)。RTP/RTCP協(xié)議棧由兩個相互緊湊的協(xié)議組成,其中RTP協(xié)議負責傳送具有實時特征的多媒體數(shù)據(jù),而RTCP協(xié)議負責反饋控制、監(jiān)測QoS、監(jiān)視和傳遞相關信息。由于流媒體數(shù)據(jù)傳輸對于傳輸實時性的要求遠高于傳輸可靠性,RTP/RTCP數(shù)據(jù)通常采用UDP/IP封裝,它們共同完成網(wǎng)絡傳輸層的功能。
2.4實時流媒體協(xié)議(RTSP)。RTSP協(xié)議是一種對流媒體數(shù)據(jù)的傳輸進行控制的應用級協(xié)議。通過RTSP協(xié)議,可以實現(xiàn)音視頻的控制、點播等功能。
3.流媒體播放器的實現(xiàn)
本文設計的流媒體播放器,可以分為以下幾個模塊:用戶界面、RTSP控制模塊、RTP/RTCP傳輸模塊、數(shù)據(jù)轉(zhuǎn)換模塊、解碼模塊、視音頻輸出模塊。如圖1所示。用戶通過用戶界面與客戶端交互,RTSP模塊響應用戶界面發(fā)送的命令,建立RTP數(shù)據(jù)傳輸會話,會話建立之后,由RTP/RTCP模塊循環(huán)接收RTP數(shù)據(jù)包并進行排序,然后轉(zhuǎn)換模塊對RTP數(shù)據(jù)進行解包,轉(zhuǎn)換成原始的音視頻數(shù)據(jù),然后送入解碼模塊進行解碼,最后通過音視頻輸出模塊將媒體展示給用戶。
圖1流媒體播放器架構
用戶界面是客戶端跟用戶之間交互的界面,它包括兩部分內(nèi)容:一是媒體播放控制,比如暫停、快進等;二是媒體內(nèi)容的展示,比如視頻畫面的顯示等。在Linux系統(tǒng)下,本文利用GTK+庫開發(fā)GUI框架。
RTSP模塊用于會話的建立和控制,它提供響應界面操作的接口,直接響應界面發(fā)送的命令。RTSP也提供互聯(lián)的雙方或多方的一個傳輸方式和編碼方式的協(xié)商操作,在網(wǎng)絡允許的情況下,建立一條最佳的傳輸通道。當客戶端用戶選擇服務器上某項流媒體內(nèi)容的時候,播放器會通過RTSP協(xié)議,與服務器建立會話,通知服務器往本地RTP接收端口發(fā)送音視頻數(shù)據(jù)。
RTP/RTCP模塊為流媒體播放器的核心組成部分,當RTSP建立傳輸會話之后,RTP和RTCP會各使用一個端口,RTP端口會循環(huán)接收RTP數(shù)據(jù)包,同時RTCP端口會周期性的發(fā)送RTCP報,RTCP包中包含已發(fā)送的數(shù)據(jù)包的數(shù)量、丟失的數(shù)據(jù)包的數(shù)據(jù)等統(tǒng)計資料,因此,服務器可以利用這些信息動態(tài)的改變傳輸速率,甚至改變有效載荷類型。RTP包由RTP包頭和RTP數(shù)據(jù)構成,RTP包頭中包含了一些可以較好保證流數(shù)據(jù)連續(xù)性實時性的信息,如序列號、時間戳等。序列號可以保證到達客戶端的RTP包的連續(xù),而時間戳可以同步音視頻包。根據(jù)包頭中的時間戳接收的數(shù)據(jù)包進行重新排序,然后傳送到轉(zhuǎn)換模塊進行處理。
4.小結
本文采用Gstreamer架構,對RTP/RTCP/RTSP協(xié)議進行了深入研究,設計了一種基于Linux系統(tǒng)的流媒體播放器,通過構建RTP/RTCP流媒體傳輸插件,實現(xiàn)了流媒體數(shù)據(jù)的實時傳輸和播放,在終端設備中可以取得良好的流媒體播放效果。
這種基于Gsreamer的媒體播放器具備良好的靈活性和可移植性,借助高速傳播網(wǎng)絡,特別適合在各種不同類型的智能終端實現(xiàn)流媒體的接收和播放等功能,在視頻監(jiān)控、遠程會議、視頻教學、多媒體娛樂等多種不同場合都可以獲得廣泛應用。
參考文獻:
[1]孫弼陽,李虹,王穎.移動流媒體業(yè)務的技術與應用[J]現(xiàn)代電信科技,2008(06):13-18
[2]陳丹,郭先會.RTP/RTCP協(xié)議在3GPP移動流媒體業(yè)務中的研究與應用[J]山西電子技術,2010(06):65-66
[3]陳洪敏.基于RTP/RTCP協(xié)議流媒體傳輸?shù)难芯縖J]福建電腦.2010(02):93-94
[4]王蕊,劉衛(wèi)東,王金童.基于GStreamer的媒體播放研究[J]電子設計工程.2012(03):34-36
[5]劉尚麟,劉軍.GStreamer RTP插件的改進及應用[J]信息安全與通信保密,2009,(01):91-95
[6]趙進,葉梧,馮穗力.基于RTP/RTCP的流媒體服務器技術研究[J]中國有線電視.2004(01):3-6