欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

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

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



背景技術(shù):

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

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

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

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

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

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



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

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

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

步驟s10、app啟動(dòng),初始化播放器;

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

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

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

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

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

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

設(shè)置緩存大小;

設(shè)置是否開(kāi)啟自動(dòng)播放;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

附圖說(shuō)明

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

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

具體實(shí)施方式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(4)設(shè)置是否開(kāi)啟自動(dòng)播放;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
平乐县| 牙克石市| 建宁县| 香河县| 台湾省| 谢通门县| 方正县| 广丰县| 大悟县| 田林县| 清镇市| 陆河县| 奉新县| 延寿县| 唐河县| 大田县| 分宜县| 历史| 延津县| 陇南市| 丰镇市| 娄烦县| 中阳县| 青神县| 丁青县| 沙田区| 沿河| 昌黎县| 平塘县| 进贤县| 桃园县| 浦北县| 金坛市| 扶沟县| 开平市| 洛川县| 托克托县| 齐齐哈尔市| 临猗县| 获嘉县| 旌德县|