本發(fā)明涉及媒體數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是涉及一種媒體數(shù)據(jù)播放方法和裝置。
背景技術(shù):
媒體數(shù)據(jù)包括音頻數(shù)據(jù)、視頻數(shù)據(jù)或者其結(jié)合,是用于存儲和傳遞信息的一種重要媒介。目前操作系統(tǒng)可以提供處理媒體數(shù)據(jù)的能力,運(yùn)行于操作系統(tǒng)上的應(yīng)用程序就可以借助操作系統(tǒng)提供的媒體數(shù)據(jù)處理能力來播放媒體數(shù)據(jù)。
然而,操作系統(tǒng)提供的媒體數(shù)據(jù)處理能力是有限的,并不能支持所有媒體數(shù)據(jù)格式的播放。比如某些版本的安卓操作系統(tǒng)就不支持MPEG2編碼格式的視頻,其中MPEG表示Moving Picture Experts Group,意為活動圖像專家組。這種情況下需要用戶手動安裝可以播放操作系統(tǒng)不支持的媒體數(shù)據(jù)格式的播放應(yīng)用程序,并每次在需要播放該不支持的媒體數(shù)據(jù)格式時跳轉(zhuǎn)到該播放應(yīng)用程序進(jìn)行播放,導(dǎo)致操作系統(tǒng)對媒體數(shù)據(jù)的兼容性差。
技術(shù)實(shí)現(xiàn)要素:
基于此,有必要針對目前實(shí)現(xiàn)對操作系統(tǒng)所不支持媒體數(shù)據(jù)的播放效率低的技術(shù)問題,提供一種媒體數(shù)據(jù)播放方法和裝置。
一種媒體數(shù)據(jù)播放方法,包括:
獲取媒體數(shù)據(jù)地址;
以所述媒體數(shù)據(jù)地址為調(diào)用參數(shù),調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口;
通過調(diào)用所述標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,觸發(fā)檢測原生的媒體播放方式是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);
當(dāng)檢測到支持播放時,為所述媒體數(shù)據(jù)匹配原生的媒體播放方式;
當(dāng)檢測到不支持播放時,為所述媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式;
根據(jù)匹配的所述媒體播放方式播放所述媒體數(shù)據(jù)。
一種媒體數(shù)據(jù)播放裝置,包括:
地址獲取模塊,用于獲取媒體數(shù)據(jù)地址;
標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口調(diào)用模塊,用于以所述媒體數(shù)據(jù)地址為調(diào)用參數(shù),調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口;
媒體播放方式匹配模塊,用于通過調(diào)用所述標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,觸發(fā)檢測原生的媒體播放方式是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);當(dāng)檢測到支持播放時,為所述媒體數(shù)據(jù)匹配原生的媒體播放方式;當(dāng)檢測到不支持播放時,為所述媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式;
播放模塊,用于根據(jù)匹配的所述媒體播放方式播放所述媒體數(shù)據(jù)。
上述媒體數(shù)據(jù)播放方法和裝置,對于原生的媒體播放方式支持播放或者不支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的情況,都可以實(shí)現(xiàn)播放,實(shí)現(xiàn)了播放能力的擴(kuò)展,提高了兼容性。而且在播放時優(yōu)先采用原生的媒體播放方式,在原生的媒體播放方式不支持播放時,才采用擴(kuò)展的媒體播放方式,可盡可能保證播放的穩(wěn)定性。再者,統(tǒng)一通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,就可以實(shí)現(xiàn)對原生的媒體播放方式支持播放以及不支持播放的媒體數(shù)據(jù)的播放,具有播放媒體數(shù)據(jù)需求的應(yīng)用程序不需要做額外改進(jìn),提高了通用性。
附圖說明
圖1為一個實(shí)施例中用于實(shí)現(xiàn)媒體數(shù)據(jù)播放方法的電子設(shè)備的內(nèi)部結(jié)構(gòu)示意圖;
圖2為一個實(shí)施例中媒體數(shù)據(jù)播放方法的流程示意圖;
圖3為另一個實(shí)施例中媒體數(shù)據(jù)播放方法的流程示意圖;
圖4為一個實(shí)施例中通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,調(diào)用擴(kuò)展的媒體工廠,以檢測原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的步驟的流程示意圖;
圖5為一個實(shí)施例中向原生媒體服務(wù)進(jìn)程注入自定義代碼以添加擴(kuò)展的媒體工廠的步驟的流程示意圖;
圖6為一個實(shí)施例中通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,觸發(fā)檢測原生的媒體播放方式是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的步驟的流程示意圖;
圖7為一個具體應(yīng)用場景中向原生媒體服務(wù)進(jìn)程注入自定義代碼以添加擴(kuò)展的媒體工廠的步驟的流程示意圖;
圖8為一個具體應(yīng)用場景中媒體數(shù)據(jù)播放方法的流程示意圖。
圖9為一個實(shí)施例中媒體數(shù)據(jù)播放裝置的結(jié)構(gòu)框圖;
圖10為另一個實(shí)施例中媒體數(shù)據(jù)播放裝置的結(jié)構(gòu)框圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
圖1為一個實(shí)施例中用于實(shí)現(xiàn)媒體數(shù)據(jù)播放方法的電子設(shè)備的內(nèi)部結(jié)構(gòu)示意圖。參照圖1,該電子設(shè)備包括通過系統(tǒng)總線連接的處理器、非易失性存儲介質(zhì)、內(nèi)存儲器、網(wǎng)絡(luò)接口、顯示屏和輸入裝置。其中,電子設(shè)備的非易失性存儲介質(zhì)存儲有操作系統(tǒng),還存儲有一種媒體數(shù)據(jù)播放裝置,該媒體數(shù)據(jù)播放裝置用于實(shí)現(xiàn)一種媒體數(shù)據(jù)播放方法。電子設(shè)備的處理器用于提供計(jì)算和控制能力,支撐整個電子設(shè)備的運(yùn)行。電子設(shè)備中的內(nèi)存儲器為非易失性存儲介質(zhì)中的媒體數(shù)據(jù)播放裝置的運(yùn)行提供環(huán)境。該內(nèi)存儲器中可存儲有計(jì)算機(jī)可讀指令,該計(jì)算機(jī)可讀指令被處理器執(zhí)行時,可使得處理器執(zhí)行一種媒體數(shù)據(jù)播放方法。電子設(shè)備的網(wǎng)絡(luò)接口用于下載文件形式或者流式的媒體數(shù)據(jù)。電子設(shè)備的顯示屏可以是液晶顯示屏或者電子墨水顯示屏,電子設(shè)備的輸入裝置可以是顯示屏上覆蓋的觸摸層,也可以是電子設(shè)備外殼上設(shè)置的按鍵、軌跡球或觸控板,還可以是外接的鍵盤、觸控板或鼠標(biāo)等。該電子設(shè)備可以是個人計(jì)算機(jī)或者移動電子設(shè)備,移動電子設(shè)備包括手機(jī)、平板電腦、個人數(shù)字助理或者穿戴式設(shè)備等中的至少一種。本領(lǐng)域技術(shù)人員可以理解,圖1中示出的結(jié)構(gòu),僅僅是與本申請方案相關(guān)的部分結(jié)構(gòu)的框圖,并不構(gòu)成對本申請方案所應(yīng)用于其上的電子設(shè)備的限定,具體的電子設(shè)備可以包括比圖1中所示更多或更少的部件,或者組合某些部件,或者具有不同的部件布置。
圖2為一個實(shí)施例中媒體數(shù)據(jù)播放方法的流程示意圖。本實(shí)施例主要以該方法應(yīng)用于上述圖1中的電子設(shè)備來舉例說明。參照圖2,該媒體數(shù)據(jù)播放方法具體包括如下步驟:
S202,獲取媒體數(shù)據(jù)地址。
其中,媒體數(shù)據(jù)地址是表示媒體數(shù)據(jù)所在位置的數(shù)據(jù),可以是媒體數(shù)據(jù)在電子設(shè)備本地的存儲路徑,也可以是媒體數(shù)據(jù)的URL。URL是Uniform Resource Locator的縮寫,表示統(tǒng)一資源定位符,是對可以從網(wǎng)絡(luò)上得到的資源的位置和訪問方式的表示,是網(wǎng)絡(luò)上標(biāo)準(zhǔn)資源的地址。媒體數(shù)據(jù)地址可從電子設(shè)備本地或網(wǎng)絡(luò)獲取。媒體可以稱為media。
S204,以媒體數(shù)據(jù)地址為調(diào)用參數(shù),調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口。
其中,標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口是操作系統(tǒng)提供的一種標(biāo)準(zhǔn)的應(yīng)用程序編程接口(Application Programming Interface,API),用于提供媒體數(shù)據(jù)處理能力。在安卓(Android)操作系統(tǒng)中,標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口為安卓操作系統(tǒng)的SDK(Software Development Kit,軟件開發(fā)工具包)所提供的MediaPlayer接口。在視窗(Windows)操作系統(tǒng)、蘋果桌面操作系統(tǒng)(Mac OS)以及蘋果移動操作系統(tǒng)(iOS)中也存在相應(yīng)的標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口。
具體地,電子設(shè)備可通過運(yùn)行于操作系統(tǒng)上的應(yīng)用程序獲取媒體數(shù)據(jù)地址,通過該應(yīng)用程序調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,并向該標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口傳入媒體數(shù)據(jù)地址。調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口會生成相應(yīng)的媒體數(shù)據(jù)播放對象,該媒體數(shù)據(jù)播放對象運(yùn)行在應(yīng)用程序的進(jìn)程中。
S206,通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,觸發(fā)檢測原生的媒體播放方式是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
其中,媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù),是媒體數(shù)據(jù)地址所表示的媒體數(shù)據(jù)。媒體播放方式是指播放媒體數(shù)據(jù)的計(jì)算機(jī)處理邏輯。原生是指由操作系統(tǒng)自身所集成。原生的概念用來表示與操作系統(tǒng)的關(guān)系,并不表示所涉及的技術(shù)為現(xiàn)有技術(shù)。原生的媒體播放方式,是指操作系統(tǒng)自帶的媒體播放方式。支持播放媒體數(shù)據(jù),是指能夠播放相應(yīng)的媒體數(shù)據(jù)。
具體地,電子設(shè)備具體可通過標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,直接檢測原生的媒體播放方式是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。電子設(shè)備也可以通過標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口調(diào)用其它函數(shù),以檢測原生的媒體播放方式是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
S208,當(dāng)檢測到支持播放時,為媒體數(shù)據(jù)匹配原生的媒體播放方式。
具體地,電子設(shè)備在檢測到原生的媒體播放方式支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)時,將原生的媒體播放方式作為與媒體數(shù)據(jù)匹配的媒體播放方式。
S210,當(dāng)檢測到不支持播放時,為媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式。
具體地,電子設(shè)備在檢測到原生的媒體播放方式不支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)時,將擴(kuò)展的媒體播放方式作為與媒體數(shù)據(jù)匹配的媒體播放方式。
其中,擴(kuò)展的媒體播放方式是非原生的媒體播放方式,可以通過運(yùn)行于操作系統(tǒng)上的應(yīng)用程序添加擴(kuò)展的媒體播放方式。擴(kuò)展的媒體播放方式,包括播放原生的媒體播放方式所不支持的媒體數(shù)據(jù)的計(jì)算機(jī)處理邏輯,還可以進(jìn)一步包括播放原生的媒體播放方式所支持的媒體數(shù)據(jù)的計(jì)算機(jī)處理邏輯。
S212,根據(jù)匹配的媒體播放方式播放媒體數(shù)據(jù)。
具體地,電子設(shè)備在檢測到原生的媒體播放方式支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)時,采用原生的媒體播放方式,實(shí)現(xiàn)對媒體數(shù)據(jù)的播放。電子設(shè)備在檢測到原生的媒體播放方式不支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)時,采用擴(kuò)展的媒體播放方式,實(shí)現(xiàn)對媒體數(shù)據(jù)的播放。
上述媒體數(shù)據(jù)播放方法,對于原生的媒體播放方式支持播放或者不支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的情況,都可以實(shí)現(xiàn)播放,實(shí)現(xiàn)了播放能力的擴(kuò)展,提高了兼容性。而且在播放時優(yōu)先采用原生的媒體播放方式,在原生的媒體播放方式不支持播放時,才采用擴(kuò)展的媒體播放方式,可盡可能保證播放的穩(wěn)定性。再者,統(tǒng)一通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,就可以實(shí)現(xiàn)對原生的媒體播放方式支持播放以及不支持播放的媒體數(shù)據(jù)的播放,具有播放媒體數(shù)據(jù)需求的應(yīng)用程序不需要做額外改進(jìn),提高了通用性。
在一個實(shí)施例中,原生的媒體播放方式采用原生的媒體工廠;擴(kuò)展的媒體播放方式采用擴(kuò)展的媒體工廠。
其中,媒體工廠是用于處理媒體數(shù)據(jù)的工廠。媒體工廠可以是簡單工廠模式(Simple Factory)、工廠方法模式(Factory Method)或者抽象工廠模式(Abstract Factory)。工廠方法模式是一種面向?qū)ο笤O(shè)計(jì)模式,可用于在不指定對象具體類型的情況下創(chuàng)建對象。工廠方法模式定義一個創(chuàng)建對象的接口,讓實(shí)現(xiàn)該接口的類來決定實(shí)例化哪個類,將類的實(shí)例化推遲到子類中進(jìn)行。媒體工廠用于創(chuàng)建播放器實(shí)例,該播放器實(shí)例用于播放媒體數(shù)據(jù)。
原生的不同媒體工廠,分別用于創(chuàng)建不同場景下的播放器實(shí)例。安卓操作系統(tǒng)中,原生的媒體工廠如StagefrightPlayerFactory、NuPlayerFactory或者SonivoxPlayerFactory。其中StagefrightPlayerFactory是安卓操作系統(tǒng)默認(rèn)的媒體工廠,用于一般的本地視頻播放。NuPlayerFactory用于流媒體播放,如RTSP(Real Time Streaming Protocol,實(shí)時流傳輸協(xié)議)或m3u8格式的流媒體。SonivoxPlayerFactory用于MIDI(Musical Instrument Digital Interface)格式等媒體文件的播放。
擴(kuò)展的媒體工廠,可以僅用于創(chuàng)建播放操作系統(tǒng)所不支持媒體數(shù)據(jù)的播放器實(shí)例。擴(kuò)展的媒體工廠,也可以用于創(chuàng)建即能播放操作系統(tǒng)所支持媒體數(shù)據(jù),又能播放操作系統(tǒng)所不支持媒體數(shù)據(jù)的播放器實(shí)例。通過擴(kuò)展的媒體工廠所創(chuàng)建的播放器實(shí)例,能夠播放操作系統(tǒng)所不支持的媒體數(shù)據(jù)。
本實(shí)施例中,采用媒體工廠,利用操作中系統(tǒng)原生的播放邏輯,可以通過小的改動實(shí)現(xiàn)操作系統(tǒng)播放能力的擴(kuò)展。
在一個實(shí)施例中,步驟S212包括:采用匹配的媒體工廠創(chuàng)建相應(yīng)的播放器實(shí)例,通過創(chuàng)建的播放器實(shí)例播放媒體數(shù)據(jù)。具體地,電子設(shè)備可通過播放器實(shí)例打開媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)并讀取,解碼媒體數(shù)據(jù)并播放,輸出視頻和/或音頻。電子設(shè)備還可以通過播放器實(shí)例對播放的音頻和視頻進(jìn)行同步。在安卓操作系統(tǒng)中,播放器實(shí)例是MediaPlayerBase類型的實(shí)例。
在一個實(shí)施例中,步驟S206包括:通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,調(diào)用擴(kuò)展的媒體工廠,以檢測原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
具體地,擴(kuò)展的媒體工廠包括檢測原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的計(jì)算機(jī)處理邏輯。擴(kuò)展的媒體工廠具體可通過自身邏輯檢測,也可以調(diào)用原生的函數(shù)檢測。
進(jìn)一步地,擴(kuò)展的媒體工廠可以在檢測到原生的媒體播放方式支持播放媒體數(shù)據(jù)時,為媒體數(shù)據(jù)匹配原生的媒體播放方式;擴(kuò)展的媒體工廠可以在檢測到原生的媒體播放方式不支持播放媒體數(shù)據(jù)時,為媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式。
本實(shí)施例中,通過調(diào)用擴(kuò)展的媒體工廠,實(shí)現(xiàn)原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的檢測,對操作系統(tǒng)改動小。
在一個實(shí)施例中,所述通過調(diào)用所述標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,調(diào)用擴(kuò)展的媒體工廠,以檢測原生的媒體工廠是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù),包括:通過調(diào)用所述標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,遍歷媒體工廠集合中的媒體工廠,對所述媒體數(shù)據(jù)進(jìn)行支持能力評分;所述媒體工廠集合包括原生的媒體工廠和擴(kuò)展的媒體工廠;根據(jù)遍歷的各媒體工廠所對應(yīng)的支持能力評分,確定所述原生的媒體播放方式是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
在一個實(shí)施例中,所述根據(jù)遍歷的各媒體工廠所對應(yīng)的支持能力評分,確定所述原生的媒體播放方式是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)之前,所述方法包括:通過遍歷至的擴(kuò)展的媒體工廠,檢測原生的媒體工廠是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);當(dāng)檢測到支持播放時,獲得與擴(kuò)展的媒體工廠對應(yīng),且用于據(jù)以將原生的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分;當(dāng)檢測到不支持播放時,獲得與擴(kuò)展的媒體工廠對應(yīng),且用于據(jù)以將擴(kuò)展的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分。
在一個實(shí)施例中,所述當(dāng)檢測到支持播放時,獲得與擴(kuò)展的媒體工廠對應(yīng),且用于據(jù)以將原生的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分,包括:當(dāng)檢測到支持播放時,將支持能力評分范圍中的最小值,作為對應(yīng)于擴(kuò)展的媒體工廠的支持能力評分。所述當(dāng)檢測到不支持播放時,獲得與擴(kuò)展的媒體工廠對應(yīng),且用于據(jù)以將擴(kuò)展的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分,包括:當(dāng)檢測到不支持播放時,將支持能力評分范圍中的最大值,作為對應(yīng)于擴(kuò)展的媒體工廠的支持能力評分。
在一個實(shí)施例中,所述根據(jù)遍歷的各媒體工廠所對應(yīng)的支持能力評分,確定所述原生的媒體播放方式是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)之前,所述方法包括:通過遍歷至的原生的媒體工廠,檢測遍歷至的原生的媒體工廠自身是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);當(dāng)檢測到支持播放時,獲得與遍歷至的原生的媒體工廠對應(yīng),且用于據(jù)以將遍歷至的原生的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分;當(dāng)檢測到支持播放時,獲得與遍歷至的原生的媒體工廠對應(yīng),且用于據(jù)以不將遍歷至的原生的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分。其中,用于據(jù)以將遍歷至的原生的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分比如為1,用于據(jù)以不將遍歷至的原生的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分比如為0。
在一個實(shí)施例中,所述根據(jù)遍歷的各媒體工廠所對應(yīng)的支持能力評分,確定所述原生的媒體播放方式是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù),包括:從遍歷的各媒體工廠對應(yīng)的支持能力評分中篩選出最大的支持能力評分;當(dāng)最大的支持能力評分對應(yīng)原生的媒體工廠時,確定所述原生的媒體播放方式支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);當(dāng)最大的支持能力評分對應(yīng)擴(kuò)展的媒體工廠時,確定所述原生的媒體播放方式不支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
圖3為另一個實(shí)施例中媒體數(shù)據(jù)播放方法的流程示意圖。參照圖3,該方法具體包括如下步驟:
S302,獲取媒體數(shù)據(jù)地址。
S304,以媒體數(shù)據(jù)地址為調(diào)用參數(shù),調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口。
S306,通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,遍歷媒體工廠集合中的媒體工廠,對媒體數(shù)據(jù)進(jìn)行支持能力評分;媒體工廠集合包括原生的媒體工廠和擴(kuò)展的媒體工廠。
其中,媒體工廠集合是多于一個的媒體工廠構(gòu)成的集合,包括至少一個原生的媒體工廠和至少一個擴(kuò)展的媒體工廠。媒體工廠集合中的每個媒體工廠包括評分函數(shù)和播放器實(shí)例創(chuàng)建函數(shù)。評分函數(shù)用于對輸入的媒體數(shù)據(jù)地址進(jìn)行支持能力評分,輸出相應(yīng)的支持能力評分。播放器實(shí)例創(chuàng)建函數(shù)用于創(chuàng)建相應(yīng)的播放器實(shí)例。
具體地,電子設(shè)備在調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口時,可通過原生媒體服務(wù)進(jìn)程遍歷媒體工廠集合,通過媒體工廠集合中的每個媒體工廠的評分函數(shù)對媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)進(jìn)行支持能力評分,得到相應(yīng)的支持能力評分。在遍歷至原生的媒體工廠時,則對應(yīng)輸出表示原生的媒體工廠是否支持媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的支持能力評分。支持能力評分具有支持能力評分范圍,該支持能力評分范圍可以包括兩種或多于兩種的取值。
S308,通過遍歷至的原生的媒體工廠,檢測遍歷至的原生的媒體工廠自身是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);檢測到支持播放時,獲得與遍歷至的原生的媒體工廠對應(yīng),且用于據(jù)以將遍歷至的原生的媒體工廠分配予媒體數(shù)據(jù)的支持能力評分;當(dāng)檢測到支持播放時,獲得與遍歷至的原生的媒體工廠對應(yīng),且用于據(jù)以不將遍歷至的原生的媒體工廠分配予媒體數(shù)據(jù)的支持能力評分。
S310,通過遍歷至的擴(kuò)展的媒體工廠,檢測原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);當(dāng)檢測到支持播放時,獲得與擴(kuò)展的媒體工廠對應(yīng),且用于據(jù)以將原生的媒體工廠分配予媒體數(shù)據(jù)的支持能力評分;當(dāng)檢測到不支持播放時,獲得與擴(kuò)展的媒體工廠對應(yīng),且用于據(jù)以將擴(kuò)展的媒體工廠分配予媒體數(shù)據(jù)的支持能力評分。
具體地,若支持能力評分與支持能力正相關(guān),則電子設(shè)備可在判定媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)被原生的媒體工廠支持時,對應(yīng)于遍歷的擴(kuò)展的媒體工廠,輸出小于對應(yīng)于原生的媒體工廠的支持能力評分的支持能力評分。
在一個實(shí)施例中,若支持能力評分與支持能力負(fù)相關(guān),則電子設(shè)備可在判定媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)被原生的媒體工廠支持時,對應(yīng)于遍歷的擴(kuò)展的媒體工廠,輸出大于對應(yīng)于原生的媒體工廠的支持能力評分的支持能力評分。
若支持能力評分與支持能力正相關(guān),則電子設(shè)備可在判定媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)不被原生的媒體工廠支持時,對應(yīng)于遍歷的擴(kuò)展的媒體工廠輸出大于對應(yīng)于原生的媒體工廠的支持能力評分的支持能力評分。
在一個實(shí)施例中,若支持能力評分與支持能力負(fù)相關(guān),則電子設(shè)備可在判定媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)不被原生的媒體工廠支持時,對應(yīng)于遍歷的擴(kuò)展的媒體工廠輸出小于對應(yīng)于原生的媒體工廠的支持能力評分的支持能力評分。
S312,根據(jù)媒體工廠集合中遍歷的各媒體工廠對應(yīng)的支持能力評分,為媒體數(shù)據(jù)匹配相應(yīng)的媒體工廠。
具體地,若支持能力評分與支持能力正相關(guān),則電子設(shè)備可取遍歷媒體工廠集合得到的支持能力評分中的最大值,將該最大值對應(yīng)的媒體工廠匹配予媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。若支持能力評分與支持能力負(fù)相關(guān),則電子設(shè)備可取遍歷媒體工廠集合得到的支持能力評分中的最小值,將該最小值對應(yīng)的媒體工廠匹配予媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
S314,根據(jù)匹配的媒體工廠播放媒體數(shù)據(jù)。
具體地,電子設(shè)備可根據(jù)匹配的媒體工廠創(chuàng)建相應(yīng)的播放器實(shí)例,從而通過創(chuàng)建的播放器實(shí)例播放媒體數(shù)據(jù)。
本實(shí)施例中,通過擴(kuò)展的媒體工廠對媒體數(shù)據(jù)的評分邏輯,就可以利用原生的確定匹配媒體工廠的邏輯,實(shí)現(xiàn)對操作系統(tǒng)媒體數(shù)據(jù)處理能力的擴(kuò)展。減少了開發(fā)工作量,對操作系統(tǒng)原生邏輯介入比較少,可減少因修改操作系統(tǒng)原生邏輯帶來新缺陷的情況。
在一個實(shí)施例中,步驟S310包括:當(dāng)檢測到支持播放時,將支持能力評分范圍中的最小值,作為對應(yīng)于擴(kuò)展的媒體工廠的支持能力評分;當(dāng)檢測到不支持播放時,將支持能力評分范圍中的最大值,作為對應(yīng)于擴(kuò)展的媒體工廠的支持能力評分。
具體地,假設(shè)支持能力評分范圍中的最大值為1,最小值為0,則在遍歷至擴(kuò)展的媒體工廠時,若判定媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)被原生的媒體工廠支持,則輸出該擴(kuò)展的媒體工廠對該媒體數(shù)據(jù)的支持能力評分為0。即使擴(kuò)展的媒體工廠支持媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù),也仍然輸出支持能力評分范圍中的最小值。在遍歷至擴(kuò)展的媒體工廠時,若判定媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)不被原生的媒體工廠支持,則輸出該擴(kuò)展的媒體工廠對該媒體數(shù)據(jù)的支持能力評分為1。
若媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)被原生的媒體工廠支持,則遍歷得到的支持能力評分中的最大值為一個原生的媒體工廠對媒體數(shù)據(jù)的支持能力評分。若媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)不被原生的媒體工廠支持,則遍歷得到的支持能力評分中的最大值為一個擴(kuò)展的媒體工廠對媒體數(shù)據(jù)的支持能力評分。
本實(shí)施例中,通過修改擴(kuò)展的媒體工廠對媒體數(shù)據(jù)的評分邏輯,就可以利用原生的確定匹配媒體工廠的邏輯實(shí)現(xiàn)對操作系統(tǒng)媒體數(shù)據(jù)處理能力的擴(kuò)展,減少了開發(fā)工作量,對操作系統(tǒng)原生邏輯介入比較少,可減少因修改操作系統(tǒng)原生邏輯帶來新缺陷的情況。
如圖4所示,在一個實(shí)施例中,通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,調(diào)用擴(kuò)展的媒體工廠,以檢測原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的步驟具體包括如下步驟:
S402,通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,向原生媒體服務(wù)進(jìn)程傳入媒體數(shù)據(jù)地址。
具體地,電子設(shè)備在調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口時,通過該標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口向原生媒體服務(wù)進(jìn)程傳入媒體數(shù)據(jù)地址。在安卓操作系統(tǒng)中,原生媒體服務(wù)進(jìn)程為MediaServer進(jìn)程,電子設(shè)備通過標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口MediaPlayer向MediaServer進(jìn)程傳入媒體數(shù)據(jù)地址。
S404,調(diào)用通過原生媒體服務(wù)進(jìn)程的全局地址空間中所添加的擴(kuò)展的媒體工廠,以檢測原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
具體地,原生的媒體工廠和擴(kuò)展的媒體工廠,存儲在原生媒體服務(wù)進(jìn)程的全局地址空間中。電子設(shè)備可通過原生媒體服務(wù)進(jìn)程,判斷媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)是否被原生的媒體工廠支持播放。其中,原生媒體服務(wù)進(jìn)程的全局地址空間,是原生媒體服務(wù)進(jìn)程所申請的地址空間,且該地址空間中的數(shù)據(jù)可被該原生媒體服務(wù)進(jìn)程操作。
本實(shí)施例中,將擴(kuò)展的媒體工廠添加到原生媒體服務(wù)進(jìn)程的全局地址空間中,以實(shí)現(xiàn)對原生的媒體工廠所支持和所不支持媒體數(shù)據(jù)的播放,減少了開發(fā)工作量,對操作系統(tǒng)原生邏輯介入比較少,可減少因修改操作系統(tǒng)原生邏輯帶來新缺陷的情況。
在一個實(shí)施例中,步驟S402之前,該媒體數(shù)據(jù)播放方法還包括向原生媒體服務(wù)進(jìn)程注入自定義代碼以添加擴(kuò)展的媒體工廠的步驟。參照圖5,該向原生媒體服務(wù)進(jìn)程注入自定義代碼以添加擴(kuò)展的媒體工廠的步驟具體包括如下步驟:
S502,向原生媒體服務(wù)進(jìn)程注入自定義代碼。
具體地,電子設(shè)備可通過自定義進(jìn)程,向原生媒體服務(wù)進(jìn)程注入自定義代碼。在需要獲取到管理權(quán)限以執(zhí)行注入代碼操作的操作系統(tǒng),可以在獲得相應(yīng)的管理權(quán)限后執(zhí)行步驟S502。
其中,自定義進(jìn)程是非操作系統(tǒng)原生的進(jìn)程。自定義代碼是非操作系統(tǒng)原生的代碼,用于擴(kuò)展操作系統(tǒng)的媒體數(shù)據(jù)處理能力。在安卓操作系統(tǒng)中,可通過Ptrace()函數(shù)實(shí)現(xiàn)自定義代碼的注入。初始進(jìn)程是操作系統(tǒng)在啟動完畢后啟動的第一個用戶級進(jìn)程。在安卓操作系統(tǒng)中,初始進(jìn)程為init進(jìn)程。
在一個實(shí)施例中,自定義進(jìn)程可在操作系統(tǒng)啟動完畢后啟動。在一個實(shí)施例中,自定義進(jìn)程可跟隨操作系統(tǒng)啟動而啟動。
在一個實(shí)施例中,當(dāng)操作系統(tǒng)啟動完畢并啟動初始進(jìn)程后,初始進(jìn)程可根據(jù)啟動配置文件中配置的自定義程序路徑啟動自定義進(jìn)程。初始進(jìn)程具體可在接收到啟動配置文件中配置的操作系統(tǒng)啟動完畢通知后,根據(jù)啟動配置文件中配置的自定義程序路徑啟動自定義進(jìn)程。
在安卓操作系統(tǒng)中,初始進(jìn)程為init進(jìn)程,啟動配置文件為init.rc文件。在init.rc文件中,自定義進(jìn)程可在啟動配置文件中被配置為service;自定義進(jìn)程被配置為disabled,表示不跟隨操作系統(tǒng)啟動而啟動;自定義進(jìn)程被配置為在接收到操作系統(tǒng)啟動完畢通知后啟動。
在一個實(shí)施例中,電子設(shè)備通過自定義進(jìn)程獲取原生媒體服務(wù)進(jìn)程的內(nèi)存分配函數(shù)的地址,并將原生媒體服務(wù)進(jìn)程暫停,從而按照獲取的地址調(diào)用原生媒體服務(wù)進(jìn)程的內(nèi)存分配函數(shù)分配內(nèi)存空間,該內(nèi)存空間屬于原生媒體服務(wù)進(jìn)程的全局地址空間。電子設(shè)備通過自定義進(jìn)程將自定義代碼復(fù)制到分配的內(nèi)存空間中,并修改原生媒體服務(wù)進(jìn)程的執(zhí)行位置到分配的內(nèi)存空間中自定義代碼的起始地址,進(jìn)而恢復(fù)原生媒體服務(wù)進(jìn)程。
S504,通過自定義代碼,在原生媒體服務(wù)進(jìn)程的全局地址空間中添加擴(kuò)展的媒體工廠。
在一個實(shí)施例中,原生媒體服務(wù)進(jìn)程在從暫?;謴?fù)后就會執(zhí)行自定義代碼。該自定義代碼在執(zhí)行時,先保存媒體服務(wù)進(jìn)程的狀態(tài),然后加載指定的代碼文件,執(zhí)行該代碼文件中的自定義邏輯,以在原生媒體服務(wù)進(jìn)程的全局地址空間中添加擴(kuò)展的媒體工廠,卸載代碼文件,并恢復(fù)保存的媒體服務(wù)進(jìn)程的狀態(tài)。
S506,監(jiān)測到原生媒體服務(wù)進(jìn)程關(guān)閉,則待原生媒體服務(wù)進(jìn)程重啟后,返回步驟S502。
具體地,電子設(shè)備可通過自定義進(jìn)程監(jiān)聽操作系統(tǒng)在原生媒體服務(wù)進(jìn)程關(guān)閉時發(fā)出的進(jìn)程關(guān)閉通知。響應(yīng)于進(jìn)程關(guān)閉通知,待原生媒體服務(wù)進(jìn)程重啟后,返回步驟S502。其中,原生媒體服務(wù)進(jìn)程在關(guān)閉后,會由操作系統(tǒng)重啟該原生媒體服務(wù)進(jìn)程。自定義進(jìn)程在接收到關(guān)閉通知后,等待操作系統(tǒng)將原生媒體服務(wù)進(jìn)程重啟后,返回步驟S502,繼續(xù)通過自定義進(jìn)程向原生媒體服務(wù)進(jìn)程注入定義代碼。
本實(shí)施例中,通過向原生媒體服務(wù)進(jìn)程注入自定義代碼就可以實(shí)現(xiàn)對操作系統(tǒng)媒體數(shù)據(jù)處理能力的擴(kuò)展,不需要在操作系統(tǒng)源碼基礎(chǔ)上進(jìn)行修改,在無法獲取到操作系統(tǒng)源碼的情況下也可以實(shí)現(xiàn)對操作系統(tǒng)媒體數(shù)據(jù)處理能力的擴(kuò)展。而且,可自動發(fā)現(xiàn)原生媒體服務(wù)進(jìn)程關(guān)閉的情況,并在原生媒體服務(wù)進(jìn)程重啟后重新注入自定義代碼,保證了對操作系統(tǒng)媒體數(shù)據(jù)處理能力進(jìn)行擴(kuò)展的有效性。
如圖6所示,在一個實(shí)施例中,步驟S206包括以下步驟:
S602,通過調(diào)用命名為標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口的自定義接口,調(diào)用易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口。
S604,通過調(diào)用易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,檢測原生媒體播放方式是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
其中,自定義接口被命名為與標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口相同的名稱,因此在調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口時會調(diào)用該自定義接口。易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,保留了標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口的內(nèi)容,其名稱換為與標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口原本的名稱不同的名稱。
進(jìn)一步地,電子設(shè)備可通過自定義接口調(diào)用易名的標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,從而調(diào)用各原生的媒體工廠的評分函數(shù),得到對媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的支持能力評分。電子設(shè)備可根據(jù)該支持能力評分,判斷原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
本實(shí)施例中,巧妙地利用了接口名稱實(shí)現(xiàn)了對操作系統(tǒng)媒體數(shù)據(jù)處理能力的擴(kuò)展,在原生的媒體工廠支持媒體數(shù)據(jù)時,處理邏輯發(fā)生的變化少,盡量減少對操作系統(tǒng)原生邏輯的介入,可減少因修改操作系統(tǒng)原生邏輯帶來新缺陷的情況。
在一個實(shí)施例中,步驟S208包括:當(dāng)檢測到支持播放時,通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,為媒體數(shù)據(jù)匹配原生的媒體播放方式。步驟S210包括:當(dāng)檢測到不支持播放時,通過自定義接口,為媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式。
具體地,電子設(shè)備可在通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,檢測到原生的媒體工廠支持播放媒體數(shù)據(jù)時,直接通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口。電子設(shè)備在通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,檢測到原生的媒體工廠不支持播放媒體數(shù)據(jù)時,再通過命名為標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口的自定義接口中定義的計(jì)算機(jī)處理邏輯,指定該自定義接口所定義的擴(kuò)展的媒體播放方式。
本實(shí)施例中,通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,檢測原生的媒體工廠是否支持媒體數(shù)據(jù),在檢測到支持時仍然通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,為媒體數(shù)據(jù)匹配原生的媒體播放方式。而在通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口判斷出原生的媒體工廠不支持媒體數(shù)據(jù)時,才通過自定義接口,為媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式。盡量減少對操作系統(tǒng)原生邏輯的介入,可減少因修改操作系統(tǒng)原生邏輯帶來新缺陷的情況。
在一個實(shí)施例中,檢測原生的媒體播放方式是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)包括:當(dāng)滿足以下至少一者時,判定原生的媒體播放方式不支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù):
1),通過原生的媒體參數(shù)獲取函數(shù),獲取到媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的通道數(shù)目為0。
具體地,在安卓操作系統(tǒng)中,可通過媒體播放框架StagefrightPlayer中的MediaExtractor函數(shù)(一種提取媒體信息的函數(shù))獲取媒體數(shù)據(jù)的通道數(shù)目。一般視頻有兩個通道,一個是音頻通道,另一個是視頻通道。如果MediaExtractor函數(shù)返回的媒體數(shù)據(jù)的通道數(shù)目為0,則說明電子設(shè)備不支持該媒體數(shù)據(jù),也就是原生的媒體工廠不支持該媒體數(shù)據(jù)。
2),通過原生的媒體參數(shù)獲取函數(shù),獲取媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的編碼格式失敗。
具體地,在安卓操作系統(tǒng)中,可通過MediaExtractor函數(shù)獲取媒體數(shù)據(jù)的編碼格式,具體可以是音頻和/或視頻的編碼格式。如果MediaExtractor函數(shù)返回表示獲取編碼格式失敗的信息,則說明電子設(shè)備不支持該媒體數(shù)據(jù),也就是原生的媒體工廠不支持該媒體數(shù)據(jù)。
3),獲取到媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的編碼格式后,判定獲取的編碼格式不被原生解碼器所支持。
具體地,在安卓操作系統(tǒng)中,可通過OMX接口(一種用于解碼的接口)的函數(shù)來判斷獲取的編碼格式是否被原生解碼器所支持,若否,則判定獲取的編碼格式不被原生解碼器所支持。終端具體可先判斷條件1)和2)是否成立,在條件1)和2)不成立的情況下再判斷條件3)是否成立。
進(jìn)一步地,若上述條件1)、2)和3)均不成立,則可以判定媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)被原生的媒體工廠所支持。
本實(shí)施例中,提供了多個可快速判斷媒體數(shù)據(jù)是否被原生的媒體工廠所支持的判斷條件,可以實(shí)現(xiàn)對媒體數(shù)據(jù)是否被原生的媒體工廠所支持的高效判斷。
下面用一個具體應(yīng)用場景來說明上述媒體數(shù)據(jù)播放方法的原理。本應(yīng)用場景中以上述媒體數(shù)據(jù)播放方法應(yīng)用于安卓操作系統(tǒng)來詳細(xì)說明。參照圖7,自定義進(jìn)程向MediaServer進(jìn)程注入自定義代碼,并通過自定義代碼在MediaServer進(jìn)程的全局地址空間中添加擴(kuò)展的媒體工廠。自定義進(jìn)程若監(jiān)聽到操作系統(tǒng)在原生媒體服務(wù)進(jìn)程關(guān)閉時發(fā)出的進(jìn)程關(guān)閉通知,響應(yīng)于進(jìn)程關(guān)閉通知,待原生媒體服務(wù)進(jìn)程重啟后,繼續(xù)向MediaServer進(jìn)程注入自定義代碼。
進(jìn)一步地,參照圖8,應(yīng)用程序產(chǎn)生播放媒體數(shù)據(jù)的需求時,調(diào)用安卓操作系統(tǒng)的SDK所提供的MediaPlayer接口,通過該MediaPlayer接口向MediaServer進(jìn)程中的MediaPlayerService傳入媒體數(shù)據(jù)地址。MediaServer進(jìn)程中的MediaPlayerService調(diào)用媒體工廠接口MediaPlayerFactory,由MediaPlayerFactory遍歷媒體工廠集合分別對媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)進(jìn)行支持能力評分。在遍歷至原生的媒體工廠時,若該原生的媒體工廠支持播放該媒體數(shù)據(jù),則對應(yīng)輸出大于0且小于等于1的支持能力評分。若該原生的媒體工廠不支持播放該媒體數(shù)據(jù),則輸出大于等于0且小于1的支持能力評分。在遍歷至擴(kuò)展的媒體工廠MyPlayerFactory時,若判定原生的媒體工廠支持播放媒體數(shù)據(jù),則輸出值為0的支持能力評分;若判定原生的媒體工廠不支持播放媒體數(shù)據(jù),則輸出值為1的支持能力評分。MediaPlayerFactory最終選擇最大的支持能力評分對應(yīng)的媒體工廠創(chuàng)建播放器實(shí)例MediaplayerBase,由MediaServer進(jìn)程通過該播放器實(shí)例解碼媒體數(shù)據(jù)并通過SDK輸出至應(yīng)用程序,由應(yīng)用程序輸出。
圖9為一個實(shí)施例中媒體數(shù)據(jù)播放裝置900的結(jié)構(gòu)框圖。參照圖9,該媒體數(shù)據(jù)播放裝置900包括:地址獲取模塊901、標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口調(diào)用模塊902、媒體播放方式匹配模塊903和播放模塊904。
地址獲取模塊901,用于獲取媒體數(shù)據(jù)地址。
標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口調(diào)用模塊902,用于以媒體數(shù)據(jù)地址為調(diào)用參數(shù),調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口。
媒體播放方式匹配模塊903,用于通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,觸發(fā)檢測原生的媒體播放方式是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);當(dāng)檢測到支持播放時,為媒體數(shù)據(jù)匹配原生的媒體播放方式;當(dāng)檢測到不支持播放時,為媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式。
播放模塊904,用于根據(jù)匹配的媒體播放方式播放媒體數(shù)據(jù)。
上述媒體數(shù)據(jù)播放裝置900,對于原生的媒體播放方式支持播放或者不支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的情況,都可以實(shí)現(xiàn)播放,實(shí)現(xiàn)了播放能力的擴(kuò)展,提高了兼容性。而且在播放時優(yōu)先采用原生的媒體播放方式,在原生的媒體播放方式不支持播放時,才采用擴(kuò)展的媒體播放方式,可盡可能保證播放的穩(wěn)定性。再者,統(tǒng)一通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,就可以實(shí)現(xiàn)對原生的媒體播放方式支持播放以及不支持播放的媒體數(shù)據(jù)的播放,具有播放媒體數(shù)據(jù)需求的應(yīng)用程序不需要做額外改進(jìn),提高了通用性。
在一個實(shí)施例中,原生的媒體播放方式采用原生的媒體工廠;擴(kuò)展的媒體播放方式采用擴(kuò)展的媒體工廠。
本實(shí)施例中,采用媒體工廠,利用操作中系統(tǒng)原生的播放邏輯,可以通過小的改動實(shí)現(xiàn)操作系統(tǒng)播放能力的擴(kuò)展。
媒體播放方式匹配模塊903還用于通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,調(diào)用擴(kuò)展的媒體工廠,以檢測原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
本實(shí)施例中,通過調(diào)用擴(kuò)展的媒體工廠,實(shí)現(xiàn)原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的檢測,對操作系統(tǒng)改動小。
在一個實(shí)施例中,所述媒體播放方式匹配模塊903還用于通過調(diào)用所述標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,遍歷媒體工廠集合中的媒體工廠,對所述媒體數(shù)據(jù)進(jìn)行支持能力評分;所述媒體工廠集合包括原生的媒體工廠和擴(kuò)展的媒體工廠;根據(jù)遍歷的各媒體工廠所對應(yīng)的支持能力評分,確定所述原生的媒體播放方式是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
在一個實(shí)施例中,所述媒體播放方式匹配模塊903還用于通過遍歷至的擴(kuò)展的媒體工廠,檢測原生的媒體工廠是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);當(dāng)檢測到支持播放時,獲得與擴(kuò)展的媒體工廠對應(yīng),且用于據(jù)以將原生的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分;當(dāng)檢測到不支持播放時,獲得與擴(kuò)展的媒體工廠對應(yīng),且用于據(jù)以將擴(kuò)展的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分。
在一個實(shí)施例中,所述媒體播放方式匹配模塊903還用于當(dāng)檢測到支持播放時,將支持能力評分范圍中的最小值,作為對應(yīng)于擴(kuò)展的媒體工廠的支持能力評分;當(dāng)檢測到不支持播放時,將支持能力評分范圍中的最大值,作為對應(yīng)于擴(kuò)展的媒體工廠的支持能力評分。
在一個實(shí)施例中,所述媒體播放方式匹配模塊903還用于通過遍歷至的原生的媒體工廠,檢測遍歷至的原生的媒體工廠自身是否支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);當(dāng)檢測到支持播放時,獲得與遍歷至的原生的媒體工廠對應(yīng),且用于據(jù)以將遍歷至的原生的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分;當(dāng)檢測到支持播放時,獲得與遍歷至的原生的媒體工廠對應(yīng),且用于據(jù)以不將遍歷至的原生的媒體工廠分配予所述媒體數(shù)據(jù)的支持能力評分。
在一個實(shí)施例中,所述媒體播放方式匹配模塊903還用于從遍歷的各媒體工廠對應(yīng)的支持能力評分中篩選出最大的支持能力評分;當(dāng)最大的支持能力評分對應(yīng)原生的媒體工廠時,確定所述原生的媒體播放方式支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);當(dāng)最大的支持能力評分對應(yīng)擴(kuò)展的媒體工廠時,確定所述原生的媒體播放方式不支持播放所述媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
在一個實(shí)施例中,媒體播放方式匹配模塊903還用于通過調(diào)用標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,向原生媒體服務(wù)進(jìn)程傳入媒體數(shù)據(jù)地址;通過原生媒體服務(wù)進(jìn)程,調(diào)用在其全局地址空間中所添加的擴(kuò)展的媒體工廠,以檢測原生的媒體工廠是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
本實(shí)施例中,將擴(kuò)展的媒體工廠添加到原生媒體服務(wù)進(jìn)程的全局地址空間中,以實(shí)現(xiàn)對原生的媒體工廠所支持和所不支持媒體數(shù)據(jù)的播放,減少了開發(fā)工作量,對操作系統(tǒng)原生邏輯介入比較少,可減少因修改操作系統(tǒng)原生邏輯帶來新缺陷的情況。
圖10為另一個實(shí)施例中媒體數(shù)據(jù)播放裝置900的結(jié)構(gòu)框圖。參照圖10,該媒體數(shù)據(jù)播放裝置900還包括:注入模塊905,用于向原生媒體服務(wù)進(jìn)程注入自定義代碼;通過自定義代碼,在原生媒體服務(wù)進(jìn)程的全局地址空間中添加擴(kuò)展的媒體工廠;監(jiān)測到原生媒體服務(wù)進(jìn)程關(guān)閉,則待原生媒體服務(wù)進(jìn)程重啟后,繼續(xù)向原生媒體服務(wù)進(jìn)程注入自定義代碼。
本實(shí)施例中,通過向原生媒體服務(wù)進(jìn)程注入自定義代碼就可以實(shí)現(xiàn)對操作系統(tǒng)媒體數(shù)據(jù)處理能力的擴(kuò)展,不需要在操作系統(tǒng)源碼基礎(chǔ)上進(jìn)行修改,在無法獲取到操作系統(tǒng)源碼的情況下也可以實(shí)現(xiàn)對操作系統(tǒng)媒體數(shù)據(jù)處理能力的擴(kuò)展。而且,可自動發(fā)現(xiàn)原生媒體服務(wù)進(jìn)程關(guān)閉的情況,并在原生媒體服務(wù)進(jìn)程重啟后重新注入自定義代碼,保證了對操作系統(tǒng)媒體數(shù)據(jù)處理能力進(jìn)行擴(kuò)展的有效性。
在一個實(shí)施例中,媒體播放方式匹配模塊903還用于通過調(diào)用命名為標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口的自定義接口,調(diào)用易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口;通過調(diào)用易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,檢測原生媒體播放方式是否支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)。
本實(shí)施例中,巧妙地利用了接口名稱實(shí)現(xiàn)了對操作系統(tǒng)媒體數(shù)據(jù)處理能力的擴(kuò)展,在原生的媒體工廠支持媒體數(shù)據(jù)時,處理邏輯發(fā)生的變化少,盡量減少對操作系統(tǒng)原生邏輯的介入,可減少因修改操作系統(tǒng)原生邏輯帶來新缺陷的情況。
在一個實(shí)施例中,媒體播放方式匹配模塊903還用于當(dāng)檢測到支持播放時,通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,為媒體數(shù)據(jù)匹配原生的媒體播放方式;當(dāng)檢測到不支持播放時,為媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式包括:當(dāng)檢測到不支持播放時,通過自定義接口,為媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式。
本實(shí)施例中,通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,檢測原生的媒體工廠是否支持媒體數(shù)據(jù),在檢測到支持時仍然通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口,為媒體數(shù)據(jù)匹配原生的媒體播放方式。而在通過易名的原生標(biāo)準(zhǔn)媒體數(shù)據(jù)播放接口判斷出原生的媒體工廠不支持媒體數(shù)據(jù)時,才通過自定義接口,為媒體數(shù)據(jù)匹配擴(kuò)展的媒體播放方式。盡量減少對操作系統(tǒng)原生邏輯的介入,可減少因修改操作系統(tǒng)原生邏輯帶來新缺陷的情況。
在一個實(shí)施例中,媒體播放方式匹配模塊903還用于當(dāng)滿足以下至少一者時,判定原生的媒體播放方式不支持播放媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù);
1),通過原生的媒體參數(shù)獲取函數(shù),獲取到媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的通道數(shù)目為0。
2),通過原生的媒體參數(shù)獲取函數(shù),獲取媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的編碼格式失敗。
3),獲取到媒體數(shù)據(jù)地址所對應(yīng)的媒體數(shù)據(jù)的編碼格式后,判定獲取的編碼格式不被原生解碼器所支持。
本實(shí)施例中,提供了多個可快速判斷媒體數(shù)據(jù)是否被原生的媒體工廠所支持的判斷條件,可以實(shí)現(xiàn)對媒體數(shù)據(jù)是否被原生的媒體工廠所支持的高效判斷。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,該計(jì)算機(jī)程序可存儲于一計(jì)算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實(shí)施例的流程。其中,前述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)等非易失性存儲介質(zhì),或隨機(jī)存儲記憶體(Random Access Memory,RAM)等。
以上實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對上述實(shí)施例中的各個技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。
以上實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。