一種分布式播放器流量控制方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及互聯(lián)網(wǎng)應(yīng)用技術(shù)領(lǐng)域,具體地說(shuō),涉及一種分布式播放器流量控制方 法及系統(tǒng)。
【背景技術(shù)】
[0002] 當(dāng)前,視頻播放器,通常是指能播放以數(shù)字信號(hào)形式存儲(chǔ)的媒體文件的軟件,也指 具有播放媒體文件功能的電子器件產(chǎn)品。除了少數(shù)波形文件外,大多數(shù)視頻播放器攜帶視 音頻解碼器和顯示部件以還原經(jīng)過(guò)壓縮媒體文件,視頻播放器還要內(nèi)置一整套轉(zhuǎn)換以及緩 存的算法。當(dāng)然大多數(shù)的視頻播放器還能支持播放單音頻文件或者單視頻文件。
[0003] 一般的處理過(guò)程為:
[0004] 輸入。從文件或網(wǎng)絡(luò)等讀取原數(shù)據(jù),如x.avi,x. 1]1〇¥,1^8口:/八11,對(duì)原數(shù)據(jù)進(jìn)行解 析,比如文件,首先要分析文件格式,從文件中取得音視頻編碼參數(shù),媒體時(shí)間長(zhǎng)度等信息, 然后要從其中取出音頻編碼數(shù)據(jù)和視頻編碼數(shù)據(jù)送到解碼部分,這里暫稱(chēng)這種編碼源數(shù)據(jù) 塊為packet。
[0005] 解碼。初始化時(shí),利用輸入端從源數(shù)據(jù)中取得的信息調(diào)用不同的解碼庫(kù)初始化;然 后接收輸入端傳送來(lái)的音視頻編碼數(shù)據(jù),分別進(jìn)行音頻解碼和視頻解碼,視頻解碼出來(lái)的 數(shù)據(jù)一般是YUV或RGB數(shù)據(jù),這里暫稱(chēng)為picture,音頻解碼出來(lái)的數(shù)據(jù)是采樣數(shù)據(jù),是聲卡 播放的數(shù)據(jù),這里暫稱(chēng)為sample。解碼所得的數(shù)據(jù)接下來(lái)送到輸出部分。
[0006] 輸出。接收解碼部分送來(lái)的picture和sample并顯示。視頻顯示一般使用某個(gè)圖 形庫(kù),如SDL,Xlib,DirectDraw,OpengGL,F(xiàn)rameBuffer等,音頻輸出是把sample寫(xiě)入系統(tǒng) 的音頻驅(qū)動(dòng),由音頻驅(qū)動(dòng)送入聲卡播放,可用的音頻輸出有ALSA,OSS,SDL,DirectSound, WaveOut等。
[0007] 現(xiàn)有技術(shù)中,通過(guò)分布式播放器在一個(gè)終端(播放器1)播放另外一個(gè)終端(播 放器2)上面的媒體文件,播放器1需要先和播放器2建立連接,通過(guò)網(wǎng)絡(luò)傳遞各種控制命 令,播放過(guò)程中傳遞的視音頻數(shù)據(jù)也會(huì)跟這些控制命走相同的通道。視音頻數(shù)據(jù)量很大,開(kāi) 始播放以后下行通道內(nèi)的視音頻數(shù)據(jù)會(huì)源源不斷的涌入,堵塞下行通道。這時(shí)如果要發(fā)出 Pause、Seek、Stop等控制動(dòng)作時(shí),上行通道將控制命令發(fā)出去,但控制命令響應(yīng)從下行通道 返回時(shí),就會(huì)被大量的視音頻數(shù)據(jù)堵塞。只有下行通道中大量的數(shù)據(jù)被消耗完,才能接收到 控制命令的響應(yīng),整個(gè)過(guò)程相當(dāng)漫長(zhǎng)甚至永遠(yuǎn)阻塞,用戶(hù)體驗(yàn)會(huì)非常不好,而且還會(huì)浪費(fèi)帶 寬。
【發(fā)明內(nèi)容】
[0008] 有鑒于此,本申請(qǐng)所要解決的技術(shù)問(wèn)題是提供了一種分布式播放器流量控制方法 及系統(tǒng),其能夠解決現(xiàn)有技術(shù)中播放器播放存在的流量控制問(wèn)題,能夠提高播放媒體文件 的速度和效率,避免控制命令的堵塞,提高用戶(hù)滿(mǎn)意度。
[0009] 為了解決上述技術(shù)問(wèn)題,本申請(qǐng)有如下技術(shù)方案:
[0010] -種分布式播放器流量控制方法,包括:
[0011] 播放器1控制層和播放器2控制層建立連接;
[0012] 播放器1控制層向播放器2控制層發(fā)送解復(fù)用命令Cmdprap_;
[0013] 播放器2控制層收到CmcUPara后,根據(jù)所述解復(fù)用命令中的媒體文件信息構(gòu)建解 復(fù)用模塊和數(shù)據(jù)發(fā)送模塊;向播放器1控制層回復(fù)消息解復(fù)用Ready消息;
[0014] 播放器1控制層收到所述解復(fù)用Ready消息后,根據(jù)所述解復(fù)用Ready消息包含 的媒體信息構(gòu)建數(shù)據(jù)接收模塊、解碼模塊和渲染模塊;并通知UI播放;
[0015] 所述UI操作播放后,播放器1控制層向播放器2控制層發(fā)送命令Cmdd_ x;
[0016] 播放器2控制層收到Cmdd_x命令后,啟動(dòng)解復(fù)用模塊,解復(fù)用模塊開(kāi)始從10中讀 取媒體文件數(shù)據(jù),解復(fù)用分離出原始流數(shù)據(jù),并通過(guò)數(shù)據(jù)發(fā)送模塊把原始流數(shù)據(jù)發(fā)送出去; 向播放器1回復(fù)解復(fù)用Play消息;
[0017] 播放器1控制層收到Play消息后,啟動(dòng)數(shù)據(jù)接收模塊、解碼模塊和渲染模塊;數(shù)據(jù) 接收模塊接收到原始流數(shù)據(jù)交給解碼模塊,解碼模塊解碼輸出的數(shù)據(jù)發(fā)送給渲染模塊,渲 染模塊完成渲染輸出。
[0018] 所述播放器1和播放器2控制層在建立播放連接時(shí)要核對(duì)起始時(shí)鐘,保證兩端的 計(jì)時(shí)時(shí)鐘1^的同步。
[0019] 所述解復(fù)用模塊和數(shù)據(jù)發(fā)送模塊初始化完成后,播放器2處于Ready狀態(tài)之后,播 放器2控制層會(huì)向播放器1控制層回復(fù)消息解復(fù)用Ready消息。
[0020] 所述解碼模塊和渲染模塊初始化完成后,所有的播放模塊都處于Ready狀態(tài),此 時(shí)通知所述UI播放。
[0021] 所述方法還包括:
[0022] 播放的視音頻數(shù)據(jù)流在解復(fù)用完畢以后根據(jù)視頻音頻信息打上時(shí)間戳信息Tf;
[0023] 當(dāng)開(kāi)始播放的時(shí)候記錄下系統(tǒng)開(kāi)始時(shí)間Tgs和視音頻開(kāi)始時(shí)間T fs,當(dāng) ((Tf_Tfs) - (Tg_Tgs)) > T A,需要減緩發(fā)送的速度,避免擁塞;
[0024] 接受端將接收到視音頻幀數(shù)據(jù)的延遲時(shí)間Tdelay,發(fā)回發(fā)送端,當(dāng)Tdelay> 2*T A,設(shè) 置& = r。+ r以減慢發(fā)送速度;當(dāng)Tdelay< T A,設(shè)置巧=巧+ P,.以加快發(fā)送速度;
[0025] 其中,Tf為視音頻幀的播放時(shí)間;T gs為播放時(shí)系統(tǒng)起始時(shí)間;T &為視音頻幀的起 始時(shí)間;Tg為系統(tǒng)當(dāng)前時(shí)間;T A為時(shí)間偏差閾值;Tdelay為接收端接收到發(fā)送端發(fā)送的數(shù)據(jù) 的延遲Tdelay,T 5為T(mén)gs和T &每次需要修正的偏差。
[0026] -種分布式播放器流量控制系統(tǒng),包括:播放器1和播放器2 ;其中,
[0027] 所述播放器1,用于和播放器2控制層建立連接;向播放器2控制層發(fā)送解復(fù)用命 令CmcU ep_;收到解復(fù)用Ready消息后,根據(jù)所述解復(fù)用Ready消息包含的媒體信息構(gòu)建數(shù) 據(jù)接收模塊、解碼模塊和渲染模塊;并通知UI播放;UI操作播放后,向播放器2控制層發(fā)送 命令Cmd d_x;收到Play消息后,啟動(dòng)數(shù)據(jù)接收模塊、解碼模塊和渲染模塊;數(shù)據(jù)接收模塊接 收到原始流數(shù)據(jù)交給解碼模塊,解碼模塊解碼輸出的數(shù)據(jù)發(fā)送給渲染模塊,渲染模塊完成 植染輸出;
[0028] 所述播放器2,用于控制層收到CmcUPara后,根據(jù)所述解復(fù)用命令中的媒體文件信 息構(gòu)建解復(fù)用模塊和數(shù)據(jù)發(fā)送模塊;向所述播放器1控制層回復(fù)消息解復(fù)用Ready消息; 收到Cmdd_x命令后,啟動(dòng)解復(fù)用模塊,解復(fù)用模塊開(kāi)始從10中讀取媒體文件數(shù)據(jù),解復(fù)用 分離出原始流數(shù)據(jù),并通過(guò)數(shù)據(jù)發(fā)送模塊把原始流數(shù)據(jù)發(fā)送出去;向播放器1回復(fù)解復(fù)用 Play消息。
[0029] 所述播放器2還用于:所述解復(fù)用模塊和數(shù)據(jù)發(fā)送模塊初始化完成后,播放器2處 于Ready狀態(tài)之后,播放器2控制層會(huì)向播放器1控制層回復(fù)消息解復(fù)用Ready消息。
[0030] 所述播放器1和播放器2控制層在建立播放連接時(shí)要核對(duì)起始時(shí)鐘,保證兩端的 計(jì)時(shí)時(shí)鐘1^的同步。
[0031] 所述播放器1還用于:所述解碼模塊和渲染模塊初始化完成后,所有的播放模塊 都處于Ready狀態(tài),此時(shí)通知所述UI播放。所述播放器1播放的視音頻數(shù)據(jù)流在解復(fù)用完 畢以后根據(jù)視頻音頻信息打上時(shí)間戳信息T f;
[0032] 當(dāng)開(kāi)始播放的時(shí)候記錄下系統(tǒng)開(kāi)始時(shí)間Tgs和視音頻開(kāi)始時(shí)間T fs,當(dāng) ((Tf_Tfs) - (Tg_Tgs)) > T A,需要減緩發(fā)送的速度,避免擁塞;
[0033] 接受端將接收到視音頻幀數(shù)據(jù)的延遲時(shí)間Tdelay,發(fā)回發(fā)送端,當(dāng)T delay> 2*T A,設(shè) 以減慢發(fā)送速度;當(dāng)T<teiay<Ta,設(shè)置;=r>+rp,以加快發(fā)送速度;
[0034] 其中,Tf為視音頻幀的播放時(shí)間;T gs為播放時(shí)系統(tǒng)起始時(shí)間;T &為視音頻幀的起 始時(shí)間;Tg為系統(tǒng)當(dāng)前時(shí)間;T A為時(shí)間偏差閾值;Tdelay為接收端接收到發(fā)送端發(fā)送的數(shù)據(jù) 的延遲Tdelay,r*為T(mén) gs和T &每次需要修正的偏差。
[0035] 與現(xiàn)有技術(shù)相比,本申請(qǐng)所述的方法和系統(tǒng),達(dá)到了如下效果:
[0036]