一種流媒體傳輸方法、裝置、伺服器及終端與流程
2023-07-13 07:17:32 2

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