本發(fā)明涉及視頻播放技術(shù)領(lǐng)域,具體涉及一種播放視頻列表中多視頻的播放系統(tǒng)及播放方法。
背景技術(shù):
視頻列表用于存儲(chǔ)待播放視頻的信息以及待播放視頻對(duì)應(yīng)的視頻播放組件。目前播放視頻列表中多視頻的方法是,在視頻列表中直接包含有許多互相獨(dú)立的視頻播放組件,每個(gè)視頻播放組件包括安卓系統(tǒng)自帶的視頻渲染器和視頻播放器,播放每個(gè)視頻都需調(diào)用視頻渲染器和視頻播放器。
參見圖1所示,一個(gè)視頻列表顯示有三條待播放視頻,那么該視頻列表內(nèi)部就包含有三組的視頻播放組件:
當(dāng)視頻列表播放第一條待播放視頻時(shí),第一組視頻播放組件播放第一條待播放視頻,并暫停其他兩組視頻播放組件的播放;
當(dāng)視頻列表播放第二條待播放視頻時(shí),第二組視頻播放組件播放第二條待播放視頻,并暫停其他兩組視頻播放組件的播放;
當(dāng)視頻列表播放第三條待播放視頻時(shí),第三組視頻播放組件播放第三條待播放視頻,并暫停其他兩組視頻播放組件的播放。
由于安卓系統(tǒng)的特性,視頻列表中的待播放視頻播放或僅顯示都會(huì)占用CPU和內(nèi)存;并且由于視頻播放組件中的視頻播放器是重量級(jí)工具,本身就占用較多的CPU和內(nèi)存,使用該方法播放多視頻時(shí),視頻列表中有三條待播放視頻就要會(huì)產(chǎn)生三倍的資源消耗,視頻列表中待播放視頻越多就要占用越多的CPU和內(nèi)存。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種播放視頻列表中多視頻的播放系統(tǒng)及播放方法,可有效降低CPU和內(nèi)存占用率。
為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:一種播放視頻列表中多視頻的播放系統(tǒng)包括:視頻列表模塊,用于獲取待播放視頻的信息并加載到視頻列表中,所述視頻列表用于存儲(chǔ)待播放視頻的信息以及待播放視頻對(duì)應(yīng)的視頻渲染器;向安卓系統(tǒng)發(fā)送獲取視頻渲染器的請求,并僅將每個(gè)待播放視頻對(duì)應(yīng)的視頻渲染器加載到視頻列表中,每一個(gè)待播放視頻均對(duì)應(yīng)一視頻渲染器;監(jiān)聽屏幕的滑動(dòng)事件;視頻播放模塊,用于初始化視頻播放器,視頻列表模塊中的所有待播放視頻共用一視頻播放器;當(dāng)視頻列表模塊監(jiān)聽到滑動(dòng)事件時(shí),使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放待播放視頻。
在上述技術(shù)方案的基礎(chǔ)上,視頻列表模塊包括:
渲染器加載單元,用于獲取待播放視頻的信息并加載到視頻列表中,向系統(tǒng)發(fā)送獲取視頻渲染器的請求,僅將每個(gè)待播放視頻對(duì)應(yīng)的視頻渲染器加載到視頻列表中;
監(jiān)聽單元,用于監(jiān)聽屏幕的滑動(dòng)事件。
在上述技術(shù)方案的基礎(chǔ)上,所述滑動(dòng)事件為屏幕的滑動(dòng)狀態(tài)由滑動(dòng)變?yōu)殪o止。
在上述技術(shù)方案的基礎(chǔ)上,視頻列表模塊包括:播放條件判斷單元,用于遍歷視頻列表中的待播放視頻,判斷待播放視頻是否滿足播放條件并將判斷結(jié)果反饋給視頻播放模塊;視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放第一個(gè)滿足播放條件的待播放視頻。
在上述技術(shù)方案的基礎(chǔ)上,所述播放條件為視頻列表中的視頻渲染器的顯示位置的上邊界和下邊界均未滑出屏。
本發(fā)明還公開了一種采用所述播放視頻列表中多視頻的播放系統(tǒng)的播放方法:
S1,視頻列表模塊獲取待播放視頻的信息并加載到視頻列表中,向系統(tǒng)發(fā)送獲取視頻渲染器的請求,僅將每個(gè)待播放視頻對(duì)應(yīng)的視頻渲染器加載到視頻列表中,每一個(gè)待播放視頻均對(duì)應(yīng)一視頻渲染器;
S2,視頻播放模塊初始化視頻播放器,視頻列表模塊中的所有待播放視頻共用一視頻播放器;
S3,視頻列表模塊監(jiān)聽屏幕的滑動(dòng)事件;
S4,當(dāng)視頻列表模塊監(jiān)聽到滑動(dòng)事件時(shí),視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器根據(jù)待播放視頻的信息播放視頻。
在上述技術(shù)方案的基礎(chǔ)上,所述滑動(dòng)事件為屏幕的滑動(dòng)狀態(tài)由滑動(dòng)變?yōu)殪o止。
在上述技術(shù)方案的基礎(chǔ)上,步驟S4包括:
當(dāng)視頻列表模塊監(jiān)聽到滑動(dòng)事件時(shí),視頻列表模塊遍歷視頻列表中的待播放視頻,找出第一個(gè)滿足播放條件的待播放視頻并反饋給視頻播放模塊;視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放待播放視頻。
在上述技術(shù)方案的基礎(chǔ)上,所述播放條件為視頻列表中的視頻渲染器的顯示位置的上邊界和下邊界均未滑出屏幕邊界。
在上述技術(shù)方案的基礎(chǔ)上,步驟S4具體包括:
S401,當(dāng)視頻列表模塊監(jiān)聽到滑動(dòng)事件時(shí),視頻列表模塊判斷視頻播放器是否處于播放中的狀態(tài),若是,進(jìn)入步驟S402,若否,進(jìn)入步驟S405;
S402,判斷視頻播放器播放的視頻對(duì)應(yīng)的視頻渲染器的顯示位置的上邊界和下邊界是否均未滑出屏幕邊界;若是,進(jìn)入步驟S403;若否,進(jìn)入步驟S404;
步驟S403,繼續(xù)播放視頻,結(jié)束;
步驟S404,終止視頻播放器正在播放的視頻;
步驟S405,視頻列表模塊遍歷視頻列表中的待播放視頻,找出是否存在滿足播放條件的待播放視頻;若是,進(jìn)入步驟S406,若否,進(jìn)入步驟S407;
步驟S406,將第一個(gè)滿足播放條件的待播放視頻反饋給視頻播放模塊;視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放待播放視頻;
步驟S407,終止視頻播放器,結(jié)束。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
本發(fā)明在視頻列表中僅加載視頻渲染器而不是整套視頻播放組件,再初始化視頻播放器播放器,視頻列表模塊中的所有待播放視頻共用一視頻播放器;在視頻列表模塊監(jiān)聽到監(jiān)聽事件時(shí),視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放待播放視頻。本發(fā)明把占用CPU和內(nèi)存最多的視頻播放器從視頻列表中拆分出來,只用一個(gè)視頻播放器即可播放視頻列表中所有待播放視頻,極大降低CPU和內(nèi)存占用。
附圖說明
圖1為本發(fā)明背景技術(shù)中視頻列表中顯示有三條待播放視頻的示意圖;
圖2為本發(fā)明實(shí)施例中播放視頻列表中多視頻的播放系統(tǒng)的結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例中播放視頻列表中多視頻的播放方法的流程示意圖;
圖4為本發(fā)明實(shí)施例中播放視頻列表中多視頻的播放方法步驟S4的流程示意圖;
圖5為本發(fā)明實(shí)施例中播放視頻列表中多視頻的播放方法中視頻渲染器完整顯示的示意圖;
圖6為本發(fā)明實(shí)施例中播放視頻列表中多視頻的播放方法中視頻渲染器上邊界超出屏幕邊界的示意圖;
圖7為本發(fā)明實(shí)施例中播放視頻列表中多視頻的播放方法中視頻渲染器下邊界超出屏幕邊界的示意圖。
具體實(shí)施方式
以下結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。
參見圖2所示,本發(fā)明實(shí)施例提供一種視頻列表模塊,用于獲取待播放視頻的信息并加載到視頻列表中,視頻列表用于存儲(chǔ)待播放視頻的信息以及待播放視頻對(duì)應(yīng)的視頻渲染器,每一個(gè)待播放視頻均對(duì)應(yīng)一視頻渲染器;向安卓系統(tǒng)發(fā)送獲取視頻渲染器的請求,僅將每個(gè)待播放視頻對(duì)應(yīng)的視頻渲染器加載到視頻列表中;監(jiān)聽屏幕的滑動(dòng)事件;視頻播放模塊,用于初始化視頻播放器,視頻列表模塊中的所有待播放視頻共用一視頻播放器;當(dāng)視頻列表模塊監(jiān)聽到滑動(dòng)事件時(shí),使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放待播放視頻。本發(fā)明在視頻列表中僅加載視頻渲染器而不是整套視頻播放組件,再初始化一個(gè)唯一的視頻播放器播放器,在視頻列表模塊監(jiān)聽到監(jiān)聽事件時(shí),視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放待播放視頻。本發(fā)明把占用CPU和內(nèi)存最多的視頻播放器從視頻列表中拆分出來,只用一個(gè)視頻播放器即可播放視頻列表中所有待播放視頻,極大降低CPU和內(nèi)存占用。
例如,將每個(gè)待播放視頻對(duì)應(yīng)的視頻渲染器加載到視頻列表中包括:在視頻列表待播放視頻對(duì)應(yīng)的holder中通過注解方式獲取到視頻渲染器,此時(shí)視頻渲染器未給其分配視頻播放器,從而實(shí)現(xiàn)將視頻播放器與視頻渲染器實(shí)現(xiàn)分離。
初始化視頻播放器包括:在視頻列表所在頁面的onCreate()中創(chuàng)建視頻播放器并完成相應(yīng)的配置以及為視頻播放器通過setOnPreparedListener()設(shè)置監(jiān)聽器,用以監(jiān)聽視頻是否準(zhǔn)備好。視頻準(zhǔn)備好就調(diào)用start()函數(shù)來播放視頻。
視頻列表模塊包括:
渲染器加載單元,用于獲取待播放視頻的信息并加載到視頻列表中,向系統(tǒng)發(fā)送獲取視頻渲染器的請求,僅將每個(gè)待播放視頻對(duì)應(yīng)的視頻渲染器加載到視頻列表中;監(jiān)聽單元,用于監(jiān)聽屏幕的滑動(dòng)事件?;瑒?dòng)事件為屏幕的滑動(dòng)狀態(tài)由滑動(dòng)變?yōu)殪o止。
視頻列表模塊包括:播放條件判斷單元,用于遍歷視頻列表中的待播放視頻,判斷待播放視頻是否滿足播放條件并將判斷結(jié)果反饋給視頻播放模塊;視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放第一個(gè)滿足播放條件的待播放視頻。
播放條件為視頻列表中的視頻渲染器的顯示位置的上邊界和下邊界均未滑出屏。
參見圖3所示,一種采用播放視頻列表中多視頻的播放系統(tǒng)的播放方法,其步驟包括:
S1,視頻列表模塊獲取待播放視頻的信息并加載到視頻列表中,向系統(tǒng)發(fā)送獲取視頻渲染器的請求,僅將每個(gè)待播放視頻對(duì)應(yīng)的視頻渲染器加載到視頻列表中,每一個(gè)待播放視頻均對(duì)應(yīng)一視頻渲染器;
S2,視頻播放模塊初始化視頻播放器,視頻列表模塊中的所有待播放視頻共用一視頻播放器;
S3,視頻列表模塊監(jiān)聽屏幕的滑動(dòng)事件;視頻列表模塊調(diào)用視頻列表自身函數(shù)add On Scroll Listener()設(shè)置一個(gè)滑動(dòng)監(jiān)聽器用來監(jiān)聽滑動(dòng)事件;滑動(dòng)事件為屏幕的滑動(dòng)狀態(tài)由滑動(dòng)變?yōu)殪o止;
S4,當(dāng)視頻列表模塊監(jiān)聽到滑動(dòng)事件時(shí),視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器根據(jù)待播放視頻的信息播放視頻。視頻播放模塊調(diào)用視頻播放器的set Data Source()函數(shù)播放該視頻。
步驟S4包括:
當(dāng)視頻列表模塊監(jiān)聽到滑動(dòng)事件時(shí),視頻列表模塊遍歷視頻列表中的待播放視頻,找出第一個(gè)滿足播放條件的待播放視頻并反饋給視頻播放模塊;視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放待播放視頻。播放條件為視頻列表中的視頻渲染器的顯示位置的上邊界和下邊界均未滑出屏幕邊界。
例如,視頻列表模塊調(diào)用視頻渲染器的get Location OnScreen(location)函數(shù)來判斷視頻渲染器相對(duì)于屏幕的位置,location[1]表示視頻渲染器相對(duì)于屏幕Y軸的值:
當(dāng)location[1]>0,表示當(dāng)前的視頻渲染器上邊界未滑出屏幕上外。
location[1]+視頻的高度<當(dāng)前手機(jī)屏幕的高度,則表示當(dāng)前視頻渲染器的下邊界未滑出手機(jī)屏幕的下方。
參見圖5所示,只有當(dāng)前視頻渲染器滿足上邊界既未滑出屏幕的上方,下邊界又未滑出屏幕的下方時(shí),才滿足播放條件。
參見圖6所示,視頻渲染器上邊界既滑出屏幕的上方,參見圖7所示,視頻渲染器下邊界滑出屏幕的下方時(shí),這兩種情況下均不滿足播放條件。
參見圖4所示,步驟S4具體包括:
S401,當(dāng)視頻列表模塊監(jiān)聽到滑動(dòng)事件時(shí),視頻列表模塊判斷視頻播放器是否處于播放中的狀態(tài),若是,進(jìn)入步驟S402,若否,進(jìn)入步驟S405;
S402,判斷視頻播放器播放的視頻對(duì)應(yīng)的視頻渲染器的顯示位置的上邊界和下邊界是否均未滑出屏幕邊界;若是,進(jìn)入步驟S403;若否,進(jìn)入步驟S404;
步驟S403,繼續(xù)播放視頻,結(jié)束;
步驟S404,終止視頻播放器正在播放的視頻;
步驟S405,視頻列表模塊遍歷視頻列表中的待播放視頻,找出是否存在滿足播放條件的待播放視頻;若是,進(jìn)入步驟S406,若否,進(jìn)入步驟S407;
步驟S406,將第一個(gè)滿足播放條件的待播放視頻反饋給視頻播放模塊;視頻播放模塊使用視頻列表中的視頻渲染器調(diào)用視頻播放器播放待播放視頻;
步驟S407,終止視頻播放器,結(jié)束。
例如,通過視頻列表調(diào)用addOnScrollListener()設(shè)置的滑動(dòng)監(jiān)聽器并重寫onScrollStateChanged()函數(shù),該函數(shù)在滑動(dòng)狀態(tài)發(fā)生改變時(shí)觸發(fā),當(dāng)屏幕的滑動(dòng)狀態(tài)由“滑動(dòng)”變?yōu)椤办o止”,則判斷當(dāng)前視頻播放器是否處于”播放中”狀態(tài),若不處于播放中,則從上到下遍歷當(dāng)前顯示在屏幕上的所有待播放視頻對(duì)應(yīng)的視頻渲染器在屏幕中的位置,選擇第一個(gè)滿足視頻播放的條件的視頻渲染器,調(diào)用視頻播放器的setDataSource()函數(shù)播放該對(duì)象相應(yīng)的視頻信息,并通過視頻播放器的setDisplay()將該視頻渲染器設(shè)置給播放器,若是處于”播放中”,判斷當(dāng)前正在播放的視頻是否是第一個(gè)滿足視頻播放的條件,若滿足繼續(xù)播放,若不滿足,則停止當(dāng)前的視頻并播放當(dāng)前第一個(gè)滿足視頻播放條件的視頻。通過上述步驟保證了只用一個(gè)視頻播放器來播放列表中的所有視頻,達(dá)到降低CPU和內(nèi)存占用的目的。
本發(fā)明不局限于上述實(shí)施方式,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。