本發(fā)明涉及通信技術(shù),尤其涉及一種視頻播放方法、裝置及終端。
背景技術(shù):
隨著網(wǎng)絡(luò)帶寬的不斷提高,用戶可以通過終端直接觀看網(wǎng)絡(luò)視頻。網(wǎng)絡(luò)視頻在播放過程中,當網(wǎng)絡(luò)下載速度低于片源碼率,終端中的緩存數(shù)據(jù)持續(xù)降低時,播放就會出現(xiàn)卡頓。
現(xiàn)有技術(shù)中,終端通過特定的算法確定終端中已經(jīng)緩存的網(wǎng)絡(luò)視頻數(shù)據(jù)量,當已經(jīng)緩存的網(wǎng)絡(luò)視頻數(shù)據(jù)量低于預(yù)設(shè)的緩沖開始閾值時,終端會暫停播放,開始緩沖。當通過緩沖所緩存的數(shù)據(jù)量達到預(yù)設(shè)的緩沖結(jié)束閾值時,終端會結(jié)束緩沖,繼續(xù)播放。
但是使用現(xiàn)有技術(shù)的方法所確定出的終端中已經(jīng)緩存的網(wǎng)絡(luò)視頻數(shù)據(jù)量不夠準確,導致緩沖次數(shù)過多,影響用戶體驗。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種視頻播放方法、裝置及終端,用于解決現(xiàn)有技術(shù)中由于確定出的終端中已經(jīng)緩存的網(wǎng)絡(luò)視頻數(shù)據(jù)量不夠準確而導致的緩沖次數(shù)過多,影響用戶體驗的問題。
本發(fā)明第一方面提供一種視頻播放方法,包括:
檢測當前周期的可檢測緩存數(shù)據(jù)量;
根據(jù)所述當前周期的可檢測緩存數(shù)據(jù)量、所述當前周期的前一周期的可檢測緩存數(shù)據(jù)量以及所述當前周期的前一周期的實際緩存數(shù)據(jù)量,確定當前周期的實際緩存數(shù)據(jù)量;
根據(jù)當前周期的實際緩存數(shù)據(jù)量確定暫停播放視頻或者繼續(xù)播放視頻。
本發(fā)明第二方面提供一種視頻播放裝置,包括:
檢測模塊,用于檢測當前周期的可檢測緩存數(shù)據(jù)量;
確定模塊,用于根據(jù)所述當前周期的可檢測緩存數(shù)據(jù)量、所述當前周期的前一周期的可檢測緩存數(shù)據(jù)量以及所述當前周期的前一周期的實際緩存數(shù)據(jù)量,確定當前周期的實際緩存數(shù)據(jù)量;
播放模塊,用于根據(jù)當前周期的實際緩存數(shù)據(jù)量確定暫停播放視頻或者繼續(xù)播放視頻。
本發(fā)明第三方面提供一種終端,包括:
處理器;
用于存儲所述處理器的可執(zhí)行指令的存儲器;
其中,所述處理器用于:
檢測當前周期的可檢測緩存數(shù)據(jù)量;
根據(jù)所述當前周期的可檢測緩存數(shù)據(jù)量、所述當前周期的前一周期的可檢測緩存數(shù)據(jù)量以及所述當前周期的前一周期的實際緩存數(shù)據(jù)量,確定當前周期的實際緩存數(shù)據(jù)量;
根據(jù)當前周期的實際緩存數(shù)據(jù)量確定暫停播放視頻或者繼續(xù)播放視頻。
本發(fā)明所提供的視頻播放方法、裝置及終端,終端在檢測出當前周期的可檢測緩存數(shù)據(jù)量之后,結(jié)合當前周期的可檢測緩存數(shù)據(jù)量以及前一周期的可檢測緩存數(shù)據(jù)量和實際緩存數(shù)據(jù)量,來確定當前周期的實際緩存數(shù)據(jù)量,即基于前一周期的緩存情況來確定當前周期的實際緩存數(shù)據(jù)量,使得未知的緩存數(shù)據(jù)量被考慮進來,從而極大提升了緩存數(shù)據(jù)量的準確性,減少了緩沖次數(shù),提升了用戶體驗。
附圖說明
為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為終端中進行視頻處理的一種示例性的模塊劃分;
圖2為本發(fā)明提供的視頻播放方法實施例一的流程示意圖;
圖3為本發(fā)明提供的視頻播放方法實施例二的流程示意圖;
圖4為本發(fā)明提供的視頻播放裝置實施例一的模塊結(jié)構(gòu)圖;
圖5為本發(fā)明提供的視頻播放裝置實施例二的模塊結(jié)構(gòu)圖;
圖6為本發(fā)明提供的終端實施例一的實體結(jié)構(gòu)圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
終端中進行視頻處理的模塊可能有多個,圖1為終端中進行視頻處理的一種示例性的模塊劃分,如圖1所示,該終端中包括數(shù)據(jù)下載模塊、音視頻分離模塊、解碼器以及輸出模塊,其中,數(shù)據(jù)下載模塊用于從網(wǎng)絡(luò)中下載待播放視頻數(shù)據(jù),并將數(shù)據(jù)發(fā)送給音視頻分離模塊,音視頻分離模塊進行音視頻分離,將分離出的音頻數(shù)據(jù)和視頻數(shù)據(jù)發(fā)送給解碼器,由解碼器分別對音頻數(shù)據(jù)和視頻數(shù)據(jù)解碼,再由輸出模塊輸出后播放。在上述的視頻處理過程中,可能有多個模塊中都存在緩存數(shù)據(jù)量,但是使用現(xiàn)有技術(shù)中的方案并不將所有模塊中的緩存數(shù)據(jù)量都直接檢測出來。例如,對于上述模塊劃分,在音視頻分離模塊、解碼器和輸出模塊中都可能存在緩存數(shù)據(jù)量,其中,音視頻分離模塊的緩存數(shù)據(jù)量可以通過判斷播放時長等方式直接檢測出來,但是解碼器和輸出模塊中的緩存數(shù)據(jù)量可能不能檢測出來或者很難檢測出來,則這兩個模塊中的緩存數(shù)據(jù)量就為未知的緩存數(shù)據(jù)量。
現(xiàn)有技術(shù)中直接將可以檢測出來的緩存數(shù)據(jù)量作為終端中的總的緩存數(shù)據(jù)量,而對于未知的緩存數(shù)據(jù)量不予考慮。在這種處理方式下,被用作判斷是否要緩沖的依據(jù)的緩存數(shù)據(jù)量就比終端中實際的緩存數(shù)據(jù)量小,從而可能出現(xiàn)不需要緩沖時卻進行了緩沖的情況,導致緩沖次數(shù)過多,影響用戶體驗。
本發(fā)明基于上述問題,提出一種視頻播放方法,結(jié)合前一周期和當前周期的可檢測緩存數(shù)據(jù)量來確定當前周期的實際緩存數(shù)據(jù)量,保證了當前周期的實際緩存數(shù)據(jù)量的準確性,減少了視頻在播放過程中的緩沖次數(shù),提升了用戶體驗。
需要說明的是,圖1所示的模塊劃分僅是一種示例,本發(fā)明以下實施例以該模塊劃分為例來進行說明,但是圖1所示的模塊劃分僅用于更清楚地解釋本發(fā)明的技術(shù)方案,不應(yīng)將其作為本發(fā)明的限制,本發(fā)明的技術(shù)方案同樣可以適用于不使用圖1所示的模塊劃分的任何終端中。
圖2為本發(fā)明提供的視頻播放方法實施例一的流程示意圖,該方法的執(zhí)行主體為具有視頻播放功能的終端,如圖1所示,該方法包括:
S201、檢測當前周期的可檢測緩存數(shù)據(jù)量。
本發(fā)明的方法需要按照一定的時間間隔周期性執(zhí)行,每個周期的處理過程中都需要在上一周期所確定出的結(jié)果的基礎(chǔ)上再進行計算。
在每個周期的處理中,首先檢測當前周期的可檢測緩存數(shù)據(jù)量,即可以檢測出來的緩存數(shù)據(jù)量,例如,如圖1所示的模塊中,音視頻分離模塊可以分離出音頻數(shù)據(jù)和視頻數(shù)據(jù),分離出的音頻數(shù)據(jù)和視頻數(shù)據(jù)都具有顯示時間戳(Presentation Time Stamp,簡稱PTS),根據(jù)音頻數(shù)據(jù)的PTS以及視頻數(shù)據(jù)的PTS,就可以檢測出音視頻分離模塊中的緩存數(shù)據(jù)量,即可檢測緩存數(shù)據(jù)量。
S202、根據(jù)當前周期的可檢測緩存數(shù)據(jù)量、當前周期的前一周期的可檢測緩存數(shù)據(jù)量以及當前周期的前一周期的實際緩存數(shù)據(jù)量,確定當前周期的實際緩存數(shù)據(jù)量。
其中,實際緩存數(shù)據(jù)量表示終端中實際緩存的數(shù)據(jù)量,即可檢測出的緩存數(shù)據(jù)量與未知緩存數(shù)據(jù)量的和,是每個周期中需要最終得到的緩存數(shù)據(jù)量。
當前周期的前一周期的可檢測緩存數(shù)據(jù)量以及其實際緩存數(shù)據(jù)量在前一周期的處理過程中已經(jīng)確定出來,終端對其進行保存。在當前周期,終端結(jié)合前一周期的可檢測緩存數(shù)據(jù)量、前一周期的實際緩存數(shù)據(jù)量以及當前周期所檢測出的可檢測緩存數(shù)據(jù)量,來確定出當前周期的實際緩存數(shù)據(jù)量。
S203、根據(jù)當前周期的實際緩存數(shù)據(jù)量確定暫停播放視頻或者繼續(xù)播放視頻。
具體地,在每個周期中,當確定出實際緩存數(shù)據(jù)量之后,如果視頻當前正常播放,則將所獲取到的實際緩存數(shù)據(jù)量同預(yù)設(shè)的緩沖開始閾值進行比較,如果實際緩存數(shù)據(jù)量小于預(yù)設(shè)的緩沖開始閾值,則暫停播放視頻;如果視頻當前已經(jīng)暫停,則將所獲取到的實際緩存數(shù)據(jù)量同預(yù)設(shè)的緩沖結(jié)束閾值進行比較,如果實際緩存數(shù)據(jù)量大于預(yù)設(shè)的緩沖結(jié)束閾值,則繼續(xù)播放視頻。
本實施例中,終端在檢測出當前周期的可檢測緩存數(shù)據(jù)量之后,結(jié)合當前周期的可檢測緩存數(shù)據(jù)量以及前一周期的可檢測緩存數(shù)據(jù)量和實際緩存數(shù)據(jù)量,來確定當前周期的實際緩存數(shù)據(jù)量,即基于前一周期的緩存情況來確定當前周期的實際緩存數(shù)據(jù)量,使得未知的緩存數(shù)據(jù)量被考慮進來,從而極大提升了緩存數(shù)據(jù)量的準確性,減少了緩沖次數(shù),提升了用戶體驗。
在上述實施例的基礎(chǔ)上,本實施例涉及終端確定當前周期的實際緩存數(shù)據(jù)量的具體方法,即,圖3為本發(fā)明提供的視頻播放方法實施例二的流程示意圖,如圖3所示,上述步驟S202具體包括:
S301、判斷當前周期的可檢測緩存數(shù)據(jù)量是否大于當前周期的前一周期的可檢測緩存數(shù)據(jù)量,若是,則執(zhí)行S302,否則,執(zhí)行S303。
其中,本實施例中使用播放時長作為緩存數(shù)據(jù)量的單位,即可檢測緩存數(shù)據(jù)量使用播放時長表示,同時,實際緩存數(shù)據(jù)量也使用播放時長表示。
具體地,以前述圖1的模塊劃分為例,在音視頻分離模塊分離出音頻數(shù)據(jù)和視頻數(shù)據(jù)之后,可以獲取到音頻數(shù)據(jù)的PTS以及視頻數(shù)據(jù)的PTS,根據(jù)PTS,終端就可以計算出音頻數(shù)據(jù)的播放時長以及視頻數(shù)據(jù)的播放時長,如果音頻數(shù)據(jù)的播放時長和視頻數(shù)據(jù)的播放時長不同,則選擇其中播放時長較小的時長作為音視頻分離模塊中的可檢測緩存數(shù)據(jù)量。
S302、計算當前周期的可檢測緩存數(shù)據(jù)量與當前周期的前一周期的可檢測緩存數(shù)據(jù)量的差值,并將差值與當前周期的前一周期的實際緩存數(shù)據(jù)量的和作為第一實際緩存數(shù)據(jù)量。
S303、將當前周期的前一周期的實際緩存數(shù)據(jù)量作為第一實際緩存數(shù)據(jù)量。
其中,第一實際緩存數(shù)據(jù)量是本實施例的算法處理過程中的臨時數(shù)據(jù),即先進行S302或S303的計算,用第一實際緩存數(shù)據(jù)量來表示計算結(jié)果,再基于第一實際緩存數(shù)據(jù)量進行下一步的計算。
S304、判斷視頻是否已經(jīng)開始播放并且播放正常,若是,則執(zhí)行S305,否則,執(zhí)行S306。
S305、將第一實際緩存數(shù)據(jù)量減去預(yù)設(shè)時長,獲取計算結(jié)果,將計算結(jié)果作為新的第一實際緩存數(shù)據(jù)量。繼續(xù)執(zhí)行S306。
如果當前周期中視頻正常播放,則將第一實際緩存數(shù)據(jù)量減去預(yù)設(shè)時長,該預(yù)設(shè)時長的值等于終端確定實際緩存數(shù)據(jù)量的周期長度。例如,如果終端每隔30ms確定一次實際緩存數(shù)據(jù)量,則預(yù)設(shè)時長的值為30ms。
S306、判斷第一實際緩存數(shù)據(jù)量是否小于當前周期的可檢測緩存數(shù)據(jù)量,若是,則執(zhí)行S307,否則執(zhí)行S308。
S307、將當前周期的可檢測緩存數(shù)據(jù)量作為當前周期的實際緩存數(shù)據(jù)量。
S308、將第一實際緩存數(shù)據(jù)量作為當前周期的實際緩存數(shù)據(jù)量。
以下以公式的形式解釋上述過程:
假設(shè)可檢測緩存數(shù)據(jù)量為bufferK,實際緩存數(shù)據(jù)量為bufferT,則當前周期可檢測緩存數(shù)據(jù)量為bufferK(x),當前周期實際緩存數(shù)據(jù)量為bufferT(x),其中x為周期的標識,x為大于等于1的整數(shù)。
第一步:通過檢測得到bufferK(x)。
第二步:如果bufferK(x)>bufferK(x-1),則
bufferT(x)=bufferT(x-1)+(bufferK(x)-bufferK(x-1))
如果bufferK(x)<=bufferK(x-1),則
bufferT(x)=bufferT(x-1)
其中,本步驟中得到的bufferT(x)為臨時值,即上述第一實際緩存數(shù)據(jù)量。
本步驟中,如果可檢測的緩存數(shù)據(jù)量比前一周期多,則說明下載數(shù)據(jù)量比播放數(shù)據(jù)量大,則將兩個周期之間的差值和上一周期的實際緩存數(shù)據(jù)量作為當前周期臨時緩存數(shù)據(jù)量。如果可檢測的緩存數(shù)據(jù)量比前一周期少或與前一周期相等,則說明下載數(shù)據(jù)量比播放數(shù)據(jù)量少或相等,則暫時將前一周期的實際緩存數(shù)據(jù)量作為當前周期的實際緩存數(shù)據(jù)量。
第三步:如果視頻已經(jīng)開始播放并且播放正常,則
bufferT(x)=bufferT(x)–30ms
本步驟中,判斷視頻是否正在正常播放,如果是,則將第二步算出來的臨時實際緩存數(shù)據(jù)量減去預(yù)設(shè)時長,即減去檢測周期間隔時間,作為新的臨時bufferT(x)。
如果不滿足本步驟的條件,則在本步驟中bufferT(x)保持第二步的計算結(jié)果不變。30ms為預(yù)設(shè)時長,可以根據(jù)預(yù)設(shè)時長進行改變。
第四步:如果bufferT(x)<bufferK(x),則
bufferT(x)=bufferK(x)
如果經(jīng)過前述計算之后,臨時bufferT(x)的值比bufferK(x)還小,則認為bufferT(x)就等于bufferK(x)。
如果不滿足本步驟的條件,則直接將第三步的結(jié)果作為最終的bufferT(x)。
另一實施例中,實際緩存數(shù)據(jù)量的初始值為可檢測緩存數(shù)據(jù)量的初始值,可檢測緩存數(shù)據(jù)量的初始值由終端在視頻播放前檢測獲得。
具體地,在視頻播放之前,準備工作完成之后,終端先進行一次初始的緩存數(shù)據(jù)量檢測,記為bufferK(0),并將其作為實際緩存數(shù)據(jù)量的初始值bufferT(0),以公式表示如下:
bufferT(0)=bufferK(0)
在bufferT(0)的基礎(chǔ)上,實際緩存數(shù)據(jù)量在每個周期中按照上述算法不斷更新,從而保證了實際緩存數(shù)據(jù)量的準確性。
另一實施例中,在檢測當前周期的可檢測緩存數(shù)據(jù)量時,具體可以通過以下方法檢測:
使用第一線程檢測當前周期的可檢測緩存數(shù)據(jù)量,該第一線程視頻播放前啟動。
在開始播放視頻之前就啟動第一線程,第一線程在視頻播放過程中一直運行,第一線程按照終端中所設(shè)置的周期,在每個周期都檢測可檢測緩存數(shù)據(jù)量。其中,該周期即為前述實施例中確定實際緩存數(shù)據(jù)量的周期,即第一線程是以固定的時間間隔來檢測可檢測緩存數(shù)據(jù)量的,該時間間隔等于終端確定實際緩存數(shù)據(jù)量的周期長度,具體為前述實施例中的預(yù)設(shè)時長。
第一線程在運行時,首先獲取當前周期所接收到的數(shù)據(jù)的PTS信息,根據(jù)PTS信息計算當前周期所接收到的數(shù)據(jù)的播放時長,將所計算出的當前周期所接收到的數(shù)據(jù)的播放時長作為當前周期的可檢測緩存數(shù)據(jù)量。
具體地,以圖1所示的模塊劃分為例,在每個周期中,當音視頻分離模塊分離出音頻數(shù)據(jù)和視頻數(shù)據(jù)之后,第一線程首先獲取音頻數(shù)據(jù)和視頻數(shù)據(jù)的PTS,根據(jù)PTS計算出播放時長,并選擇音頻數(shù)據(jù)的播放時長和視頻數(shù)據(jù)的播放時長中較小的值,將較小的值作為這一周期的可檢測緩存數(shù)據(jù)量。
可選地,上述的預(yù)設(shè)時長,即周期間隔間隔時間為30ms。
圖4為本發(fā)明提供的視頻播放裝置實施例一的模塊結(jié)構(gòu)圖,如圖4所示,該裝置包括:
檢測模塊401,用于檢測當前周期的可檢測緩存數(shù)據(jù)量。
確定模塊402,用于根據(jù)當前周期的可檢測緩存數(shù)據(jù)量、當前周期的前一周期的可檢測緩存數(shù)據(jù)量以及當前周期的前一周期的實際緩存數(shù)據(jù)量,確定當前周期的實際緩存數(shù)據(jù)量。
播放模塊403,用于根據(jù)當前周期的實際緩存數(shù)據(jù)量確定暫停播放視頻或者繼續(xù)播放視頻。
該裝置用于實現(xiàn)前述方法實施例,其實現(xiàn)原理和技術(shù)效果類似,此處不再贅述。
圖5為本發(fā)明提供的視頻播放裝置實施例二的模塊結(jié)構(gòu)圖,如圖5所示,檢測緩存數(shù)據(jù)量使用播放時長表示,確定模塊402包括:
第一計算單元4021,用于判斷當前周期的可檢測緩存數(shù)據(jù)量是否大于當前周期的前一周期的可檢測緩存數(shù)據(jù)量,若是,則計算當前周期的可檢測緩存數(shù)據(jù)量與當前周期的前一周期的可檢測緩存數(shù)據(jù)量的差值,并將差值與當前周期的前一周期的實際緩存數(shù)據(jù)量的和作為第一實際緩存數(shù)據(jù)量;若否,則將當前周期的前一周期的實際緩存數(shù)據(jù)量作為第一實際緩存數(shù)據(jù)量。
第二計算單元4022,用于判斷視頻是否已經(jīng)開始播放并且播放正常,若是,則將第一實際緩存數(shù)據(jù)量減去預(yù)設(shè)時長,獲取計算結(jié)果,將計算結(jié)果作為新的第一實際緩存數(shù)據(jù)量。
第三計算單元4023,用于判斷第一實際緩存數(shù)據(jù)量是否小于當前周期的可檢測緩存數(shù)據(jù)量,若是,則將當前周期的可檢測緩存數(shù)據(jù)量作為當前周期的實際緩存數(shù)據(jù)量;若否,則將第一實際緩存數(shù)據(jù)量作為當前周期的實際緩存數(shù)據(jù)量。
另一實施例中,上述實際緩存數(shù)據(jù)量的初始值為上述可檢測緩存數(shù)據(jù)量的初始值,可檢測緩存數(shù)據(jù)量的初始值由終端在視頻播放前檢測獲得。
另一實施例中,檢測模塊401具體用于:
使用第一線程檢測當前周期的可檢測緩存數(shù)據(jù)量,第一線程在視頻播放前啟動。
另一實施例中,檢測模塊401具體還用于:
使用第一線程獲取當前周期所接收到的數(shù)據(jù)的PTS信息,根據(jù)PTS信息計算當前周期所接收到的數(shù)據(jù)的播放時長,將所計算出的當前周期所接收到的數(shù)據(jù)的播放時長作為當前周期的可檢測緩存數(shù)據(jù)量。
圖6為本發(fā)明提供的終端實施例一的實體結(jié)構(gòu)圖,如圖6所示,該終端包括:
處理器61;
用于存儲處理器61的可執(zhí)行指令的存儲器62;
其中,處理器61用于:
檢測當前周期的可檢測緩存數(shù)據(jù)量;
根據(jù)所述當前周期的可檢測緩存數(shù)據(jù)量、所述當前周期的前一周期的可檢測緩存數(shù)據(jù)量以及所述當前周期的前一周期的實際緩存數(shù)據(jù)量,確定當前周期的實際緩存數(shù)據(jù)量;
根據(jù)當前周期的實際緩存數(shù)據(jù)量確定暫停播放視頻或者繼續(xù)播放視頻。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。