一種多線程下載方法和裝置與流程
2023-05-23 13:50:36 1
本申請涉及超文本傳輸協議(HypertextTransferProtocol,HTTP)網絡下載領域,特別涉及一種多線程下載方法和裝置。
背景技術:
隨著網絡技術的發展,在線觀看流媒體視頻已成為一種流行趨勢。在視頻播放的同時進行數據更新下載、增量實時獲取媒體呈現描述(mediapresentationdescription,MPD)更新、碼流切換的優化、帶寬的優化。現有實現中,通過單線程下載視頻,並且邊下載邊播放。在不限制網絡速度的情況下,通常可以流暢播放,但是當網絡帶寬比較緊張,或網絡不穩定的時候,帶寬出現震蕩,單線程因為下載方式和下載速度的限制,不能及時的捕捉到當前帶寬的切換,響應會有延遲,當網絡由高變低,就會出現視頻播放緩衝,當網絡由低變高,視頻的播放就不能及時的切換到更清晰的畫面,影響用戶體驗。
技術實現要素:
有鑑於此,本申請提供一種多線程下載方法和裝置,能夠在CPU低功耗的情況下,高效利用網絡帶寬下載視音頻數據,進而提高播放視音頻的流暢度。為解決上述技術問題,本發明的技術方案是這樣實現的:一種多線程下載方法,所述方法包括:獲取待下載視音頻的統一資源定位符URL,根據該URL通過超文本傳輸協議HTTP的頭Head下載方式獲取Head信息,所述Head信息包含下載單元長度和多線程下載標識符;若根據所述多線程下載標識符確定該待下載視音頻支持多線程下載,則根據所述下載單元長度,確定下載片段的大小和並發下載線程數量,啟動與確定的並發下載線程數量相同的下載線程進行並發下載;當任一下載片段下載完成時,確定該下載片段是否為所述下載單元的第一個下載片段,如果是,傳輸該下載片段進行播放;否則,不進行下載片段的傳輸,繼續等待下一個下載片段的下載完成。一種裝置,所述裝置包括:獲取單元、確定單元和處理單元;所述獲取單元,進一步用於獲取待下載視音頻的統一資源定位符URL,根據該URL通過超文本傳輸協議HTTP的頭Head下載方式獲取Head信息,所述Head信息包含下載單元長度和多線程下載標識符;所述確定單元若根據所述獲取單元獲取的多線程下載標識符確定該待下載視音頻支持多線程下載,則根據所述下載單元長度,確定下載片段的大小和並發下載線程數量;用於確定所述處理單元下載的任一下載片段完成時,確定該下載片段是否為所述下載單元的第一個下載片段;所述處理單元,用於啟動與所述確定單元確定的並發下載線程數量相同的下載線程進行並發下載;當確定該已下載完成的下載片段為所述下載單元的第一個下載片段,傳輸該下載片段進行播放;當確定該已下載完成的下載片段不為所述下載單元的第一個下載片段,不進行下載片段的傳輸,繼續等待下一個下載片段的下載完成。綜上所述,本申請通過,對支持多線程下載的視音頻,根據下載單元長度,確定下載片段大小和並發下載線程數量,啟動與確定的並發下載線程數量相同的下載線程進行並發下載;當任一下載片段下載完成時,若確定該下載片段為所述下載單元的第一個下載片段,傳輸該下載片段進行播放。在CPU低功耗的情況下,能夠高效利用網絡帶寬下載視音頻數據,進而提高視音頻播放的流暢度。附圖說明圖1為本發明實施例中多線程下載方法流程示意圖;圖2為本發明具體實施例中應用於上述技術的裝置的結構示意圖。具體實施方式為使本發明的目的、技術方案及優點更加清楚明白,以下參照附圖並舉實施例,對本發明所述方案作進一步地詳細說明。本發明實施例中提出一種多線程下載方法,對於支持多線程下載的視音頻,根據下載單元長度,確定下載片段大小和並發下載線程數量,啟動與確定的並發下載線程數量相同的下載線程進行並發下載;當任一下載片段下載完成時,若確定該下載片段為所述下載單元的第一個下載片段,傳輸該下載片段進行播放。在CPU低功耗的情況下,能夠高效利用網絡帶寬下載視音頻數據,進而提高視音頻播放的流暢度。該方法應用於為自適應流媒體播放設備下載待播放的視音頻,可以單一部署在一臺設備上,也可以部署在自適應流媒體播放設備上。下面結合附圖,詳細說明本發明具體實施例中如何實現多線程下載方法的。參見圖1,圖1為本發明實施例中多線程下載方法流程示意圖。具體步驟為:步驟101,設備獲取待下載視音頻的統一資源定位符(UniformResourceLocatorURL),根據該URL通過HTTP的頭(Head)下載方式獲取Head信息,所述Head信息包含下載單元長度和多線程下載標識符。在具體實現時,獲取待下載視音頻的URL的方法,可以是直接獲取給定的URL,也可以是從MPD文件中解析出的MPD信息中獲取,該URL作為HTTP下載所指向的路徑。在對待下載的視音頻進行下載之前,需要根據獲取的URL通過HTTP的Head下載方式獲取Head信息,並根據Head信息來進一步確定如何下載該視音頻。本步驟中該設備獲取Head信息,具體包括:該設備創建執行Head下載的線程,設置執行Head下載的下載參數和回調函數;並根據設置的執行Head下載的下載參數和回調函數,初始化所述執行Head下載的線程後,執行Head下載,在所述回調函數中獲取Head信息。其中,配置的下載參數包括下載超時時間等。步驟102,該設備若根據所述多線程下載標識符確定該待下載視音頻支持多線程下載,則根據所述下載單元長度,確定下載片段的大小和並發下載線程數量,啟動與確定的並發下載線程數量相同的下載線程進行並發下載。該設備預先配置最小下載片段的大小和最大下載片段的大小,配置最大並發下載線程數量和最小並發下載線程數量。本步驟中根據所述下載單元長度,確定下載片段的大小,具體包括:若獲取的下載單元長度小於配置的最大下載片段的大小與最大並發下載線程數量的乘積,則確定每個下載片段的大小為最小下載片段的大小。若獲取的下載單元長度不小於配置的最大下載片段的大小與最大並發下載線程數量的乘積,則確定每個下載片段的大小為最大下載片段的大小。本步驟中該設備確定並發下載線程數量,具體包括:該設備將獲取的下載單元長度除以確定的每個下載片段的大小,獲取下載單元被等分的數量;若所述下載單元被等分的數量小於最小並發下載線程數量,則並發下載線程數量確定為最小並發下載線程數量;若所述下載單元被等分的數量大於最大並發下載線程數量,則並發下載線程數量確定為最大並發下載線程數量;若所述下載單元被等分的數量不小於最小並發下載線程數量,且不大於最大並發下載線程數量,則並發下載線程數量確定為所述下載單元被等分的數量。下載片段如果太小,就需要分段下載很多次,每一次下載片段的結束都需要對下載線程的關閉和再初始化分配新的下載任務,需要佔用CPU資源,影響整個工程的效率;下載片段如果太大,每一次下載片段就需要佔用大量的時間片來完成,導致處理部分的時間片沒有數據可處理,也會影響整個工程的效率。下載線程數量如果太小,就會反覆的結束和重新初始化新的線程,下載線程數量如果太多,就會導致下載的數據分散,都會影響工程的效率。因此,需要計算一個合理的下載片段的大小和下載線程的數量確定下載片段的大小和下載線程數量,是為了保證在不佔用過多CPU資源的前提下,針對不同大小的可下載單元,最大化下載速率,並且本發明具體實施例中需要兼顧實現環境,不僅需要優化下載,也需要儘可能不佔用過多CPU資源,以保證數據的傳輸和處理,因此,給出了較優的確定下載片段的大小和下載線程數量的實現方法。單線程的單次掃描通常最大數據量為16K,所以對不同大小的文件下載方式不一樣:MPD文件和M3U8文件很小,一般都小於16K,單線程的一次下載就可以完成,如果分段下載,反而增加CPU的功耗,下載速度並不能得到提升;對於較大的可下載音視頻文件,單線程的單次下載數據量固定,如果線性下載,下載時間也會隨著文件大小的變化而線性變化,如果此時採用多線程並發下載,就可以保證每次並發下載的數據總量遠遠超過16K,下載時間就會大大縮短。該若根據所述多線程下載標識符確定該待下載視音頻不支持多線程下載,啟動單線程下載,同現有實現,這裡不再詳細描述。該設備啟動與確定的並發下載線程數量相同的下載線程進行並發下載,包括:該設備創建與並發下載線程數量相同的下載線程,設置執行下載的下載參數和回調函數;並根據設置的下載參數和回調函數,初始化所述執行並發下載的線程後,執行並發下載,在所述回調函數中獲取下載片段。其中,配置的下載參數包括下載超時時間、各下載片段在下載單元中的位置順序等。步驟103,當任一下載片段下載完成時,該設備確定該下載片段是否為所述下載單元的第一個下載片段,如果是,傳輸該下載片段進行播放;否則,不進行下載片段的傳輸,繼續等待下一個下載片段的下載完成。本發明下載的音視頻是為了流暢播放,因此,下載片段的數據應該按其在伺服器上的數據的順序進行播放,即不會下載完一個下載片段就播放,而是下載單元的第一個下載片段下載完成時,開始傳輸,並播放。再檢查第二個片段是否下載完成,以此類推。本發明具體實施例中,需要為各下載線程分配一個與下載片段等同大小的緩衝區,按照各緩衝區將要緩衝的下載片段在所述下載單元中的位置,為各所述緩存區標號,並將各緩衝區按其標號順序加入一個隊列。本步驟具體實現時,包括:該設備確定所述隊列頂端的下載片段是否已下載完成,如果是,將該隊列頂端的下載片段進行傳輸;否則,不進行下載片段的傳輸,繼續等待下一個下載片段的下載完成。該設備將該隊列頂端的下載片段進行傳輸,之後,將該下載片段刪除,並確定當前隊列頂端的下載片段是否已下載完成,如果是,繼續傳輸;否則,等待下一個下載片段的下載完成。如果第一次啟動的所有下載線程並未能將需要下載的下載單元完全下載,則已下載完成的下載線程會重新初始化,繼續等待下載待下載單元中的未下載的下載片段。具體實現如下:當任何一個下載線程下載完成時,從正在下載的線程中移除,如果所述下載單元中還有未下載的下載片段,且等待下載的下載線程未分配下載該下載片段,為該下載線程分配所述下載單元中未下載的,且待下載的下載線程中未分配的下載片段,並將該線程初始化後,添加到下載隊列中,等待下載。本發明具體實施例中確定合適大小的下載片段和合適數量的下載進程,能夠邊下載邊播放,進而使播放更加的流暢。本發明具體實施例中多線程並發下載在單位時間內的下載量在單線程的下載基礎上有很大的提升,因此,在設備啟動初始,能夠快速的獲取到足夠的數據填充緩衝區,可以更快的支持無卡頓的啟動播放。多線程下載提高帶寬利用率,加速啟動,快速跳轉,流暢快進,快退,高效的多比特源切換,減少緩衝,提高用戶體驗。本發明具體實施例中基於同樣的發明構思,還提出一種裝置。參見圖2,圖2為本發明具體實施例中應用於上述技術的裝置的結構示意圖。該裝置包括:獲取單元201、確定單元202和處理單元203。獲取單元201,進一步用於獲取待下載視音頻的URL,根據該URL通過HTTP的Head下載方式獲取Head信息,所述Head信息包含下載單元長度和多線程下載標識符。確定單元202若根據獲取單元201獲取的多線程下載標識符確定該待下載視音頻支持多線程下載,則根據所述下載單元長度,確定下載片段的大小和並發下載線程數量;用於確定處理單元203下載的任一下載片段完成時,確定該下載片段是否為所述下載單元的第一個下載片段。處理單元203,用於啟動與確定單元202確定的並發下載線程數量相同的下載線程進行並發下載;當確定該已下載完成的下載片段為所述下載單元的第一個下載片段,傳輸該下載片段進行播放;當確定該已下載完成的下載片段不為所述下載單元的第一個下載片段,不進行下載片段的傳輸,繼續等待下一個下載片段的下載完成。較佳地,處理單元203,進一步用於若確定單元202根據所述多線程下載標識符確定該待下載視音頻不支持多線程下載,啟動單線程下載;在下載MPD文件和M3U8文件時,使用單線程下載。較佳地,該裝置進一步包括:配置單元204。配置單元204,用於配置最小下載片段的大小和最大下載片段的大小,配置最大並發下載線程數量。確定單元202,用於若所述下載單元長度小於配置單元204配置的最大下載片段的大小與最大並發下載線程數量的乘積,則確定每個下載片段的大小為最小下載片段的大小;若所述下載單元長度不小於配置單元204配置的最大下載片段的大小與最大並發下載線程數量的乘積,則確定每個下載片段的大小為最大下載片段的大小。較佳地,配置單元204,進一步用於配置最小並發下載線程數量。確定單元202,用於將所述下載單元長度除以確定的每個下載片段的大小,獲取下載單元被等分的數量;若所述下載單元被等分的數量小於最小並發下載線程數量,則確定並發下載線程數量為最小並發下載線程數量;若所述下載單元被等分的數量大於最大並發下載線程數量,則確定並發下載線程數量為最大並發下載線程數量;若所述下載單元被等分的數量不小於最小並發下載線程數量,且不大於最大並發下載線程數量,則確定並發下載線程數量為所述下載單元被等分的數量。較佳地,處理單元203,進一步用於為各下載線程分配一個與下載片段等同大小的緩衝區,按照各緩衝區將要緩衝的下載片段在所述下載單元中的位置,為各所述緩存區標號,並將各緩衝區按其標號順序加入一個隊列。確定單元202,用於確定所述隊列頂端的下載片段是否已下載完成,如果是,觸發處理單元203將該隊列頂端的下載片段進行傳輸;否則,觸發處理單元203不進行下載片段的傳輸,繼續等待下一個下載片段的下載完成。較佳地,處理單元203,進一步用於將該隊列頂端的下載片段進行傳輸,之後,將該下載片段刪除,並觸發確定單元確定當前隊列頂端的下載片段是否已下載完成,如果是,繼續傳輸;否則,等待下一個下載片段的下載完成。較佳地,處理單元203,進一步用於當任何一個下載線程下載完成時,從正在下載的線程中移除,如果所述下載單元中還有未下載的下載片段,且等待下載的下載線程未分配下載該下載片段,為該下載線程分配所述下載單元中未下載的,且待下載的下載線程中未分配的下載片段,並將該線程初始化後,添加到下載隊列中,等待下載。上述實施例的單元可以集成於一體,也可以分離部署;可以合併為一個單元,也可以進一步拆分成多個子單元。綜上所述,本發明具體實施例中對支持多線程下載的視音頻,根據下載單元長度,確定下載片段大小和並發下載線程數量,啟動與確定的並發下載線程數量相同的下載線程進行並發下載;當任一下載片段下載完成時,若確定該下載片段為所述下載單元的第一個下載片段,傳輸該下載片段進行播放。在CPU低功耗的情況下,能夠高效利用網絡帶寬下載視音頻數據,進而提高視音頻播放的流暢度。以上所述,僅為本發明的較佳實施例而已,並非用於限定本發明的保護範圍。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。