本發(fā)明涉及流媒體視頻技術(shù)領(lǐng)域,特別涉及一種播放流媒體視頻的方法及裝置。
背景技術(shù):
在現(xiàn)有的安卓系統(tǒng)中有許多視頻播放器是不能夠直接播放流媒體文件的,在流媒體中的m3u8文件中記載流媒體文件的各個(gè)ts文件的具體存儲地址和編號,在視頻播放器不能完美解讀m3u8文件的情況下,該視頻播放器是無法播放流媒體文件的。還有在成功解讀m3u8文件的情況下,還需要解決如何從相應(yīng)的服務(wù)器下載對應(yīng)的ts文件到本地以及該如何解析該些ts文件。如何妥善的解決上述問題,就成為了業(yè)界亟待解決的課題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種播放流媒體視頻的方法及裝置,用以克服安卓系統(tǒng)中的部分視頻播放器無法解析流媒體視頻中的m3u8文件的問題,進(jìn)而解決了不能順利播放流媒體文件所給用戶帶來的困擾,從而提高了用戶的使用體驗(yàn)。
根據(jù)本發(fā)明實(shí)施例的第一方面,提供一種播放流媒體視頻的方法,包括:
解析流媒體視頻的m3u8文件;
獲取所述m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲地址和各個(gè)ts文件的播放序號;
按照所述各個(gè)ts文件的播放序號的順序下載所述各個(gè)ts文件;
實(shí)時(shí)的將下載到本地的ts文件解析成視頻流;
實(shí)時(shí)傳輸所述視頻流到視頻播放器,以供所述視頻播放器播放所述視頻流。
在一個(gè)實(shí)施例中,所述解析流媒體視頻的m3u8文件,包括:
獲取所述流媒體視頻的m3u8文件;
根據(jù)所述m3u8文件中的編碼結(jié)構(gòu)和關(guān)鍵字,解析所述m3u8文件。
在一個(gè)實(shí)施例中,所述獲取所述m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲地址和各個(gè)ts文件的播放序號,包括:
獲取所述m3u8文件中的各個(gè)ts文件所在服務(wù)器的ip地址;
獲取所述m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲路徑;
根據(jù)所述ip地址和所述存儲路徑,分析出所述m3u8文件中的各個(gè)ts文件的存儲地址;
根據(jù)預(yù)設(shè)的ts文件的編號關(guān)鍵字,獲取所述各個(gè)ts文件的存儲地址各自對應(yīng)的播放序號。
在一個(gè)實(shí)施例中,所述按照所述各個(gè)ts文件的播放序號的順序下載所述各個(gè)ts文件,包括:
將所述各個(gè)ts文件的播放序號按照由小到大的順序排列;
按照所述由小到大的順序,依次下載所述各個(gè)ts文件。
在一個(gè)實(shí)施例中,所述實(shí)時(shí)的將下載到本地的ts文件解析成視頻流,包括:
將下載到本地的各個(gè)ts文件存儲到本地的內(nèi)存中;
按照預(yù)設(shè)的解析方式,實(shí)時(shí)的將所述各個(gè)ts文件解析成視頻流。
根據(jù)本發(fā)明實(shí)施例的第二方面,提供一種播放流媒體視頻的裝置,包括:
第一解析模塊,用于解析流媒體視頻的m3u8文件;
獲取模塊,用于獲取所述m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲地址和各個(gè)ts文件的播放序號;
下載模塊,用于按照所述各個(gè)ts文件的播放序號的順序下載所述各個(gè)ts文件;
第二解析模塊,用于實(shí)時(shí)的將下載到本地的ts文件解析成視頻流;
傳輸模塊,用于實(shí)時(shí)傳輸所述視頻流到視頻播放器,以供所述視頻播放器播放所述視頻流。
在一個(gè)實(shí)施例中,所述解析模塊,包括:
第一獲取子模塊,用于獲取所述流媒體視頻的m3u8文件;
第一解析子模塊,用于根據(jù)所述m3u8文件中的編碼結(jié)構(gòu)和關(guān)鍵字,解析所述m3u8文件。
在一個(gè)實(shí)施例中,所述獲取模塊,包括:
第二獲取子模塊,用于獲取所述m3u8文件中的各個(gè)ts文件所在服務(wù)器的ip地址;
第三獲取子模塊,用于獲取所述m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲路徑;
分析子模塊,用于根據(jù)所述ip地址和所述存儲路徑,分析出所述m3u8文件中的各個(gè)ts文件的存儲地址;
第四獲取子模塊,用于根據(jù)預(yù)設(shè)的ts文件的編號關(guān)鍵字,獲取所述各個(gè)ts文件的存儲地址各自對應(yīng)的播放序號。
在一個(gè)實(shí)施例中,所述下載模塊,包括:
排列子模塊,用于將所述各個(gè)ts文件的播放序號按照由小到大的順序排列;
下載子模塊,用于按照所述由小到大的順序,依次下載所述各個(gè)ts文件。
在一個(gè)實(shí)施例中,所述解析模塊,包括:
存儲子模塊,用于將下載到本地的各個(gè)ts文件存儲到本地的內(nèi)存中;
第二解析子模塊,用于按照預(yù)設(shè)的解析方式,實(shí)時(shí)的將所述各個(gè)ts文件解析成視頻流。
本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
下面通過附圖和實(shí)施例,對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
附圖說明
附圖用來提供對本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實(shí)施例一起用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的限制。在附圖中:
圖1為本發(fā)明一示例性實(shí)施例示出的一種播放流媒體視頻的方法的流程圖;
圖2為本發(fā)明一示例性實(shí)施例示出的一種播放流媒體視頻的方法的步驟S11的流程圖;
圖3為本發(fā)明一示例性實(shí)施例示出的一種播放流媒體視頻的方法的步驟S12的流程圖;
圖4為本發(fā)明一示例性實(shí)施例示出的一種播放流媒體視頻的方法的步驟S13的流程圖;
圖5為本發(fā)明另一示例性實(shí)施例示出的一種播放流媒體視頻的方法的步驟S14的流程圖;
圖6為本發(fā)明一示例性實(shí)施例示出的一種播放流媒體視頻的裝置的框圖;
圖7為本發(fā)明一示例性實(shí)施例示出的一種播放流媒體視頻的裝置的第一解析模塊61的框圖;
圖8為本發(fā)明一示例性實(shí)施例示出的一種播放流媒體視頻的裝置的獲取模塊62的框圖;
圖9為本發(fā)明一示例性實(shí)施例示出的一種播放流媒體視頻的裝置的下載模塊63的框圖;
圖10為本發(fā)明一示例性實(shí)施例示出的一種播放流媒體視頻的裝置的第二解析模塊64的框圖。
具體實(shí)施方式
以下結(jié)合附圖對本發(fā)明的優(yōu)選實(shí)施例進(jìn)行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
圖1是根據(jù)一示例性實(shí)施例示出的一種播放流媒體視頻的方法流程圖,如圖1所示,該播放流媒體視頻的方法,包括以下步驟S11-S15:
在步驟S11中,解析流媒體視頻的m3u8文件;
在步驟S12中,獲取所述m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲地址和各個(gè)ts文件的播放序號;
在步驟S13中,按照所述各個(gè)ts文件的播放序號的順序下載所述各個(gè)ts文件;
在步驟S14中,實(shí)時(shí)的將下載到本地的ts文件解析成視頻流;
在步驟S15中,實(shí)時(shí)傳輸所述視頻流到視頻播放器,以供所述視頻播放器播放所述視頻流。
在一個(gè)實(shí)施例中,在現(xiàn)有的安卓系統(tǒng)中有許多視頻播放器是不能夠直接播放流媒體文件的,在流媒體中的m3u8文件中記載流媒體文件的各個(gè)ts文件的存儲地址和編號,在視頻播放器不能完美解讀m3u8文件的情況下,該些視頻播放器是無法播放流媒體文件的。還有在成功解讀m3u8文件的情況下,還需要解決如何從相應(yīng)的服務(wù)器下載對應(yīng)的ts文件到本地并動態(tài)的存儲該些ts文件,可以通過代理服務(wù)來解決上述問題。首先需要代理服務(wù)來解析流媒體視頻的m3u8文件,需要獲取該流媒體視頻的m3u8文件,并根據(jù)該m3u8文件中的編碼結(jié)構(gòu)和關(guān)鍵字,來進(jìn)一步的解析該m3u8文件。
通過獲取該m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲地址和各個(gè)ts文件的播放序號,來達(dá)到下載m3u8文件中的各個(gè)ts文件的目的。具體而言,獲取該m3u8文件中的各個(gè)ts文件所在服務(wù)器的ip地址,以及獲取該m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲路徑,根據(jù)該ip地址和該存儲路徑,就可以分析出該m3u8文件中的各個(gè)ts文件的存儲地址了。
根據(jù)預(yù)設(shè)的ts文件的編號關(guān)鍵字,獲取該各個(gè)ts文件的存儲地址各自對應(yīng)的播放序號。按照該各個(gè)ts文件的播放序號的順序下載該各個(gè)ts文件,將該各個(gè)ts文件的播放序號按照由小到大的順序排列,按照該由小到大的順序,依次下載該各個(gè)ts文件。例如某一個(gè)流媒體視頻一共由12個(gè)ts文件構(gòu)成,這12個(gè)ts文件的存儲地址在m3u8文件中并沒順序排列的。在下載ts文件時(shí),不能根據(jù)在m3u8文件中各個(gè)ts文件的存儲地址的先后出現(xiàn)順序,而是要根據(jù)各個(gè)ts文件的播放序號的大小順序來下載。
通過實(shí)時(shí)的將下載到本地的ts文件解析成視頻流,將下載到本地的各個(gè)ts文件存儲到本地的內(nèi)存中。按照預(yù)設(shè)的解析方式,實(shí)時(shí)的將該各個(gè)ts文件解析成視頻流。在內(nèi)存中設(shè)置一塊內(nèi)存空間來存儲該流媒體視頻內(nèi)容,可保證媒體視頻流更穩(wěn)定的輸出,還可更便捷的將內(nèi)存中的該流媒體視頻內(nèi)容即時(shí)的存儲到本地硬盤、u盤、光盤等斷電后仍可保存數(shù)據(jù)的介質(zhì)中。實(shí)時(shí)傳輸該視頻流到視頻播放器,以供該視頻播放器播放該視頻流。
本發(fā)明可克服安卓系統(tǒng)中的部分視頻播放器無法解析流媒體視頻中的m3u8文件的問題,進(jìn)而解決了不能順利播放流媒體文件所給用戶帶來的困擾,從而提高了用戶的使用體驗(yàn)。
在一個(gè)實(shí)施例中,如圖2所示,步驟S11包括如下步驟S21-S22:
在步驟S21中,獲取所述流媒體視頻的m3u8文件;
在步驟S22中,根據(jù)所述m3u8文件中的編碼結(jié)構(gòu)和關(guān)鍵字,解析所述m3u8文件。
在一個(gè)實(shí)施例中,獲取該流媒體視頻的m3u8文件,m3u8文件是指UTF-8編碼格式的m3u文件。m3u文件是記錄了一個(gè)索引純文本文件,打開它時(shí)播放軟件并不是播放它,而是根據(jù)它的索引找到對應(yīng)的音視頻文件的網(wǎng)絡(luò)地址進(jìn)行在線播放。
例如下述代碼:
#EXTINF:19,
http://124.232.164.44:80/ipad/160_15601_4572/20130804075250.ts?userid=VSNDNP-183061027101_160_15601_4572
#EXTINF:2,
http://124.232.164.44:80/ipad/160_15601_4572/20130804075300.ts?userid=VSNDNP-183061027101_160_15601_4572
#EXTINF:10,
http://124.232.164.44:80/ipad/160_15601_4572/20130804075310.ts?userid=VSNDNP-183061027101_160_15601_4572
其中,“EXTINF:2”表示該ts文件是該流媒體視頻的第9個(gè)組成部分,“http://124.232.164.44:80/ipad/160_15601_4572/20130804075300.ts?userid=VSNDNP-183061027101_160_15601_4572”表示該ts文件存那個(gè)ip的服務(wù)器中,通過80端口號來傳輸ts文件,并寫明了該ts文件在該服務(wù)器中的具體存儲路徑。
在一個(gè)實(shí)施例中,如圖3所示,步驟S12包括如下步驟S31-S34:
在步驟S31中,獲取所述m3u8文件中的各個(gè)ts文件所在服務(wù)器的ip地址;
在步驟S32中,獲取所述m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲路徑;
在步驟S33中,根據(jù)所述ip地址和所述存儲路徑,分析出所述m3u8文件中的各個(gè)ts文件的存儲地址;
在步驟S34中,根據(jù)預(yù)設(shè)的ts文件的編號關(guān)鍵字,獲取所述各個(gè)ts文件的存儲地址各自對應(yīng)的播放序號。
在一個(gè)實(shí)施例中,查看下述代碼:
獲取m3u8文件中各個(gè)ts文件所在的服務(wù)器的ip地址,不妨假設(shè)某一個(gè)ts文件的所在的服務(wù)器的ip地址為124.232.164.44,其端口號為80。再獲取該ts文件在該服務(wù)器端的存儲路徑,不妨假設(shè)該ts文件在服務(wù)器端的存儲路徑為ipad/160_15601_4572/20130804075250.ts?userid=VSNDNP-183061027101_160_15601_4572。根據(jù)上述的服務(wù)器的ip和該ts文件在該服務(wù)器的存儲路徑,即可得到完整的該ts文件的存儲地址。再根據(jù)預(yù)設(shè)的ts文件的編號關(guān)鍵字EXTINF”,即可獲取該ts文件在該流媒體視頻中的排序序號。
在一個(gè)實(shí)施例中,如圖4所示,步驟S13包括如下步驟S41-S42:
在步驟S41中,將所述各個(gè)ts文件的播放序號按照由小到大的順序排列;
在步驟S42中,按照所述由小到大的順序,依次下載所述各個(gè)ts文件。
在一個(gè)實(shí)施例中,不能根據(jù)各個(gè)ts文件在m3u8文件中行文的上下順序來依此下載該些ts文件,而是需要通過上述實(shí)施例中識別出各個(gè)ts文件的排序序號,按照排序序號的順序來依次下載各個(gè)ts文件。當(dāng)用戶拖動進(jìn)度條之后,要根據(jù)新的播放時(shí)間點(diǎn),來確定該播放時(shí)間是在那個(gè)ts文件的歸屬范圍之內(nèi)。立即更改下載的順序,將該行的播放時(shí)間點(diǎn)所歸屬的ts文件確定為當(dāng)前下載的ts文件,以該當(dāng)前下載的ts文件為起始,依次按照編號的排列順序下載ts文件。
在一個(gè)實(shí)施例中,如圖5所示,步驟S14包括如下步驟S51-S52:
在步驟S51中,將下載到本地的各個(gè)ts文件存儲到本地的內(nèi)存中;
在步驟S52中,按照預(yù)設(shè)的解析方式,實(shí)時(shí)的將所述各個(gè)ts文件解析成視頻流。
在一個(gè)實(shí)施例中,下載到本地的各個(gè)ts文件需要層次到本地的內(nèi)存中,還可以實(shí)時(shí)的將該保存到內(nèi)存中的ts文件導(dǎo)出到本地本地硬盤、u盤、光盤等斷電后仍可保存數(shù)據(jù)的介質(zhì)中,因?yàn)楸4娴絻?nèi)存中的數(shù)據(jù)會被新的ts文件數(shù)據(jù)所覆蓋。按照安卓系統(tǒng)中的視頻播放器可以播放的視頻文件格式,將該些ts文件解析成視頻流。
在一個(gè)實(shí)施例中,圖6是根據(jù)一示例性實(shí)施例示出的一種播放流媒體視頻的裝置框圖。如圖6示,該裝置包括第一解析模塊61、獲取模塊62、下載模塊63、第二解析模塊64和傳輸模塊65。
該第一解析模塊61,用于解析流媒體視頻的m3u8文件;
該獲取模塊62,用于獲取所述m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲地址和各個(gè)ts文件的播放序號;
該下載模塊63,用于按照所述各個(gè)ts文件的播放序號的順序下載所述各個(gè)ts文件;
該第二解析模塊64,用于實(shí)時(shí)的將下載到本地的ts文件解析成視頻流;
該傳輸模塊65,用于實(shí)時(shí)傳輸所述視頻流到視頻播放器,以供所述視頻播放器播放所述視頻流。
如圖7所示,該第一解析模塊61包括第一獲取子模塊71和第一解析子模塊72。
該第一獲取子模塊71,用于獲取所述流媒體視頻的m3u8文件;
該第一解析子模塊72,用于根據(jù)所述m3u8文件中的編碼結(jié)構(gòu)和關(guān)鍵字,解析所述m3u8文件。
如圖8所示,該獲取模塊62包括第二獲取子模塊81、第三獲取子模塊82、分析子模塊83和第四獲取子模塊84。
該第二獲取子模塊81,用于獲取所述m3u8文件中的各個(gè)ts文件所在服務(wù)器的ip地址;
該第三獲取子模塊82,用于獲取所述m3u8文件中的各個(gè)ts文件在服務(wù)器端的存儲路徑;
該分析子模塊83,用于根據(jù)所述ip地址和所述存儲路徑,分析出所述m3u8文件中的各個(gè)ts文件的存儲地址;
該第四獲取子模塊84,用于根據(jù)預(yù)設(shè)的ts文件的編號關(guān)鍵字,獲取所述各個(gè)ts文件的存儲地址各自對應(yīng)的播放序號。
如圖9所示,該下載模塊63包括排列子模塊91和下載子模塊92:
該排列子模塊91,用于將所述各個(gè)ts文件的播放序號按照由小到大的順序排列;
該下載子模塊92,用于按照所述由小到大的順序,依次下載所述各個(gè)ts文件。
如圖10所示,該第二解析模塊64包括存儲子模塊101和第二解析子模塊102。
該存儲子模塊101,用于將下載到本地的各個(gè)ts文件存儲到本地的內(nèi)存中;
該第二解析子模塊102,用于按照預(yù)設(shè)的解析方式,實(shí)時(shí)的將所述各個(gè)ts文件解析成視頻流。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(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)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(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)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。