本發(fā)明涉及多媒體技術(shù),尤其涉及一種流媒體傳輸方法、裝置、服務(wù)器及終端。
背景技術(shù):
隨著通信技術(shù)的發(fā)展,多媒體技術(shù)的應(yīng)用越來越廣。在多媒體數(shù)據(jù)的直播過程中,一般采用分段節(jié)目的方式進(jìn)行下載。分段節(jié)目是指在節(jié)目制作時將節(jié)目進(jìn)行分段,生成多個分段節(jié)目和播放列表。對于分段節(jié)目,播放時客戶端采用超文本傳輸協(xié)議流媒體直播(HLS,HTTP Live Streaming)協(xié)議首先獲取播放列表,即主M3U8,然后解析主M3U8獲取子M3U8的統(tǒng)一資源定位符(URL,Uniform Resource Locator),隨后根據(jù)子M3U8的URL獲取子M3U8,最后解析子M3U8獲取分段節(jié)目的URL,根據(jù)分段節(jié)目的URL依次獲取分段節(jié)目播放,這種方式能夠兼容現(xiàn)有的內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN,Content Delivery NetWorks)系統(tǒng)。
對于分段節(jié)目,啟動播放時,客戶端首先從服務(wù)器下載較低碼率的分段文件,然后啟動播放,在下載較低碼率的分段文件后,如果檢測到網(wǎng)絡(luò)帶寬比較高,就可以開始下載較高碼率的分段文件。在下載某一個分段文件的過程中,如果網(wǎng)絡(luò)帶寬發(fā)生變化,客戶端只有等待這個分段文件下載完成后,再根據(jù)網(wǎng)絡(luò)帶寬請求并下載碼率合適的分段文件。這種直播碼率切換的方法滯后于客戶端網(wǎng)絡(luò)帶寬的變化,從而增加了端到端的時延。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有存在的技術(shù)問題,本發(fā)明實(shí)施例提供一種流媒體傳輸方法、裝置、服務(wù)器及終端。
本發(fā)明實(shí)施例的技術(shù)方案是這樣實(shí)現(xiàn)的:
本發(fā)明實(shí)施例提供了一種流媒體傳輸方法,包括:
接收客戶端發(fā)送的流媒體播放請求;
響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);
在播放第一碼率的流媒體數(shù)據(jù)過程中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力;第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成;
所述第一數(shù)據(jù)單元發(fā)送完成后,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)。
上述方案中,響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù)之前,所述方法還包括:
針對每種碼率的流媒體數(shù)據(jù),在流媒體數(shù)據(jù)中添加第三參數(shù);所述第三參數(shù)表征媒體數(shù)據(jù)解碼信息;
相應(yīng)地,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)之前,所述方法還包括:
從第二碼率的流媒體數(shù)據(jù)中獲取對應(yīng)的第三參數(shù);
向所述客戶端發(fā)送第三參數(shù);發(fā)送的第三參數(shù)用于指示所述客戶端對解碼器進(jìn)行調(diào)整。
上述方案中,所述在流媒體數(shù)據(jù)中添加第三參數(shù),包括:
在每個數(shù)據(jù)單元中添加第三參數(shù);
相應(yīng)地,從所述第二數(shù)據(jù)單元中獲取對應(yīng)的第三參數(shù)。
上述方案中,所述在每個數(shù)據(jù)單元中添加第三參數(shù),包括:
在每個數(shù)據(jù)單元的起始位置添加第三參數(shù);
相應(yīng)地,從所述第二數(shù)據(jù)單元的起始位置獲取對應(yīng)的第三參數(shù)。
上述方案中,所述方法還包括:
在播放第一碼率的流媒體數(shù)據(jù)過程中獲取所述客戶端的第一參數(shù)及第二參數(shù)。
上述方案中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,所述方法還包括:
利用所述客戶端的第一參數(shù)及第二參數(shù),并結(jié)合服務(wù)器的第四參數(shù),確定進(jìn)行碼率切換;所述第四參數(shù)表征所述服務(wù)器當(dāng)前的流媒體處理能力。
上述方案中,響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù)之前,所述方法還包括:
生成不同碼率的流媒體數(shù)據(jù)時,將每種碼率的流媒體數(shù)據(jù)的數(shù)據(jù)單元在時間上對齊;
相應(yīng)地,所述利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元,包括:
從第一碼率的流媒體數(shù)據(jù)中確定第一數(shù)據(jù)單元對應(yīng)的時間;
利用確定的時間從第二碼率的流媒體數(shù)據(jù)中得到所述第二數(shù)據(jù)單元。
上述方案中,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù),包括:
采用超文本傳輸協(xié)議(HTTP)分塊傳輸(Chunk)的方式發(fā)送采用以下之一方式封裝的第二碼率的流媒體數(shù)據(jù):
基于MPEGTS封裝;
基于MPEGTS封裝后再基于實(shí)時傳輸協(xié)議(RTP)封裝;
基于MP4封裝;
基于FLV的標(biāo)簽(Flag)封裝。
本發(fā)明實(shí)施例還提供了一種流媒體傳輸方法,包括:
向服務(wù)器發(fā)送流媒體播放請求,并接收所述服務(wù)器發(fā)送的第一碼率的流媒體數(shù)據(jù);
在播放第一碼率的流媒體數(shù)據(jù)過程中,接收所述服務(wù)器發(fā)送的第二碼流的流媒體數(shù)據(jù);接收的第二碼率的流媒體數(shù)據(jù)是從第二碼流的第二數(shù)據(jù)單元開始的;
利用重置的解碼器解碼第二碼流的流媒體數(shù)據(jù),并進(jìn)行播放。
本發(fā)明實(shí)施例又提供了一種流媒體傳輸裝置,包括:
第一接收單元,用于接收客戶端發(fā)送的流媒體播放請求;
第一發(fā)送單元,用于響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);
切換單元,用于在播放第一碼率的流媒體數(shù)據(jù)過程中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力;第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成;
所述第一發(fā)送單元,還用于所述第一數(shù)據(jù)單元發(fā)送完成后,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)。
上述方案中,所述裝置還包括:
生成單元,用于針對每種碼率的流媒體數(shù)據(jù),在流媒體數(shù)據(jù)中添加第三參數(shù);所述第三參數(shù)表征媒體數(shù)據(jù)解碼信息;
切換單元,還用于從第二碼率的流媒體數(shù)據(jù)中獲取對應(yīng)的第三參數(shù);
所述第一發(fā)送單元,還用于從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)之前,向所述客戶端發(fā)送第三參數(shù);發(fā)送的第三參數(shù)用于指示所述客戶端對解碼器進(jìn)行調(diào)整。
上述方案中,所述裝置還包括:
獲取單元,用于在播放第一碼率的流媒體數(shù)據(jù)過程中獲取所述客戶端的第一參數(shù)及第二參數(shù)。
上述方案中,所述切換單元,用于利用所述客戶端的第一參數(shù)及第二參數(shù),并結(jié)合服務(wù)器的第四參數(shù),確定進(jìn)行碼率切換;所述第四參數(shù)表征所述服務(wù)器當(dāng)前的流媒體處理能力。
上述方案中,所述裝置還包括:
生成單元,用于生成不同碼率的流媒體數(shù)據(jù)時,將每種碼率的流媒體數(shù)據(jù)的數(shù)據(jù)單元在時間上對齊;
所述切換單元,具體用于:
從第一碼率的流媒體數(shù)據(jù)中確定第一數(shù)據(jù)單元對應(yīng)的時間;
利用確定的時間從第二碼率的流媒體數(shù)據(jù)中得到所述第二數(shù)據(jù)單元。
本發(fā)明實(shí)施例還提供了一種流媒體傳輸裝置,包括:
第二發(fā)送單元,用于向服務(wù)器發(fā)送流媒體播放請求;
第二接收單元,用于接收所述服務(wù)器發(fā)送的第一碼率的流媒體數(shù)據(jù);以及在播放第一碼率的流媒體數(shù)據(jù)過程中,接收所述服務(wù)器發(fā)送的第二碼流的流媒體數(shù)據(jù);接收的第二碼率的流媒體數(shù)據(jù)是從第二碼流的第二數(shù)據(jù)單元開始的;
播放單元,用于利用重置的解碼器解碼第二碼流的流媒體數(shù)據(jù),并進(jìn)行播放。
本發(fā)明實(shí)施例又提供了一種服務(wù)器,包括:
第一通信接口,用于接收客戶端發(fā)送的流媒體播放請求;響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);以及所述第一數(shù)據(jù)單元發(fā)送完成后,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù);
第一處理器,用于在播放第一碼率的流媒體數(shù)據(jù)過程中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率進(jìn)行時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力;第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成。
上述方案中,所述第一處理器,還用于響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù)之前針對每種碼率的流媒體數(shù)據(jù),在流媒體數(shù)據(jù)中添加第三參數(shù);所述第三參數(shù)表征媒體數(shù)據(jù)解碼信息;以及從第二碼率的流媒體數(shù)據(jù)中獲取對應(yīng)的第三參數(shù);
相應(yīng)地,所述第一通信接口,還用于從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)之前,向所述客戶端發(fā)送第三參數(shù);發(fā)送的第三參數(shù)用于指示所述客戶端對解碼器進(jìn)行調(diào)整。
上述方案中,所述第一處理器,還用于響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù)之前,生成不同碼率的流媒體數(shù)據(jù)時,將每種碼率的流媒體數(shù)據(jù)的數(shù)據(jù)單元在時間上對齊;
所述第一處理器,具體用于:
從第一碼率的流媒體數(shù)據(jù)中確定第一數(shù)據(jù)單元對應(yīng)的時間;
利用確定的時間從第二碼率的流媒體數(shù)據(jù)中得到所述第二數(shù)據(jù)單元。
本發(fā)明實(shí)施例還提供了一種終端,包括:
第二通信接口,用于向服務(wù)器發(fā)送流媒體播放請求,并接收所述服務(wù)器發(fā)送的第一碼率的流媒體數(shù)據(jù);以及在播放第一碼率的流媒體數(shù)據(jù)過程中,接收所述服務(wù)器發(fā)送的第二碼流的流媒體數(shù)據(jù);接收的第二碼率的流媒體數(shù)據(jù)是從第二碼流的第二數(shù)據(jù)單元開始的;
第二處理器,用于利用重置的解碼器解碼第二碼流的流媒體數(shù)據(jù),并進(jìn)行播放。
本發(fā)明實(shí)施例提供的流媒體傳輸方法、裝置、服務(wù)器及終端,接收客戶端發(fā)送的流媒體播放請求;響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);在播放第一碼率的流媒體數(shù)據(jù)過程中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力;第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成;所述第一數(shù)據(jù)單元發(fā)送完成后,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù),由服務(wù)器端根據(jù)所述客戶端的第一參數(shù)及第二參數(shù)來確定進(jìn)行碼率切換,如此,能夠根據(jù)客戶端的網(wǎng)絡(luò)帶寬及解碼能力及時地進(jìn)行碼率的切換,減少了端到端的時延。而且,流媒體數(shù)據(jù)僅劃分成了不同的數(shù)據(jù)單元,如此,不需要服務(wù)器端去準(zhǔn)備索引和分段文件,減少了流媒體數(shù)據(jù)在服務(wù)器端的緩存時間,進(jìn)一步減少了端到端的時延。
附圖說明
在附圖(其不一定是按比例繪制的)中,相似的附圖標(biāo)記可在不同的視圖中描述相似的部件。具有不同字母后綴的相似附圖標(biāo)記可表示相似部件的不同示例。附圖以示例而非限制的方式大體示出了本文中所討論的各個實(shí)施例。
圖1為本發(fā)明實(shí)施例一流媒體傳輸?shù)姆椒鞒淌疽鈭D;
圖2為本發(fā)明實(shí)施例二一種流媒體傳輸系統(tǒng)結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例二另一種流媒體傳輸系統(tǒng)結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例二服務(wù)器端和客戶端交互的流程示意圖;
圖5為本發(fā)明實(shí)施例三多種碼流的碼流結(jié)構(gòu)示意圖;
圖6為本發(fā)明實(shí)施例四多種碼流的碼流結(jié)構(gòu)示意圖;
圖7為本發(fā)明實(shí)施例五多種碼流的碼流結(jié)構(gòu)示意圖;
圖8為本發(fā)明實(shí)施例六多種碼流的碼流結(jié)構(gòu)示意圖;
圖9為本發(fā)明實(shí)施例七一種流媒體傳輸裝置結(jié)構(gòu)示意圖;
圖10為本發(fā)明實(shí)施例七另一種流媒體傳輸裝置結(jié)構(gòu)示意圖;
圖11為本發(fā)明實(shí)施例服務(wù)器結(jié)構(gòu)示意圖;
圖12為本發(fā)明實(shí)施例終端結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖及實(shí)施例對本發(fā)明再作進(jìn)一步詳細(xì)的描述。
當(dāng)前直播過程中碼率切換的方法,當(dāng)檢測到網(wǎng)絡(luò)帶寬發(fā)生變化時,客戶端只有在當(dāng)前的分段文件下載完成后才能根據(jù)網(wǎng)絡(luò)帶寬向服務(wù)器端請求并下載碼率合適的分段文件,這種切換方式是滯后于客戶端網(wǎng)絡(luò)帶寬的變化的,碼率切換的實(shí)時性差;另一方面,由于文件是以分段為單位進(jìn)行下載的,所以服務(wù)器端需要根據(jù)客戶端的請求至少需要緩存一個分段文件才能發(fā)送給客戶端,這也需要服務(wù)器端消耗一定的時長去得到這個分段文件,兩方面的原因?qū)е驴蛻舳酥辈サ臅r延長,用戶體驗(yàn)差。在實(shí)際的HLS時延測量試驗(yàn)中發(fā)現(xiàn),即使在播放時長為1秒一個分段文件,利用清流傳輸這樣一個實(shí)驗(yàn)條件下,測量得到端到端的時延也超過了5秒,大大影響了用戶體驗(yàn)。
基于此,在本發(fā)明的各種實(shí)施例中:接收客戶端發(fā)送的流媒體播放請求;響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);在播放第一碼率的流媒體數(shù)據(jù)過程中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力;第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成;所述第一數(shù)據(jù)單元發(fā)送完成后,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)。
實(shí)施例一
本發(fā)明實(shí)施例流媒體傳輸方法,應(yīng)用于服務(wù)器,具體來說是媒體服務(wù)器,如圖1所示,該方法包括以下步驟:
步驟101:接收客戶端發(fā)送的流媒體播放請求;
步驟102:響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);
步驟103:在播放第一碼率的流媒體數(shù)據(jù)過程中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;
這里,所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力。
其中,實(shí)際應(yīng)用時,所述第二參數(shù)可以是所述客戶端的系統(tǒng)資源,包含:CPU、內(nèi)存的使用情況等。本發(fā)明實(shí)施例并不對所述第二參數(shù)進(jìn)行限定,只要是能反映客戶端的解碼能力的信息即可。
這里,實(shí)際應(yīng)用時,服務(wù)器在播放第一碼率的流媒體數(shù)據(jù)過程中獲取所述客戶端的第一參數(shù)及第二參數(shù),以便能夠及時作出是否要進(jìn)行碼率切換的決策,降低端到端的時延。
其中,服務(wù)器可以通過以下方式之一獲取到第一參數(shù)及第二參數(shù):
所述客戶端向網(wǎng)絡(luò)側(cè)設(shè)備上報(bào)自身的第一參數(shù)及第二參數(shù),網(wǎng)絡(luò)側(cè)設(shè)備向服務(wù)器上報(bào)所述客戶端的第一參數(shù)及第二參數(shù);
服務(wù)器通過仿真客戶端的網(wǎng)絡(luò)狀態(tài),得到第一參數(shù),并通過仿真所述客戶單的狀態(tài),來得到第二參數(shù)。
第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成。
換句話說,不同碼率的流媒體數(shù)據(jù)是由多個數(shù)據(jù)單元的數(shù)據(jù)組成的,實(shí)際應(yīng)用時,可以根據(jù)時延的具體要求,來確定流媒體數(shù)據(jù)由多少個數(shù)據(jù)單元組成。
在本步驟中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,服務(wù)器還可以利用所述客戶端的第一參數(shù)及第二參數(shù),并結(jié)合服務(wù)器的第四參數(shù),確定進(jìn)行碼率切換;所述第四參數(shù)表征所述服務(wù)器當(dāng)前的流媒體處理能力。在碼率切換決策過程中,既考慮了客戶端的網(wǎng)絡(luò)帶寬和解碼能力,又考慮了服務(wù)器側(cè)的處理能力,如此,能夠進(jìn)一步降低端到端的時延。
這里,所述第四參數(shù)可以是CPU、內(nèi)存的使用情況等。本發(fā)明實(shí)施例并不對此作限定,只要是能反映服務(wù)器的流媒體處理能力的信息即可。
實(shí)際應(yīng)用時,服務(wù)器利用所述客戶端的第一參數(shù)及第二參數(shù),來進(jìn)行碼率切換決策,或者利用所述客戶端的第一參數(shù)及第二參數(shù),并結(jié)合服務(wù)器的第四參數(shù)進(jìn)行碼率切換決策時,可以有很多種決策方式,本發(fā)明實(shí)施例并不對此進(jìn)行限定,舉個例子來說,當(dāng)服務(wù)器利用所述客戶端的第一參數(shù)及第二參數(shù),并結(jié)合服務(wù)器的第四參數(shù)進(jìn)行碼率切換決策時,可以先考慮服務(wù)器的CPU使用情況,當(dāng)CPU空閑超過30%時,再比較第一參數(shù)及第二參數(shù),當(dāng)所述客戶端的網(wǎng)絡(luò)帶寬為10M,CPU空閑超過90%,且內(nèi)存占用低于50%時,決定進(jìn)行碼率切換,即將碼率切換為高碼率,比如高清等。
步驟104:所述第一數(shù)據(jù)單元發(fā)送完成后,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)。
實(shí)際應(yīng)用時,在執(zhí)行步驟102之前,所述服務(wù)器還可以根據(jù)得到的流媒體數(shù)據(jù)生成不同碼率的流媒體數(shù)據(jù),且針對每種碼率的流媒體數(shù)據(jù),在流媒體數(shù)據(jù)中添加第三參數(shù);所述第三參數(shù)表征媒體數(shù)據(jù)解碼信息;
相應(yīng)地,執(zhí)行步驟104之前,該方法還可以包括:
從第二碼率的流媒體數(shù)據(jù)中獲取對應(yīng)的第三參數(shù);
向所述客戶端發(fā)送第三參數(shù);發(fā)送的第三參數(shù)用于指示所述客戶端對解碼器進(jìn)行調(diào)整。
其中,在流媒體數(shù)據(jù)中添加第三參數(shù),當(dāng)服務(wù)器確定進(jìn)行碼率切換時,服務(wù)器能夠快速獲知對應(yīng)碼率的流媒體數(shù)據(jù)的解碼信息,并通知給所述客戶端,進(jìn)而能夠讓所述客戶端盡快重置解碼器,從而減少播放時延。
這里,所述在流媒體數(shù)據(jù)中添加第三參數(shù),具體包括:
在每個數(shù)據(jù)單元中添加第三參數(shù);
相應(yīng)地,從所述第二數(shù)據(jù)單元中獲取對應(yīng)的第三參數(shù)。
其中,由于每個數(shù)據(jù)單元中均添加有第三參數(shù),所以只要服務(wù)器確定第二數(shù)據(jù)單元后,即可從第二數(shù)據(jù)單元中直接獲取第三參數(shù),無需再去重新去其它位置獲取第三參數(shù),如此,能夠快速地獲取第二碼率的流媒體數(shù)據(jù)對應(yīng)的第三參數(shù)。
在一實(shí)施例中,可以在每個數(shù)據(jù)單元的起始位置添加第三參數(shù);相應(yīng)地,所述服務(wù)器從所述第二數(shù)據(jù)單元的起始位置獲取對應(yīng)的第三參數(shù)。
這里,在數(shù)據(jù)單元的起始位置添加第三參數(shù),如此,能進(jìn)一步快速地獲取第二碼率的流媒體數(shù)據(jù)對應(yīng)的第三參數(shù)。
在一實(shí)施例中,所述服務(wù)器根據(jù)得到的流媒體數(shù)據(jù)生成不同碼率的流媒體數(shù)據(jù)時,可以將每種碼率的流媒體數(shù)據(jù)的數(shù)據(jù)單元在時間上對齊;
相應(yīng)地,所述利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元,具體包括:
從第一碼率的流媒體數(shù)據(jù)中確定第一數(shù)據(jù)單元對應(yīng)的時間;
利用確定的時間從第二碼率的流媒體數(shù)據(jù)中得到所述第二數(shù)據(jù)單元。
每種碼率的流媒體數(shù)據(jù)的數(shù)據(jù)單元在時間上對齊,這樣服務(wù)器可以根據(jù)第一數(shù)據(jù)單元快速得到第二數(shù)據(jù)單元。
實(shí)際應(yīng)用時,在向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)時,服務(wù)器可以采用HTTP Chunk的方式發(fā)送基于MPEGTS封裝的第二碼率的流媒體數(shù)據(jù),還可以采用HTTP Chunk的方式發(fā)送先基于MPEGTS封裝后再基于RTP封裝的第二碼率的流媒體數(shù)據(jù),也可以采用HTTP Chunk的方式發(fā)送基于MP4封裝的第二碼率的流媒體數(shù)據(jù),還可以采用HTTP Chunk的方式發(fā)送基于FLV的Flag封裝的第二碼率的流媒體數(shù)據(jù),以滿足傳輸需求。
從上面的描述中可以看出,本發(fā)明實(shí)施例提供的方案,是基于一次流媒體播放請求向客戶端傳輸流媒體數(shù)據(jù)的方案,是一種基于HTTP的流媒體數(shù)據(jù)的傳輸方案。
相應(yīng)地,本發(fā)明實(shí)施例還提供了一種流媒體傳輸方法,應(yīng)用于客戶端,具體來說是位于終端的客戶端,包括以下步驟:
向服務(wù)器發(fā)送流媒體播放請求,并接收所述服務(wù)器發(fā)送的第一碼率的流媒體數(shù)據(jù);
在播放第一碼率的流媒體數(shù)據(jù)過程中,接收所述服務(wù)器發(fā)送的第二碼流的流媒體數(shù)據(jù);接收的第二碼率的流媒體數(shù)據(jù)是從第二碼流的第二數(shù)據(jù)單元開始的;
利用重置的解碼器解碼第二碼流的流媒體數(shù)據(jù),并進(jìn)行播放。
其中,所述重置的解碼器是指:將解碼第一碼率的流媒體數(shù)據(jù)的解碼器進(jìn)行重置,以便利用重置的解碼器解碼第二碼流的流媒體數(shù)據(jù)。
本發(fā)明實(shí)施例提供的方案,特別適用于直播場景,此時服務(wù)器端的數(shù)據(jù)流是實(shí)時注入的,也就是說,向客戶端發(fā)送的流媒體數(shù)據(jù)是服務(wù)器端實(shí)時接收到的流媒體數(shù)據(jù)。當(dāng)然,實(shí)際應(yīng)用時,本發(fā)明實(shí)施例提供的方案也可以適用在點(diǎn)播場景下。
本發(fā)明實(shí)施例提供的流媒體傳輸方法,接收客戶端發(fā)送的流媒體播放請求;響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);在播放第一碼率的流媒體數(shù)據(jù)過程中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力;第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成;所述第一數(shù)據(jù)單元發(fā)送完成后,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù),由服務(wù)器端根據(jù)所述客戶端的第一參數(shù)及第二參數(shù)來確定進(jìn)行碼率切換,如此,能夠根據(jù)客戶端的網(wǎng)絡(luò)帶寬及解碼能力及時地進(jìn)行碼率的切換,減少了端到端的時延。而且,流媒體數(shù)據(jù)僅劃分成了不同的數(shù)據(jù)單元,如此,不需要服務(wù)器端去準(zhǔn)備索引和分段文件,減少了流媒體數(shù)據(jù)在服務(wù)器端的緩存時間,進(jìn)一步減少了端到端的時延。
實(shí)施例二
在實(shí)施例一的基礎(chǔ)上,本實(shí)施例詳細(xì)描述碼率切換的過程。
在本實(shí)施例中,如圖2或3所示,媒體服務(wù)器可以生成高清(高碼率)、標(biāo)清(中碼率)以及流暢三路碼流(低碼率),直播時,客戶端所在的終端向媒體服務(wù)器發(fā)送HTTP GET請求;而媒體服務(wù)器收到請求后,可以根據(jù)終端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源,在這三路碼流中選擇合適的碼率的流媒體數(shù)據(jù),通過HTTPGET響應(yīng)發(fā)送給終端。在該過程中,如圖2所示,終端向網(wǎng)絡(luò)服務(wù)器實(shí)時上報(bào)自身的網(wǎng)絡(luò)帶寬,并向狀態(tài)服務(wù)器實(shí)時上報(bào)自身的系統(tǒng)資源,網(wǎng)絡(luò)服務(wù)器實(shí)時將終端的網(wǎng)絡(luò)帶寬發(fā)送給媒體服務(wù)器,狀態(tài)服務(wù)器實(shí)時將終端的系統(tǒng)資源發(fā)送給媒體服務(wù)器,以便媒體服務(wù)器可以實(shí)時獲取到終端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源。當(dāng)然,如圖3所示,媒體服務(wù)器還可以通過仿真終端的網(wǎng)絡(luò)狀態(tài)和終端狀態(tài),來實(shí)時獲取到終端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源。
本實(shí)施例服務(wù)器端和客戶端交互的流程,如圖4所示,包括以下步驟:
步驟401:媒體服務(wù)器利用獲取的媒體流數(shù)據(jù),分別生成高清、標(biāo)清和流暢三路碼流;
這里,三路碼流均由多個數(shù)據(jù)單元組成。
步驟402:在每路碼流的每個數(shù)據(jù)單元的起始位置增加媒體數(shù)據(jù)解碼信息;
這樣在每路碼流的每個數(shù)據(jù)單元處,既可以獲知媒體數(shù)據(jù)解碼信息,從而可以快速進(jìn)行碼率切換。
步驟403:啟動播放時,客戶端獲取碼流的HTTP URL;
這里,所述客戶端接收用戶的操作,響應(yīng)用戶的操作從網(wǎng)頁中獲取碼流的HTTP URL。
步驟404:根據(jù)碼流的HTTP URL,向媒體服務(wù)器發(fā)送HTTP GET請求,以從媒體服務(wù)器獲取流媒體數(shù)據(jù);
這里,收到HTTP GET請求后,媒體服務(wù)器可以實(shí)時獲取到客戶端所在終端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源,可以采用圖2或圖3所描述的方式獲取客戶端所在終端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源。
步驟405:媒體服務(wù)器收到HTTP GET請求后,先向客戶端發(fā)送流暢碼流,以便客戶端能夠正常啟動:
步驟406:客戶端收到流暢碼流后,利用相應(yīng)的解碼器解碼流暢碼流,并進(jìn)行播放;
步驟407:在播放過程中,媒體服務(wù)器根據(jù)實(shí)時獲取的客戶端所在的終端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源、自身的流媒體處理能力,來決策是否進(jìn)行碼率切換,當(dāng)確定要進(jìn)行碼率切換時,向客戶端發(fā)送媒體數(shù)據(jù)解碼信息;
這里,媒體服務(wù)器根據(jù)正在發(fā)送的數(shù)據(jù)單元確定另外一檔碼率對應(yīng)的數(shù)據(jù)單元的位置,然后從另外一檔碼率對應(yīng)的數(shù)據(jù)單元得到媒體數(shù)據(jù)解碼信息,并發(fā)送給客戶端。
假設(shè)媒體服務(wù)器根據(jù)實(shí)時獲取的客戶端所在的終端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源、自身的流媒體處理能力,決定碼率可以切換到標(biāo)清碼率,此時,媒體服務(wù)器根據(jù)正在發(fā)送的流暢碼流的數(shù)據(jù)單元確定標(biāo)清碼率的碼流對應(yīng)的數(shù)據(jù)單元,并從標(biāo)清碼率的碼流對應(yīng)的數(shù)據(jù)單元得到數(shù)據(jù)解碼信息,并發(fā)送給客戶端。
步驟408:客戶端基于接收的媒體數(shù)據(jù)解碼信息重置解碼器;
步驟409:媒體服務(wù)器向客戶端發(fā)送碼率切換后對應(yīng)碼率的碼流;
步驟410:客戶端利用重置的解碼器解碼相應(yīng)的碼流,并進(jìn)行播放。
針對上述例子,在步驟408中,客戶端基于標(biāo)清碼率對應(yīng)的媒體數(shù)據(jù)解碼信息重置解碼器;在步驟409中,媒體服務(wù)器向客戶端發(fā)送標(biāo)清碼流;在步驟410中,客戶端利用重置的解碼器解碼標(biāo)清碼流,并進(jìn)行播放。
從上面的描述中可以看出,本發(fā)明實(shí)施例提供的方案,媒體服務(wù)器和客戶端采用HTTP進(jìn)行流式傳輸,由媒體服務(wù)器進(jìn)行碼率切換,避免了使用索引文件和分片文件,從而減少了碼流端到端的傳輸延時。
實(shí)施例三
在實(shí)施例一、二的基礎(chǔ)上,本實(shí)施例詳細(xì)描述媒體服務(wù)器和客戶端進(jìn)行交互的過程。該過程包括以下步驟:
步驟A1:媒體服務(wù)器生成多種碼率的碼流;
具體地,在每種碼率的碼流的數(shù)據(jù)單元處增加媒體解碼信息,且如圖5所示,每種碼率的碼流的數(shù)據(jù)單元在時間上進(jìn)行對齊。每一種碼率的音視頻采用MPEGTS進(jìn)行封裝。假設(shè)三種低、中、高碼率。
步驟B1:啟動播放的過程中,客戶端首先獲取媒體流的HTTP URL,然后發(fā)送HTTP請求,以從媒體服務(wù)器上獲取碼流;
具體地,獲取的HTTP URL中包括頻道的名稱,然后根據(jù)HTTP URL發(fā)送HTTP GET請求到媒體服務(wù)器。
步驟C1:媒體服務(wù)器收到請求后,先發(fā)送低碼率的碼流,以便讓客戶端正常啟動;
這里,媒體服務(wù)器首先發(fā)送HTTP響應(yīng)頭部,然后采用HTTP Chunk的方式發(fā)送低碼率的PAT、PMT、IDR和TS數(shù)據(jù)包。
步驟D1:媒體服務(wù)器實(shí)時獲取客戶端端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源;
步驟E1:媒體服務(wù)器根據(jù)客戶端端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源發(fā)現(xiàn)可以發(fā)送較高碼率的碼流,媒體服務(wù)器在數(shù)據(jù)單元處計(jì)算出較高碼率對應(yīng)的數(shù)據(jù)單元的位置,并獲得對應(yīng)的媒體解碼信息,并發(fā)送給客戶端,以便進(jìn)行解碼器的重置;
步驟F1:隨后媒體服務(wù)器立即進(jìn)行碼率切換,發(fā)送較高碼率的碼流;
具體地,媒體服務(wù)器從計(jì)算出的較高碼率對應(yīng)的數(shù)據(jù)單元的位置開始,向客戶端發(fā)送新的媒體流的PAT、PMT、IDR和TS數(shù)據(jù)包。
步驟H1:客戶端在接收碼流的過程中接收到媒體解碼信息,發(fā)現(xiàn)碼率發(fā)生了切換,利用接收的媒體解碼信息重置解碼器,然后接收較高碼率的碼流進(jìn)行播放。
實(shí)施例四
在實(shí)施例一、二的基礎(chǔ)上,本實(shí)施例詳細(xì)描述媒體服務(wù)器和客戶端進(jìn)行交互的過程。該過程包括以下步驟:
步驟A2:媒體服務(wù)器生成多種碼率的碼流;
具體地,在每種碼率的碼流的數(shù)據(jù)單元處增加媒體解碼信息,且如圖6所示,每種碼率的碼流的數(shù)據(jù)單元在時間上進(jìn)行對齊。每一種碼率的音視頻采用MPEGTS進(jìn)行封裝,然后在采用RTP包進(jìn)行封裝。假設(shè)三種低、中、高碼率。
步驟B2:啟動播放的過程中,客戶端首先獲取媒體流的HTTP URL,然后發(fā)送HTTP請求,以從媒體服務(wù)器上獲取碼流;
具體地,獲取的HTTP URL中包括頻道的名稱,然后根據(jù)HTTP URL發(fā)送HTTP GET請求到媒體服務(wù)器。
步驟C2:媒體服務(wù)器收到請求后,先發(fā)送低碼率的碼流,以便讓客戶端正常啟動;
這里,媒體服務(wù)器首先發(fā)送HTTP響應(yīng)頭部,然后采用HTTP Chunk的方式發(fā)送低碼率的RTP數(shù)據(jù)包。
步驟D2:媒體服務(wù)器實(shí)時獲取客戶端端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源;
步驟E2:媒體服務(wù)器根據(jù)客戶端端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源發(fā)現(xiàn)可以發(fā)送較高碼率的碼流,媒體服務(wù)器在數(shù)據(jù)單元處計(jì)算出較高碼率對應(yīng)的數(shù)據(jù)單元的位置,并獲得對應(yīng)的媒體解碼信息,并發(fā)送給客戶端,以便進(jìn)行解碼器的重置;
步驟F2:隨后媒體服務(wù)器立即進(jìn)行碼率切換,發(fā)送較高碼率的碼流;
具體地,媒體服務(wù)器從計(jì)算出的較高碼率對應(yīng)的數(shù)據(jù)單元的位置開始,向客戶端發(fā)送新的媒體流的RTP數(shù)據(jù)包。
步驟H2:客戶端在接收碼流的過程中接收到媒體解碼信息,發(fā)現(xiàn)碼率發(fā)生了切換,利用接收的媒體解碼信息重置解碼器,然后接收較高碼率的碼流進(jìn)行播放。
實(shí)施例五
在實(shí)施例一、二的基礎(chǔ)上,本實(shí)施例詳細(xì)描述媒體服務(wù)器和客戶端進(jìn)行交互的過程。該過程包括以下步驟:
步驟A3:媒體服務(wù)器生成多種碼率的碼流;
具體地,在每種碼率的碼流的數(shù)據(jù)單元處增加媒體解碼信息,且如圖7所示,每種碼率的碼流的數(shù)據(jù)單元在時間上進(jìn)行對齊。每一種碼率的音視頻采用MP4進(jìn)行封裝。假設(shè)三種低、中、高碼率。
步驟B3:啟動播放的過程中,客戶端首先獲取媒體流的HTTP URL,然后發(fā)送HTTP請求,以從媒體服務(wù)器上獲取碼流;
具體地,獲取的HTTP URL中包括頻道的名稱,然后根據(jù)HTTP URL發(fā)送HTTP GET請求到媒體服務(wù)器。
步驟C3:媒體服務(wù)器收到請求后,先發(fā)送低碼率的碼流,以便讓客戶端正常啟動;
這里,媒體服務(wù)器首先發(fā)送HTTP響應(yīng)頭部,然后采用HTTP Chunk的方式發(fā)送低碼率的MP4數(shù)據(jù)包。
步驟D3:媒體服務(wù)器實(shí)時獲取客戶端端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源;
步驟E3:媒體服務(wù)器根據(jù)客戶端端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源發(fā)現(xiàn)可以發(fā)送較高碼率的碼流,媒體服務(wù)器在數(shù)據(jù)單元處計(jì)算出較高碼率對應(yīng)的數(shù)據(jù)單元的位置,并獲得對應(yīng)的媒體解碼信息,并發(fā)送給客戶端,以便進(jìn)行解碼器的重置;
步驟F3:隨后媒體服務(wù)器立即進(jìn)行碼率切換,發(fā)送較高碼率的碼流;
具體地,媒體服務(wù)器從計(jì)算出的較高碼率對應(yīng)的數(shù)據(jù)單元的位置開始,向客戶端發(fā)送新的媒體流的MP4數(shù)據(jù)包。
步驟H3:客戶端在接收碼流的過程中接收到媒體解碼信息,發(fā)現(xiàn)碼率發(fā)生了切換,利用接收的媒體解碼信息重置解碼器,然后接收較高碼率的碼流進(jìn)行播放。
實(shí)施例六
在實(shí)施例一、二的基礎(chǔ)上,本實(shí)施例詳細(xì)描述媒體服務(wù)器和客戶端進(jìn)行交互的過程。該過程包括以下步驟:
步驟A4:媒體服務(wù)器生成多種碼率的碼流;
具體地,在每種碼率的碼流的數(shù)據(jù)單元處增加媒體解碼信息,且如圖8所示,每種碼率的碼流的數(shù)據(jù)單元在時間上進(jìn)行對齊。每一種碼率的音視頻采用FLV的Flag進(jìn)行封裝。假設(shè)三種低、中、高碼率。
步驟B4:啟動播放的過程中,客戶端首先獲取媒體流的HTTP URL,然后發(fā)送HTTP請求,以從媒體服務(wù)器上獲取碼流;
具體地,獲取的HTTP URL中包括頻道的名稱,然后根據(jù)HTTP URL發(fā)送HTTP GET請求到媒體服務(wù)器。
步驟C4:媒體服務(wù)器收到請求后,先發(fā)送低碼率的碼流,以便讓客戶端正常啟動;
這里,媒體服務(wù)器首先發(fā)送HTTP響應(yīng)頭部,然后采用HTTP Chunk的方式發(fā)送低碼率的FLVHeader(頭)、PreviousTagSize0和Tag數(shù)據(jù)包。
步驟D4:媒體服務(wù)器實(shí)時獲取客戶端端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源;
步驟E4:媒體服務(wù)器根據(jù)客戶端端的網(wǎng)絡(luò)帶寬及系統(tǒng)資源發(fā)現(xiàn)可以發(fā)送較高碼率的碼流,媒體服務(wù)器在數(shù)據(jù)單元處計(jì)算出較高碼率對應(yīng)的數(shù)據(jù)單元的位置,并獲得對應(yīng)的媒體解碼信息,并發(fā)送給客戶端,以便進(jìn)行解碼器的重置;
步驟F4:隨后媒體服務(wù)器立即進(jìn)行碼率切換,發(fā)送較高碼率的碼流;
具體地,媒體服務(wù)器從計(jì)算出的較高碼率對應(yīng)的數(shù)據(jù)單元的位置開始,向客戶端發(fā)送新的媒體流的Tag數(shù)據(jù)包數(shù)據(jù)包。
步驟H4:客戶端在接收碼流的過程中接收到媒體解碼信息,發(fā)現(xiàn)碼率發(fā)生了切換,利用接收的媒體解碼信息重置解碼器,然后接收較高碼率的碼流進(jìn)行播放。
需要說明的是:在實(shí)施例二至六中,實(shí)際應(yīng)用時,高、中、低碼率可以根據(jù)需要碼率大小來區(qū)分。舉個例子來說,通常,可以將碼率為8M的碼流稱為高碼率的碼流,可以將碼率為4M的碼率稱為中碼率的碼流,可以將碼率為2M的碼流稱為低碼率的碼流。
實(shí)施例七
為實(shí)現(xiàn)本發(fā)明實(shí)施例的方法,本實(shí)施例提供一種流媒體傳輸裝置,設(shè)置在服務(wù)器,具體來說是媒體服務(wù)器,如圖9所示,該裝置包括:
第一接收單元91,用于接收客戶端發(fā)送的流媒體播放請求;
第一發(fā)送單元92,用于響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);
切換單元93,用于在播放第一碼率的流媒體數(shù)據(jù)過程中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力;第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成;
所述第一發(fā)送單元92,還用于所述第一數(shù)據(jù)單元發(fā)送完成后,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)。
其中,實(shí)際應(yīng)用時,所述第二參數(shù)可以是所述客戶端的系統(tǒng)資源,包含:CPU、內(nèi)存的使用情況等。本發(fā)明實(shí)施例并不對所述第二參數(shù)進(jìn)行限定,只要是能反映客戶端的解碼能力的信息即可。
在一實(shí)施例中,該裝置還可以包括:
獲取單元,用于在播放第一碼率的流媒體數(shù)據(jù)過程中獲取所述客戶端的第一參數(shù)及第二參數(shù),以便能夠及時作出是否要進(jìn)行碼率切換的決策,降低端到端的時延。
其中,所述獲取單元可以通過以下方式之一獲取到第一參數(shù)及第二參數(shù):
所述客戶端向網(wǎng)絡(luò)側(cè)設(shè)備上報(bào)自身的第一參數(shù)及第二參數(shù),網(wǎng)絡(luò)側(cè)設(shè)備向獲取單元上報(bào)所述客戶端的第一參數(shù)及第二參數(shù);
獲取單元通過仿真客戶端的網(wǎng)絡(luò)狀態(tài),得到第一參數(shù),并通過仿真所述客戶單的狀態(tài),來得到第二參數(shù)。
不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成。換句話說,不同碼率的流媒體數(shù)據(jù)是由多個數(shù)據(jù)單元的數(shù)據(jù)組成的,實(shí)際應(yīng)用時,可以根據(jù)時延的具體要求,來確定流媒體數(shù)據(jù)由多少個數(shù)據(jù)單元組成。
在一實(shí)施例中,所述切換單元93還可以利用所述客戶端的第一參數(shù)及第二參數(shù),并結(jié)合服務(wù)器的第四參數(shù),確定進(jìn)行碼率切換;所述第四參數(shù)表征所述服務(wù)器當(dāng)前的流媒體處理能力。在碼率切換決策過程中,既考慮了客戶端的網(wǎng)絡(luò)帶寬和解碼能力,又考慮了服務(wù)器側(cè)的處理能力,如此,能夠進(jìn)一步降低端到端的時延。
這里,所述第四參數(shù)可以是CPU、內(nèi)存的使用情況等。本發(fā)明實(shí)施例并不對此作限定,只要是能反映服務(wù)器的流媒體處理能力的信息即可。
實(shí)際應(yīng)用時,所述切換單元93利用所述客戶端的第一參數(shù)及第二參數(shù),來進(jìn)行碼率切換決策,或者利用所述客戶端的第一參數(shù)及第二參數(shù),并結(jié)合服務(wù)器的第四參數(shù)進(jìn)行碼率切換決策時,可以有很多種決策方式,本發(fā)明實(shí)施例并不對此進(jìn)行限定,舉個例子來說,當(dāng)所述切換單元93利用所述客戶端的第一參數(shù)及第二參數(shù),并結(jié)合服務(wù)器的第四參數(shù)進(jìn)行碼率切換決策時,可以先考慮服務(wù)器的CPU使用情況,當(dāng)CPU空閑超過30%時,再比較第一參數(shù)及第二參數(shù),當(dāng)所述客戶端的網(wǎng)絡(luò)帶寬為10M,CPU空閑超過90%,且內(nèi)存占用低于50%時,決定進(jìn)行碼率切換,即將碼率切換為高碼率,比如高清等。
實(shí)際應(yīng)用時,該裝置還可以包括:
生成單元,用于根據(jù)得到的流媒體數(shù)據(jù)生成不同碼率的流媒體數(shù)據(jù),且針對每種碼率的流媒體數(shù)據(jù),在流媒體數(shù)據(jù)中添加第三參數(shù);所述第三參數(shù)表征媒體數(shù)據(jù)解碼信息;
相應(yīng)地,所述切換單元93,還用于從第二碼率的流媒體數(shù)據(jù)中獲取對應(yīng)的第三參數(shù);
所述第一發(fā)送單元92,還用于從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)之前,向所述客戶端發(fā)送第三參數(shù);發(fā)送的第三參數(shù)用于指示所述客戶端對解碼器進(jìn)行調(diào)整。
其中,在流媒體數(shù)據(jù)中添加第三參數(shù),當(dāng)服務(wù)器確定進(jìn)行碼率切換時,服務(wù)器能夠快速獲知對應(yīng)碼率的流媒體數(shù)據(jù)的解碼信息,并通知給所述客戶端,進(jìn)而能夠讓所述客戶端盡快重置解碼器,從而減少播放時延。
這里,所述在流媒體數(shù)據(jù)中添加第三參數(shù),具體包括:
所述生成單元在每個數(shù)據(jù)單元中添加第三參數(shù);
相應(yīng)地,所述切換單元93從所述第二數(shù)據(jù)單元中獲取對應(yīng)的第三參數(shù)。
其中,由于每個數(shù)據(jù)單元中均添加有第三參數(shù),所以只要切換單元83確定第二數(shù)據(jù)單元后,即可從第二數(shù)據(jù)單元中直接獲取第三參數(shù),無需再去重新去其它位置獲取第三參數(shù),如此,能夠快速地獲取第二碼率的流媒體數(shù)據(jù)對應(yīng)的第三參數(shù)。
在一實(shí)施例中,所述生成單元可以在每個數(shù)據(jù)單元的起始位置添加第三參數(shù);相應(yīng)地,所述切換單元93從所述第二數(shù)據(jù)單元的起始位置獲取對應(yīng)的第三參數(shù)。
這里,在數(shù)據(jù)單元的起始位置添加第三參數(shù),如此,能進(jìn)一步快速地獲取第二碼率的流媒體數(shù)據(jù)對應(yīng)的第三參數(shù)。
實(shí)際應(yīng)用時,所述生成單元根據(jù)得到的流媒體數(shù)據(jù)生成不同碼率的流媒體數(shù)據(jù)時,可以將每種碼率的流媒體數(shù)據(jù)的數(shù)據(jù)單元在時間上對齊;
相應(yīng)地,所述切換單元93,具體用于:
從第一碼率的流媒體數(shù)據(jù)中確定第一數(shù)據(jù)單元對應(yīng)的時間;
利用確定的時間從第二碼率的流媒體數(shù)據(jù)中得到所述第二數(shù)據(jù)單元。
每種碼率的流媒體數(shù)據(jù)的數(shù)據(jù)單元在時間上對齊,這樣服務(wù)器可以根據(jù)第一數(shù)據(jù)單元快速得到第二數(shù)據(jù)單元。
實(shí)際應(yīng)用時,在向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)時,所述第一發(fā)送單元92可以采用HTTP Chunk的方式發(fā)送基于MPEGTS封裝的第二碼率的流媒體數(shù)據(jù),還可以采用HTTP Chunk的方式發(fā)送先基于MPEGTS封裝后再基于RTP封裝的第二碼率的流媒體數(shù)據(jù),也可以采用HTTP Chunk的方式發(fā)送基于MP4封裝的第二碼率的流媒體數(shù)據(jù),還可以采用HTTP Chunk的方式發(fā)送基于FLV的Flag封裝的第二碼率的流媒體數(shù)據(jù),以滿足傳輸需求。
實(shí)際應(yīng)用時,第一接收單元91、第一發(fā)送單元92可由流媒體傳輸裝置中的通信芯片實(shí)現(xiàn);切換單元93及生成單元可由流媒體傳輸裝置中的處理器實(shí)現(xiàn),獲取單元可由流媒體傳輸裝置中的處理器結(jié)合通信芯片實(shí)現(xiàn)。
從上面的描述中可以看出,本發(fā)明實(shí)施例提供的方案,是基于一次流媒體播放請求向客戶端傳輸流媒體數(shù)據(jù)的方案,是一種基于HTTP的流媒體數(shù)據(jù)的傳輸方案。
相應(yīng)地,為實(shí)現(xiàn)本發(fā)明實(shí)施例的方法,本實(shí)施例還提供了一種流媒體傳輸裝置,設(shè)置在終端,如圖10所示,該裝置包括:
第二發(fā)送單元101,用于向服務(wù)器發(fā)送流媒體播放請求;
第二接收單元102,用于接收所述服務(wù)器發(fā)送的第一碼率的流媒體數(shù)據(jù);以及在播放第一碼率的流媒體數(shù)據(jù)過程中,接收所述服務(wù)器發(fā)送的第二碼流的流媒體數(shù)據(jù);接收的第二碼率的流媒體數(shù)據(jù)是從第二碼流的第二數(shù)據(jù)單元開始的;
播放單元103,用于利用重置的解碼器解碼第二碼流的流媒體數(shù)據(jù),并進(jìn)行播放。
實(shí)際應(yīng)用時,第二發(fā)送單元101及第二接收單元102可由流媒體傳輸裝置中的通信芯片實(shí)現(xiàn);播放單元103可由流媒體傳輸裝置中的處理器實(shí)現(xiàn)。
本發(fā)明實(shí)施例提供的方案,特別適用于直播場景,此時服務(wù)器端的數(shù)據(jù)流是實(shí)時注入的,也就是說,向客戶端發(fā)送的流媒體數(shù)據(jù)是服務(wù)器端實(shí)時接收到的流媒體數(shù)據(jù)。當(dāng)然,實(shí)際應(yīng)用時,本發(fā)明實(shí)施例提供的方案也可以適用在點(diǎn)播場景下。
本發(fā)明實(shí)施例提供的流媒體傳輸裝置,第一接收單元91接收客戶端發(fā)送的流媒體播放請求;第一發(fā)送單元92響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);在播放第一碼率的流媒體數(shù)據(jù)過程中,切換單元93利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力;第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成;所述第一數(shù)據(jù)單元發(fā)送完成后,第一發(fā)送單元92從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù),由服務(wù)器端根據(jù)所述客戶端的第一參數(shù)及第二參數(shù)來確定進(jìn)行碼率切換,如此,能夠根據(jù)客戶端的網(wǎng)絡(luò)帶寬及解碼能力及時地進(jìn)行碼率的切換,減少了端到端的時延。而且,流媒體數(shù)據(jù)僅劃分成了不同的數(shù)據(jù)單元,如此,不需要服務(wù)器端去準(zhǔn)備索引和分段文件,減少了流媒體數(shù)據(jù)在服務(wù)器端的緩存時間,進(jìn)一步減少了端到端的時延。
基于上述裝置,本發(fā)明實(shí)施例還提供了一種服務(wù)器,如圖11所示,該服務(wù)器包括:
第一通信接口111,用于接收客戶端發(fā)送的流媒體播放請求;響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù);以及所述第一數(shù)據(jù)單元發(fā)送完成后,從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù);
第一處理器112,用于在播放第一碼率的流媒體數(shù)據(jù)過程中,利用所述客戶端的第一參數(shù)及第二參數(shù),確定進(jìn)行碼率切換時,利用所述第一碼率的流媒體數(shù)據(jù)的第一數(shù)據(jù)單元確定第二碼率的流媒體數(shù)據(jù)對應(yīng)的第二數(shù)據(jù)單元;所述第一參數(shù)表征所述客戶端當(dāng)前的網(wǎng)絡(luò)帶寬;所述第二參數(shù)表征所述客戶端當(dāng)前的解碼能力;第一數(shù)據(jù)單元為所述客戶端當(dāng)前正在播放的數(shù)據(jù)單元;不同碼率的流媒體數(shù)據(jù)由至少兩個數(shù)據(jù)單元的數(shù)據(jù)組成。
在一實(shí)施例中,所述第一處理器112,還用于在播放第一碼率的流媒體數(shù)據(jù)過程中通過所述第一通信接口111獲取所述客戶端的第一參數(shù)及第二參數(shù)。
在一實(shí)施例中,所述第一處理器112還可以利用所述客戶端的第一參數(shù)及第二參數(shù),并結(jié)合服務(wù)器的第四參數(shù),確定進(jìn)行碼率切換;所述第四參數(shù)表征所述服務(wù)器當(dāng)前的流媒體處理能力。
在一實(shí)施例中,所述第一處理器112,還用于響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù)之前針對每種碼率的流媒體數(shù)據(jù),在流媒體數(shù)據(jù)中添加第三參數(shù);所述第三參數(shù)表征媒體數(shù)據(jù)解碼信息;以及從第二碼率的流媒體數(shù)據(jù)中獲取對應(yīng)的第三參數(shù);
相應(yīng)地,所述第一通信接口111,還用于從所述第二數(shù)據(jù)單元開始,向所述客戶端發(fā)送第二碼率的流媒體數(shù)據(jù)之前,向所述客戶端發(fā)送第三參數(shù);發(fā)送的第三參數(shù)用于指示所述客戶端對解碼器進(jìn)行調(diào)整。
所述第一處理器112,還用于響應(yīng)所述流媒體播放請求,向客戶端發(fā)送第一碼率的流媒體數(shù)據(jù)之前,生成不同碼率的流媒體數(shù)據(jù)時,將每種碼率的流媒體數(shù)據(jù)的數(shù)據(jù)單元在時間上對齊;
所述第一處理器112,具體用于:
從第一碼率的流媒體數(shù)據(jù)中確定第一數(shù)據(jù)單元對應(yīng)的時間;
利用確定的時間從第二碼率的流媒體數(shù)據(jù)中得到所述第二數(shù)據(jù)單元。
其中,第一通信接口111及第一處理器112的實(shí)現(xiàn)功能可參照前述方法和裝置的相關(guān)描述而理解,這里不再贅述。
基于上述裝置,本發(fā)明實(shí)施例還提供了一種終端,如圖12所示,該終端包括:
第二通信接口121,用于向服務(wù)器發(fā)送流媒體播放請求,并接收所述服務(wù)器發(fā)送的第一碼率的流媒體數(shù)據(jù);以及在播放第一碼率的流媒體數(shù)據(jù)過程中,接收所述服務(wù)器發(fā)送的第二碼流的流媒體數(shù)據(jù);接收的第二碼率的流媒體數(shù)據(jù)是從第二碼流的第二數(shù)據(jù)單元開始的;
第二處理器122,用于利用重置的解碼器解碼第二碼流的流媒體數(shù)據(jù),并進(jìn)行播放。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用硬件實(shí)施例、軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器和光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。