IPTV機(jī)頂盒的流媒體播放器設(shè)計(jì)
開源代碼live555是用來實(shí)現(xiàn)流媒體傳輸功能的SDK.用該SDK中teSTProgs文件夾中的play Common. cpp 來設(shè)計(jì) IP TV 機(jī)頂盒的傳輸模塊 ,并與播放模塊一起構(gòu)成 IPTV 機(jī)頂盒的流媒體播放器的過程。playCommon. cpp 是連接服務(wù)器和客戶端的橋梁 ,它的工作原理就是客戶端向服務(wù)器請求數(shù)據(jù)時 ,從服務(wù)器的 URL 處獲得 SDP 描述信息并根據(jù) SDP 創(chuàng)建多媒體會話 ,最后播放數(shù)據(jù)流的過程。
本文引用地址:http://www.ex-cimer.com/article/186861.htm1 IPTV 機(jī)頂盒流媒體播放器設(shè)計(jì)
1. 1 IPTV機(jī)頂盒軟件結(jié)構(gòu)
機(jī)頂盒的軟件代碼實(shí)現(xiàn)分4部分 :硬件驅(qū)動、操作系統(tǒng)、中間件、應(yīng)用層,如圖1所示。
圖1 機(jī)頂盒軟件結(jié)構(gòu)
1) 硬件驅(qū)動 連接底層硬件和上層操作系統(tǒng)。2) 操作系統(tǒng) 這里用的是免費(fèi)的開源代碼 Linux。3) 中間件 隔離上層應(yīng)用層與底層操作系統(tǒng)及硬件的軟件適配層。中間件的核心模塊主要包括:( 1) 瀏覽器 : 從服務(wù)器端獲得 URL ,并將對應(yīng)的EPG 頁面顯示出來。( 2) 圖形用戶界面管理:為應(yīng)用程序提供用戶界面控制(如按鈕 、列表)以及圖形圖像繪制等圖形功能。4)應(yīng)用層 實(shí)現(xiàn)對音、頻媒體文件的播放。
1. 2 IPTV 機(jī)頂盒流媒體播放器系統(tǒng)結(jié)構(gòu)
Live555開源代碼中playCommon.cpp 實(shí)現(xiàn)了以電腦作為接收終端 ,用VLC軟件進(jìn)行接收并播放 ,最后在電腦上顯示出 來 的 功 能。研 究 的 內(nèi) 容 是 將 playCommon.cpp 融合到機(jī)頂盒的軟件代碼中,最終實(shí)現(xiàn)以IPTV 機(jī)頂盒作為接收終端并對其進(jìn)行播放,并在電視上顯示出來的功能。這就對代碼的設(shè)計(jì)提出了新的要求:一方面 ,playCommon.cpp 獲得服務(wù)器的URL 是通過在 VLC的RTSP 一欄中輸入rtsp ://本機(jī) IP 地址:端口號/要播放的文件名來獲取的。然而對于IPTV 機(jī)頂盒,傳輸模塊獲得的URL是用戶通過遙控器選擇EPG上的節(jié)目時對應(yīng)的URL.這個 URL是通過中間件中的瀏覽器讀取的,因此這就需要將中間件和傳輸模塊銜接起來。另一方面playCommon.cpp 發(fā)送出來的數(shù)據(jù)流是通過VLC接收并播放的 ,而對于IPTV機(jī)頂盒 ,傳輸模塊發(fā)送出來的數(shù)據(jù)流是通過播放模塊接收并播放的 .因此就需要銜接傳輸模塊和播放模塊。
為了銜接中間件、輸模塊和播放模塊,設(shè)計(jì)了消息隊(duì)列,以實(shí)現(xiàn)這3個模塊間的數(shù)據(jù)通信。另外程序中還設(shè)計(jì)了 pt hread create ()來創(chuàng)建線程 rt spmain(),實(shí)現(xiàn)程序的并發(fā)。IPTV 播放器的系統(tǒng)構(gòu)架見圖2。
圖2 IPTV 播放器的系統(tǒng)構(gòu)架
1.3 程序結(jié)構(gòu)分析
1.3.1 傳輸模塊。
1) main 函數(shù) (1) void initMsgQ ()初始化消息隊(duì)列。dataQid 代表數(shù)據(jù)的消息隊(duì)列 ,裝著一些在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù) ,最后通過 void send data to player ()函數(shù)將消息隊(duì)列中的數(shù)據(jù)發(fā)送至播放器。msgkeyQid代表消息鍵值的消息隊(duì)列 ,傳輸模塊接收從中間件獲得的遙控器鍵值指令 ,并發(fā)送至播放器以實(shí)現(xiàn)快進(jìn) 、快退 、 停 、播放等操作。fromeMiddleQid 代表中間件的消息隊(duì)列,傳輸模塊接收從中間件發(fā)來的 URL,作為客戶端播放器向服務(wù)器請求數(shù)據(jù)時的目的地址。playerStateQid 代表播放狀態(tài)的消息隊(duì)列,傳輸模塊用來收發(fā)播放器的狀態(tài), 控制播放器是點(diǎn)播 、直播還是時移。(2) phread_create(g_session_thread_info ,tattr,(void*(*)(void*))rtsp_main ,(void*)urlInform);創(chuàng)建rtsp_main()線程。保證消息隊(duì)列的通信和流媒體的傳輸同時運(yùn)行。
2) rtsp_main 函數(shù)。(1) recvMiddlewareMsg(fromeMiddleQid,url):從中間件傳遞url的值賦給變量url.(關(guān)于url的定義是在中間件里完成的,因此需要從中間件獲得);(2)playCommon.cpp中的函數(shù):客戶端向服務(wù)器發(fā)出請求時,服務(wù)器響應(yīng)請求,創(chuàng)建媒體會話并播放數(shù)據(jù)流。(3) main_player_entry(gTrans. first Create):客戶端接收流并調(diào)用播放器的入口函數(shù),對播放器進(jìn)行初始化配置。(4) void send_data_to_player():調(diào)用播放器 ,將從網(wǎng)上接收來的數(shù)據(jù)發(fā)送至播放器,并開始播放。
1. 3. 2 播放模塊
播放模塊如圖 3 所示 ,主要完成點(diǎn)播、直播、時移模式下文件的播放以及對播放狀態(tài)的控制, 如快進(jìn)、快退、暫停、播放等。1 )process_playback_state( )根據(jù)點(diǎn)播 、直播、時移調(diào)用不同的函數(shù),相同的是要設(shè)置音視頻同 步 .2) handle_playback_state(state,time) 設(shè)置不同的時間戳 ( state Tmp . multiple) 來控制播放狀態(tài)。
圖3 播放模塊結(jié)構(gòu)圖
2 結(jié) 語
IPTV 機(jī)頂盒軟件功能模塊主要包括: 流媒體的傳輸模塊,媒體播放器模塊,電子節(jié)目菜單模塊, WEB瀏覽器模塊。其中,流媒體的傳輸模塊、媒體播放器模塊合起來構(gòu)成機(jī)頂盒播放器; 電子節(jié)目菜單模塊、WEB 瀏覽器模塊合起來構(gòu)成中間件的基本模塊。研究的重點(diǎn)就是播放器。運(yùn)用設(shè)計(jì)的方法制作的IPTV機(jī)頂盒已經(jīng)生產(chǎn)出來,并且經(jīng)測試性能穩(wěn)定。
評論