亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種單例視頻播放器的實(shí)現(xiàn)方法與流程

文檔序號:11292679閱讀:616來源:國知局
一種單例視頻播放器的實(shí)現(xiàn)方法與流程

本發(fā)明涉及數(shù)據(jù)視頻播放器,具體涉及一種單例視頻播放器的實(shí)現(xiàn)方法。



背景技術(shù):

目前,市面上的播放器(例如七牛和騰訊)一般是通過以下流程實(shí)現(xiàn)播放:

(1)將自定義好的播放器視圖放置于布局文件中;

(2)在activity或者fragment中獲取到布局文件中的視圖,獲取到播放器實(shí)例,然后設(shè)置播放器的播放參數(shù)和回調(diào)函數(shù);

(3)控制播放器播放停止;

(4)如果需要進(jìn)行頁面跳轉(zhuǎn),而保持播放連續(xù),需臨時(shí)保存播放進(jìn)度和播放地址,在跳轉(zhuǎn)后新建一個播放器,并設(shè)置為臨時(shí)保存的播放地址和播放進(jìn)度,實(shí)現(xiàn)一個連續(xù)播放。

可見,當(dāng)前播放器的實(shí)現(xiàn)都是將播放器視圖直接寫到布局文件中,每次播放前都要初始化播放器的參數(shù),如果要在頁面跳轉(zhuǎn)的時(shí)候連續(xù)播放,例如列表跳轉(zhuǎn)到activity,需要記錄當(dāng)前播放進(jìn)度和播放地址等等參數(shù),在跳轉(zhuǎn)過后再次為新建的播放器設(shè)置之前記錄的參數(shù)才能播放;雖然能做到連續(xù)播放,但是上一個頁面播放的緩存沒有了,跳轉(zhuǎn)到下一個頁面的時(shí)候需要重新加載,導(dǎo)致會有緩沖的動作,影響用戶體驗(yàn),而且如果頁面持續(xù)跳轉(zhuǎn),不斷實(shí)例化播放器,會導(dǎo)致內(nèi)存不斷增大,如果內(nèi)存不及時(shí)回收會導(dǎo)致內(nèi)存溢出。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明所要解決的技術(shù)問題是當(dāng)前播放器在連續(xù)播放時(shí),跳轉(zhuǎn)到下一個頁面的時(shí),上一個頁面緩存已不在,需要重新加載,導(dǎo)致會有緩沖的動作影響用戶體驗(yàn),而且如果頁面持續(xù)跳轉(zhuǎn),不斷實(shí)例化播放器,會導(dǎo)致內(nèi)存不斷增大,內(nèi)存不能及時(shí)回收,導(dǎo)致內(nèi)存溢出的問題。

為了解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是提供一種單例視頻播放器的實(shí)現(xiàn)方法,包括以下步驟:

步驟s10、app啟動,初始化播放器;

步驟s20、在當(dāng)前頁面建立一個framelayout,作為容器放置播放器,將播放器放置于framelayout中,實(shí)現(xiàn)播放;

步驟s30、如果需要跳轉(zhuǎn)且連續(xù)播放,獲取跳轉(zhuǎn)目的頁面的目的framelayout,跳轉(zhuǎn)時(shí)不停止當(dāng)前頁面播放器,將當(dāng)前頁面framelayout中的播放器移動到目的framelayout中,并使activity或者fragment繼承接口實(shí)現(xiàn)播放所需的函數(shù)的回調(diào),開始連續(xù)播放。

在上述方法中,在步驟s10中,在application的oncreate()方法里調(diào)用videomediacontroller.init()函數(shù)進(jìn)行播放器的初始化的。

在上述方法中,初始化播放器包括:

設(shè)置準(zhǔn)備超時(shí)時(shí)間;

設(shè)置是否在線直播;

設(shè)置緩存大??;

設(shè)置是否開啟自動播放;

設(shè)置畫面預(yù)覽模式;

設(shè)置播放器背景顏色。

在上述方法中,步驟s20和步驟s30中framelayout的大小等于預(yù)想的播放器的大小,播放器自適應(yīng)framelayout的大小。

在上述方法中,所述播放所需的函數(shù)包括播放準(zhǔn)備完成回調(diào)函數(shù)、播放進(jìn)度回調(diào)函數(shù)以及播放錯誤回調(diào)函數(shù)。

在上述方法中,對所有播放所需的函數(shù)進(jìn)行了再次封裝,并使activity或者fragment繼承再次封裝的接口。

在上述方法中,跳轉(zhuǎn)目的頁面獲取目的framelayouta,再調(diào)用videomediacontroller.addvideoviewinholder(a,x)函數(shù),將當(dāng)前頁面的播放器放置到目的fragmenta當(dāng)中,第二個參數(shù)(x)控制是否顯示緩沖圖標(biāo),如果需要跳轉(zhuǎn)且連續(xù)播放,將第二個參數(shù)設(shè)置為false,如果是重新開始播放就設(shè)置為true。

在上述方法中,在將當(dāng)前頁面framelayout中的播放器移動到目的framelayout中時(shí),同時(shí)要把一個實(shí)體類傳入到videomediacontroller中,用于控制播放地址、清晰度選擇;以及通過videomediacontroller獲取到plvideotextureview播放器對象,進(jìn)行播放控制。

在上述方法中,步驟s30具體包括以下步驟:

步驟s31、接收跳轉(zhuǎn)播放頁面請求;

步驟s32、判斷當(dāng)前頁面是否有播放器,如果有,執(zhí)行步驟s33;否則,執(zhí)行步驟s37;

步驟s33、判斷是否需要連續(xù)播放,如果是執(zhí)行步驟s35;否則,執(zhí)行步驟s34;

步驟s34、停止當(dāng)前頁面播放器,然后執(zhí)行步驟s36;

步驟s35、不停止當(dāng)前頁面播放器,然后執(zhí)行步驟s36;

步驟s36、將播放器移出當(dāng)前頁面的framelayout,然后執(zhí)行步驟s38;

步驟s37、實(shí)例化一個播放器;

步驟s38、獲取跳轉(zhuǎn)目的頁面的目的framelayout;

步驟s39、將播放器加入目的framelayout;

步驟s40、activity或者fragment繼承接口實(shí)現(xiàn)回調(diào),實(shí)現(xiàn)播放。

本發(fā)明將播放器當(dāng)做一個控件來自由移動,當(dāng)一個播放界面跳轉(zhuǎn)到另外一個播放界面,只把整個播放器的視圖從之前的界面搬到另外一個界面,這樣就使得用戶之前緩沖下來的進(jìn)度不會丟失,實(shí)現(xiàn)頁面跳轉(zhuǎn)過程中無緩沖連續(xù)播放,不僅有較好的用戶體驗(yàn),而且具有以下優(yōu)點(diǎn):

(1)無需重復(fù)新建播放器,整個app內(nèi)只有一個播放器實(shí)例,能動態(tài)添加至播放頁面,減少內(nèi)存申請,避免內(nèi)存負(fù)擔(dān)加重,也減少應(yīng)用被系統(tǒng)回收的機(jī)率;

(2)無需重復(fù)初始化播放器參數(shù),避免開發(fā)者重復(fù)寫初始化,避免代碼遺留;

(3)由于實(shí)現(xiàn)播放器動態(tài)添加,所以能在頁面跳轉(zhuǎn)過程中保留緩沖和進(jìn)度跳轉(zhuǎn),實(shí)現(xiàn)無緩沖、無卡頓的連續(xù)播放;

(4)播放器的相關(guān)函數(shù)都由一個控制器控制,實(shí)現(xiàn)播放只需要幾句代碼,其他工作都交給控制器控制;且控制器還實(shí)現(xiàn)了各種回調(diào),只要activity或者fragment繼承接口就能使用。

附圖說明

圖1為本發(fā)明提供的一種單例視頻播放器的實(shí)現(xiàn)方法的流程圖;

圖2為本發(fā)明中步驟s30的具體流程圖。

具體實(shí)施方式

本發(fā)明視頻播放進(jìn)行了優(yōu)化,適用于視頻播放客戶端和新聞客戶端,并針對當(dāng)前播放器在連續(xù)播放時(shí)存在的問題,進(jìn)行了相應(yīng)改進(jìn),實(shí)現(xiàn)頁面跳轉(zhuǎn)時(shí)播放器能進(jìn)行無緩沖連續(xù)播放,減少重復(fù)實(shí)例化播放器導(dǎo)致內(nèi)存增大,與現(xiàn)有技術(shù)相比,本發(fā)明的改進(jìn)主要包括以下幾點(diǎn):

(1)在連續(xù)播放時(shí),現(xiàn)有技術(shù)將自定義好的播放器視圖放置于布局文件中,播放器的頁面往往是重復(fù)跳轉(zhuǎn),跳轉(zhuǎn)就需要實(shí)例化播放器實(shí)例才能進(jìn)行播放,會造成不必要的內(nèi)存申請;本發(fā)明有播放器的頁面就無需將播放器視圖放置于布局文件中,在整個軟件中只需實(shí)例化一個實(shí)例,在需要播放的地方實(shí)現(xiàn)動態(tài)添加播放器視圖,從而不會造成不必要的內(nèi)存申請。例如,假如a頁面要跳轉(zhuǎn)到b頁面,a和b頁面都要進(jìn)行視頻播放,在現(xiàn)有技術(shù)中需要在a和b頁面都放置一個播放器,當(dāng)進(jìn)行a到b的跳轉(zhuǎn)的時(shí)候,雖然a中的播放器會回收,但由于java的機(jī)制,回收并不會及時(shí),所以會導(dǎo)致軟件申請的內(nèi)存增大,對于內(nèi)存小的手機(jī)等智能設(shè)備來說,這是一個不小的壓力;而本發(fā)明播放器是動態(tài)添加的,所以進(jìn)行a到b跳轉(zhuǎn)時(shí),只需把a(bǔ)中的播放器移到b中即可,這樣就不會再向系統(tǒng)申請內(nèi)存。

(2)現(xiàn)有技術(shù),連續(xù)播放時(shí)需要記錄當(dāng)前播放進(jìn)度和播放地址等等參數(shù),在跳轉(zhuǎn)過后再次設(shè)置參數(shù)才能播放;本發(fā)明播放器只需要一次的播放參數(shù)設(shè)置,回調(diào)函數(shù)也是進(jìn)行了再次封裝,只要activity或者fragment繼承回調(diào)接口就可以使用回調(diào),這樣就減少了開發(fā)者重復(fù)添加回調(diào)。

(3)在現(xiàn)有技術(shù)中,進(jìn)行連續(xù)播放時(shí),上一頁面播放的緩存將沒有,跳轉(zhuǎn)到下一個頁面的時(shí)候需要重新加載,且需要保存播放進(jìn)度;本發(fā)明因?yàn)槟軇討B(tài)添加播放器視圖,且播放器的緩沖和播放進(jìn)度一般都是保存在播放器視圖中,所以動態(tài)跳轉(zhuǎn)能實(shí)現(xiàn)緩沖和播放進(jìn)度一起跳轉(zhuǎn),真正實(shí)現(xiàn)無緩沖連續(xù)播放。

下面為對本發(fā)明中涉及名詞的解釋:

application,安卓app啟動都要初始化的一個類,相當(dāng)于app中的全局變量;

activity,安卓app中界面的一種,用于界面的展示;

fragment,安卓app中界面的一種,用于界面的展示,通常嵌套在activity中;

videomeidacontroller,本發(fā)明中播放器的控制器,控制播放器動態(tài)跳轉(zhuǎn)的工具類,也是控制播放器播放的類;

plvideotextureview,第三方播放器視圖的類;

布局文件,安卓每個頁面都有布局文件,用于設(shè)置按鈕,文字等控件的位置和大小

framelayou,層布局,所有放在布局文件里的控件,都按照層次堆疊在屏幕的左上角,后加進(jìn)來的控件覆蓋前面的控件。

下面結(jié)合說明書附圖和具體實(shí)施例對本發(fā)明做出詳細(xì)的說明。

如圖1所示,本發(fā)明提供了一種單例視頻播放器的實(shí)現(xiàn)方法,包括以下步驟:

步驟s10、app啟動,初始化播放器;在本發(fā)明中,是在application的app啟動方法oncreate()里調(diào)用videomediacontroller.init()函數(shù)(videomediacontroller.init()函數(shù)表示為videomediacontroller調(diào)用videomeidacontroller里面的一個方法init())進(jìn)行播放器的初始化的;初始化播放器包括:

(1)設(shè)置準(zhǔn)備超時(shí)時(shí)間;

(2)設(shè)置是否在線直播;

(3)設(shè)置緩存大??;

(4)設(shè)置是否開啟自動播放;

(5)設(shè)置畫面預(yù)覽模式(包括全屏鋪滿、16:9和4:3等等);

(6)設(shè)置播放器背景顏色。

步驟s20、在需要播放的當(dāng)前頁面建立一個framelayout,作為容器放置播放器,將播放器放置于framelayout中,實(shí)現(xiàn)播放;需要注意的是,一定要使用framelayout,不能使用relativelayou和linearlayout,因?yàn)閯討B(tài)添加播放器的實(shí)現(xiàn)原理是在一個容器的最上層添加播放器,類似于ps中圖層的效果,而relativelayout和linearlayout無法實(shí)現(xiàn)這一效果;且framelayout的大小和需要的播放器的大小一樣,因?yàn)椴シ牌魇亲赃m應(yīng)framelayout的大小。

步驟s30、如果需要跳轉(zhuǎn)且連續(xù)播放,跳轉(zhuǎn)目的頁面建立一個目的framelayout,跳轉(zhuǎn)時(shí)不停止播放,將當(dāng)前頁面framelayout中的播放器移動到目的framelayout中,并使activity或者fragment繼承接口實(shí)現(xiàn)播放所需的函數(shù)的回調(diào),這里播放所需的函數(shù)包括播放準(zhǔn)備完成回調(diào)函數(shù)、播放進(jìn)度回調(diào)函數(shù)以及播放錯誤回調(diào)函數(shù)等,為了避免使用者一個個添加上述函數(shù),本發(fā)明對所有播放所需的函數(shù)進(jìn)行了再次封裝,這樣使用者只需添加一個已經(jīng)封裝好的接口就可以實(shí)現(xiàn)全部的播放所需的函數(shù)回調(diào),減少重復(fù)添加,方便開發(fā)者。

在本發(fā)明中,跳轉(zhuǎn)目的頁面在播放前獲取到目的framelayouta,然后調(diào)用將播放器視圖添加到framelayout中,且使播放器視圖的大小和容器的大小一樣的函數(shù)videomediacontroller.addvideoviewinholder(a,x),將當(dāng)前頁面的播放器放置到目的fragmenta當(dāng)中,第二個參數(shù)(x)控制是否顯示緩沖圖標(biāo),如果是無緩沖跳轉(zhuǎn)(需要跳轉(zhuǎn)且連續(xù)播放)的話就將第二個參數(shù)設(shè)置為false,如果是重新開始播放就設(shè)置為true,這里的目的framelayout大小設(shè)置為預(yù)想播放的區(qū)域大小,轉(zhuǎn)移過來的播放器會做自適應(yīng)尺寸。

在本發(fā)明中,在將當(dāng)前頁面framelayout中的播放器移動到目的framelayout中時(shí),同時(shí)要把一個實(shí)體類(即包含播放器播放時(shí)所需信息的集合,例如播放地址、播放標(biāo)題等等信息)傳入到videomediacontroller中,用于控制播放地址、清晰度選擇等等;通過videomediacontroller獲取到第三方播放器視圖的類plvideotextureview播放器對象,進(jìn)行播放控制。

在本發(fā)明中,如圖2所示,步驟s30具體包括以下步驟:

步驟s31、接收跳轉(zhuǎn)播放頁面請求;

步驟s32、判斷當(dāng)前頁面是否有播放器,如果有,執(zhí)行步驟s33;否則,執(zhí)行步驟s37;

步驟s33、判斷是否需要連續(xù)播放,如果是執(zhí)行步驟s35;否則,執(zhí)行步驟s34;

步驟s34、停止當(dāng)前頁面播放器,然后執(zhí)行步驟s36;

步驟s35、不停止當(dāng)前頁面播放器,然后執(zhí)行步驟s36;

步驟s36、將播放器移出當(dāng)前頁面的framelayout,然后執(zhí)行步驟s38;

步驟s37、實(shí)例化一個播放器;

步驟s38、獲取跳轉(zhuǎn)目的頁面的目的framelayout;

步驟s39、將播放器加入目的framelayout;

步驟s40、activity或者fragment繼承接口實(shí)現(xiàn)回調(diào),實(shí)現(xiàn)播放。

顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1