本發(fā)明屬于安防監(jiān)控
技術(shù)領(lǐng)域:
,尤其涉及一種視頻播放方法及裝置。
背景技術(shù):
:安防監(jiān)控系統(tǒng)是利用光纖、同軸電纜或微波在閉合的環(huán)路內(nèi)傳輸?shù)囊曨l信號、并從攝像到圖像顯示和記錄構(gòu)成的獨(dú)立完整的系統(tǒng)。它能夠?qū)崟r(shí)、形象、真實(shí)地反應(yīng)被監(jiān)控對象。目前大多數(shù)安防監(jiān)控的前端網(wǎng)點(diǎn)的音視頻數(shù)據(jù)存儲在本地,同時(shí)傳輸實(shí)時(shí)音視頻數(shù)據(jù)到監(jiān)控中心。值守人員可在監(jiān)控中心實(shí)時(shí)預(yù)覽或回放,大大降低了值守人員的工作強(qiáng)度且提高了安全防衛(wèi)的可靠性?,F(xiàn)有的視頻實(shí)時(shí)預(yù)覽或回放主要有兩種方法:一種是接收方每收到一個(gè)完整的視頻幀,立即安排該幀的解碼與渲染,這種方法不能保證視頻的流暢性;另一種是接收方收到并解碼一個(gè)視頻幀后,按照固定的幀率進(jìn)行視頻播放。通過固定的幀率播放,雖然流暢性有了保證,有最好的視覺效果,但是當(dāng)視頻流源字段里邊沒有攜帶幀率,關(guān)鍵幀解碼耗時(shí)過大,或者因網(wǎng)絡(luò)阻塞抖動(dòng),會出現(xiàn)播放幀率與視頻源幀率不一致,視頻顯著暫停再快播的卡頓效果。技術(shù)實(shí)現(xiàn)要素:鑒于此,本發(fā)明提供一種視頻播放方法及裝置,以解決視頻播放時(shí)卡頓的問題,使用戶獲得良好的實(shí)時(shí)瀏覽體驗(yàn)。本發(fā)明的第一方面,提供一種視頻播放方法,所述方法包括:設(shè)置視頻播放的流暢等級;接收視頻源數(shù)據(jù),將所述視頻源數(shù)據(jù)分為視頻數(shù)據(jù)和音頻數(shù)據(jù),所述視頻數(shù)據(jù)緩存在預(yù)設(shè)的視頻緩沖區(qū),所述音頻數(shù)據(jù)緩存在預(yù)設(shè)的音頻緩沖區(qū),并計(jì)算接收的視頻源數(shù)據(jù)的幀間隔;若所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長分別達(dá)到設(shè)置的流暢等級對應(yīng)的緩沖區(qū)間大小后,分別對第一幀視頻數(shù)據(jù)和第一幀音頻數(shù)據(jù)進(jìn)行解碼播放;根據(jù)接收的視頻源數(shù)據(jù)的幀間隔和當(dāng)前所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長計(jì)算獲得當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔;根據(jù)所述當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔獲得下一幀視頻數(shù)據(jù)和音頻數(shù)據(jù)的解碼時(shí)間。本發(fā)明的第二方面,提供一種視頻播放裝置,所述裝置包括:流暢等級設(shè)置模塊,用于設(shè)置視頻播放的流暢等級;視頻源數(shù)據(jù)接收模塊,用于接收視頻源數(shù)據(jù),將所述視頻源數(shù)據(jù)分為視頻數(shù)據(jù)和音頻數(shù)據(jù),將所述視頻數(shù)據(jù)緩存在預(yù)設(shè)的視頻緩沖區(qū),所述音頻數(shù)據(jù)緩存在預(yù)設(shè)的音頻緩沖區(qū),并計(jì)算接收的視頻源數(shù)據(jù)的幀間隔;第一幀數(shù)據(jù)解碼時(shí)間獲得模塊,用于若所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長分別達(dá)到設(shè)置的流暢等級對應(yīng)的緩沖區(qū)間大小后,分別對第一幀視頻數(shù)據(jù)和第一幀音頻數(shù)據(jù)進(jìn)行解碼播放;當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔計(jì)算模塊,用于根據(jù)接收的視頻源數(shù)據(jù)的幀間隔和當(dāng)前所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長計(jì)算獲得當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔;下一幀數(shù)據(jù)解碼時(shí)間獲得模塊,用于根據(jù)所述當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔獲得下一幀視頻數(shù)據(jù)和音頻數(shù)據(jù)的解碼時(shí)間。本發(fā)明與現(xiàn)有技術(shù)相比存在的有益效果是:本發(fā)明設(shè)置視頻播放的流暢等級;接收視頻源數(shù)據(jù),將所述視頻源數(shù)據(jù)分為視頻數(shù)據(jù)和音頻數(shù)據(jù),所述視頻數(shù)據(jù)緩存在預(yù)設(shè)的視頻緩沖區(qū),所述音頻數(shù)據(jù)緩存在預(yù)設(shè)的音頻緩沖區(qū),并計(jì)算接收的視頻源數(shù)據(jù)的幀間隔;若所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長分別達(dá)到設(shè)置的流暢等級對應(yīng)的緩沖區(qū)間大小后,分別對第一幀視頻數(shù)據(jù)和第一幀音頻數(shù)據(jù)進(jìn)行解碼播放;根據(jù)接收的視頻源數(shù)據(jù)的幀間隔和當(dāng)前所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長計(jì)算獲得當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔;根據(jù)所述當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔獲得下一幀視頻數(shù)據(jù)和音頻數(shù)據(jù)的解碼時(shí)間。由于本發(fā)明無需視頻源數(shù)據(jù)的編碼幀率參數(shù),客戶端可以根據(jù)緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長自行調(diào)整每幀播放的時(shí)間,能夠改善視頻播放時(shí)卡頓的問題,提高視頻播放的流暢性,使用戶獲得良好的實(shí)時(shí)瀏覽體驗(yàn)。而且,本發(fā)明操作方便、實(shí)現(xiàn)簡單,適應(yīng)面廣,具有較強(qiáng)的易用性和實(shí)用性。附圖說明為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明第一實(shí)施例提供的視頻播放方法的示意流程圖;圖2是本發(fā)明第二實(shí)施例提供的視頻播放方法的示意流程圖;圖3是本發(fā)明第三實(shí)施例提供的視頻播放裝置的示意框圖;圖4是本發(fā)明第四實(shí)施例提供的視頻播放裝置的示意框圖;具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。應(yīng)當(dāng)理解,當(dāng)在本說明書和所附權(quán)利要求書中使用時(shí),術(shù)語“包括”指示所描述特征、整體、步驟、操作、元素和/或組件的存在,但并不排除一個(gè)或多個(gè)其它特征、整體、步驟、操作、元素、組件和/或其集合的存在或添加。還應(yīng)當(dāng)理解,在此本發(fā)明說明書中所使用的術(shù)語僅僅是出于描述特定實(shí)施例的目的而并不意在限制本發(fā)明。如在本發(fā)明說明書和所附權(quán)利要求書中所使用的那樣,除非上下文清楚地指明其它情況,否則單數(shù)形式的“一”、“一個(gè)”及“該”意在包括復(fù)數(shù)形式。還應(yīng)當(dāng)進(jìn)一步理解,在本發(fā)明說明書和所附權(quán)利要求書中使用的術(shù)語“和/或”是指相關(guān)聯(lián)列出的項(xiàng)中的一個(gè)或多個(gè)的任何組合以及所有可能組合,并且包括這些組合。如在本說明書和所附權(quán)利要求書中所使用的那樣,術(shù)語“如果”可以依據(jù)上下文被解釋為“當(dāng)...時(shí)”或“一旦”或“響應(yīng)于確定”或“響應(yīng)于檢測到”。類似地,短語“如果確定”或“如果檢測到[所描述條件或事件]”可以依據(jù)上下文被解釋為意指“一旦確定”或“響應(yīng)于確定”或“一旦檢測到[所描述條件或事件]”或“響應(yīng)于檢測到[所描述條件或事件]”。為了說明本發(fā)明所述的技術(shù)方案,下面通過具體實(shí)施例來進(jìn)行說明。在說明具體實(shí)施例之前,首先需要說明的是,視頻數(shù)據(jù)和音頻數(shù)據(jù)分為兩個(gè)線程解碼播放,所以視頻數(shù)據(jù)解碼播放和音頻數(shù)據(jù)解碼播放的過程是兩個(gè)獨(dú)立的過程,但是兩個(gè)獨(dú)立的過程具有相同的步驟或具有相同功能的模塊,在描述相同的步驟或相同功能的模塊時(shí)將視頻解碼播放和音頻解碼播放一起描述。盡管在說明相同的步驟或相同功能的模塊時(shí)將視頻解碼播放和音頻解碼播放一起描述,但是并不意味著每一幀視頻解碼播放和每一幀音頻解碼播放要同一時(shí)刻進(jìn)行。在本發(fā)明實(shí)施例中,除非特別指明某個(gè)步驟或模塊是視頻或音頻獨(dú)有的,否則表示視頻解碼播放和音頻解碼播放過程都可以按照該步驟的邏輯關(guān)系進(jìn)行。實(shí)施例一:參見圖1,圖1是本發(fā)明實(shí)施例一提供的視頻播放方法的示意流程圖,如圖所示該方法可以包括以下步驟:步驟S101,設(shè)置視頻播放的流暢等級。在本發(fā)明實(shí)施例中,視頻播放的流暢性可能會受到網(wǎng)絡(luò)抖動(dòng)和幀解碼時(shí)間的影響。網(wǎng)絡(luò)抖動(dòng)是由于網(wǎng)絡(luò)帶寬、信號強(qiáng)度等原因,會導(dǎo)致所傳輸?shù)囊曨l源數(shù)據(jù)不能按照發(fā)送時(shí)的幀率到達(dá)接收方,接收方如果按照接收時(shí)的幀率播放視頻則可能出現(xiàn)視頻暫停而后又快播的現(xiàn)象。幀解碼時(shí)間會影響流暢等級是因?yàn)榻邮盏揭曨l源數(shù)據(jù)后,需要先對接收的視頻源數(shù)據(jù)解碼渲染,然后才能將視頻源數(shù)據(jù)中的視頻、音頻或者字幕播放出來,而視頻源數(shù)據(jù)中每幀數(shù)據(jù)從解碼到播放出來所需的時(shí)間也不相同,如果某一幀解碼耗時(shí)很大,就容易出現(xiàn)卡頓現(xiàn)象。如果設(shè)置的流暢等級越高,視頻播放過程越不容易受到網(wǎng)絡(luò)抖動(dòng)和視頻解碼渲染時(shí)間的影響,視頻播放流暢等級設(shè)置越低,則在播放過程中越容易受到網(wǎng)絡(luò)抖動(dòng)或視頻解碼渲染時(shí)間的影響而出現(xiàn)卡頓現(xiàn)象。示例性的,可以將視頻播放的流暢等級n設(shè)置為0,1,2,…,10,同時(shí)為每個(gè)流暢等級對應(yīng)設(shè)置一個(gè)緩沖區(qū)間大小,緩沖區(qū)間大小設(shè)置為0ms,100ms,200ms,…,1000ms。步驟S102,接收視頻源數(shù)據(jù),將所述視頻源數(shù)據(jù)分為視頻數(shù)據(jù)和音頻數(shù)據(jù),所述視頻數(shù)據(jù)緩存在預(yù)設(shè)的視頻緩沖區(qū),所述音頻數(shù)據(jù)緩存在預(yù)設(shè)的音頻緩沖區(qū),并計(jì)算接收的視頻源數(shù)據(jù)的幀間隔。在本發(fā)明實(shí)施例中,分別為視頻數(shù)據(jù)和音頻數(shù)據(jù)設(shè)置緩沖區(qū),并且使用兩個(gè)線程分別解碼渲染視頻和解碼播放音頻。視頻緩沖區(qū)用于視頻緩沖,音頻緩沖區(qū)用于音頻緩沖。在視頻源數(shù)據(jù)實(shí)時(shí)傳輸過程中,有可能因?yàn)榫W(wǎng)絡(luò)抖動(dòng)造成接收到的幀率與發(fā)出的幀率不一致,造成視頻不流暢的現(xiàn)象。為解決這個(gè)問題,設(shè)置了緩沖區(qū),接收到視頻源數(shù)據(jù)后,在數(shù)據(jù)解碼之前緩沖一定數(shù)量的數(shù)據(jù)包保存在緩沖區(qū)。所述幀間隔表示兩幀數(shù)據(jù)在播放時(shí)間上的差值,可以設(shè)定第三預(yù)設(shè)時(shí)長,統(tǒng)計(jì)在第三預(yù)設(shè)時(shí)長內(nèi)播放的幀數(shù),第三預(yù)設(shè)時(shí)長除以第三預(yù)設(shè)時(shí)長內(nèi)播放的幀數(shù)得到幀間隔,幀率為單位時(shí)間內(nèi)播放的幀數(shù),可以用第三預(yù)設(shè)時(shí)長內(nèi)播放的幀數(shù)除以第三預(yù)設(shè)時(shí)長得到幀率。所述接收的視頻源數(shù)據(jù)的幀間隔為第三預(yù)設(shè)時(shí)長除以第三預(yù)設(shè)時(shí)長內(nèi)接收到的幀數(shù)。步驟S103,若所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長分別達(dá)到設(shè)置的流暢等級對應(yīng)的緩沖區(qū)間大小后,分別對第一幀視頻數(shù)據(jù)和第一幀音頻數(shù)據(jù)進(jìn)行解碼播放。在本發(fā)明實(shí)施例中,已經(jīng)設(shè)置了視頻播放的流暢等級,同時(shí)也設(shè)置了所述流暢等級對應(yīng)的緩沖區(qū)間的大小,需要特別說明的是,緩沖區(qū)間大小對應(yīng)的不是緩沖的數(shù)據(jù)大小,而是緩沖的數(shù)據(jù)播放的時(shí)長。當(dāng)緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長達(dá)到設(shè)定的流暢等級對應(yīng)的緩沖區(qū)間大小后,開始對第一幀數(shù)據(jù)解碼,視頻緩沖區(qū)緩存的視頻數(shù)據(jù)的播放時(shí)長可以通過接收視頻源數(shù)據(jù)的幀間隔乘以當(dāng)前緩沖區(qū)緩存的視頻幀幀數(shù)獲得。由于第一幀視頻數(shù)據(jù)和第一幀音頻數(shù)據(jù)的解碼時(shí)間是一致的,所以只需計(jì)算視頻緩沖區(qū)緩沖的視頻數(shù)據(jù)的播放時(shí)長是否達(dá)到設(shè)定的流暢等級對應(yīng)緩沖區(qū)間大小即可。步驟S104,根據(jù)接收的視頻源數(shù)據(jù)的幀間隔和當(dāng)前所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長計(jì)算獲得當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔。在本發(fā)明實(shí)施例中,當(dāng)?shù)谝粠瑪?shù)據(jù)開始解碼后,為了避免網(wǎng)絡(luò)抖動(dòng)造成的卡頓現(xiàn)象,后續(xù)緩沖區(qū)緩沖的數(shù)據(jù)不再僅僅根據(jù)緩沖區(qū)間緩存的數(shù)據(jù)的播放時(shí)長是否達(dá)到流暢等級對應(yīng)的緩沖區(qū)間大小來設(shè)定每一幀的解碼時(shí)間。而是根據(jù)緩沖區(qū)緩存的數(shù)據(jù)的播放時(shí)長設(shè)定不同的幀補(bǔ)償,將接收的視頻源數(shù)據(jù)的幀間隔加上不同的幀補(bǔ)償?shù)玫疆?dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔,再利用當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔確定下一幀數(shù)據(jù)的解碼時(shí)間。這是因?yàn)槿绻匀话凑站彌_區(qū)緩存的數(shù)據(jù)的播放時(shí)長來確定下一幀解碼的時(shí)間,那么當(dāng)網(wǎng)絡(luò)速度過大或者過小的時(shí)候,緩沖區(qū)緩存的數(shù)據(jù)的播放時(shí)長可能會瞬間很大或很小,那么下一幀解碼的時(shí)候就會過早或者過晚。需要說明的是,當(dāng)前幀表示的是當(dāng)前解碼的幀,可以表示當(dāng)前解碼的視頻幀也可以表示當(dāng)前解碼的音頻幀,當(dāng)前緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長表示的是解碼操作時(shí)刻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長,當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔表示當(dāng)前解碼的幀應(yīng)當(dāng)播放的時(shí)長。所述幀補(bǔ)償可以通過緩沖區(qū)緩存的數(shù)據(jù)的播放時(shí)長設(shè)置。無論視頻播放線程還是音頻播放線程,如果當(dāng)前緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長在合理的范圍內(nèi),表示當(dāng)前播放的速度比較合適,則幀補(bǔ)償為0,即不在接收的視頻源數(shù)據(jù)的幀間隔的基礎(chǔ)上做幀補(bǔ)償;如果當(dāng)前緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長大于第四預(yù)設(shè)時(shí)長,則表明視頻播放的過慢,應(yīng)加快播放速度,則幀補(bǔ)償為負(fù)數(shù),在接收的視頻源數(shù)據(jù)的幀間隔的基礎(chǔ)上減去一定時(shí)間;如果當(dāng)前緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長小于第五預(yù)設(shè)時(shí)長,則表明視頻播放的過快,應(yīng)減慢播放速度,則幀補(bǔ)償為正數(shù),在接收的視頻源數(shù)據(jù)的幀間隔的基礎(chǔ)上加上一定的時(shí)間。具體的,如果設(shè)置的流暢等級為4級,幀補(bǔ)償大小為2ms,則流暢等級對應(yīng)的緩沖區(qū)間大小為400ms,由于網(wǎng)絡(luò)抖動(dòng)的存在,緩沖區(qū)間緩存的數(shù)據(jù)的播放時(shí)長瞬間可能超過400ms,所以在根據(jù)緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長設(shè)置幀補(bǔ)償時(shí),還需考慮大于400ms的范圍。如果當(dāng)前緩沖區(qū)緩存的數(shù)據(jù)的播放時(shí)長在300ms到500ms之間,則表示當(dāng)前播放的速度比較合理,則幀補(bǔ)償為0,即當(dāng)前幀應(yīng)當(dāng)?shù)牟シ诺臅r(shí)間間隔就是當(dāng)前接收的視頻源數(shù)據(jù)的幀率;如果當(dāng)前緩沖區(qū)緩存的數(shù)據(jù)的播放時(shí)長大于500ms,則表明視頻播放的過慢,應(yīng)加快播放的速度,則幀補(bǔ)償為-2ms,當(dāng)前幀應(yīng)當(dāng)?shù)牟シ诺臅r(shí)間間隔為接收的視頻源數(shù)據(jù)的幀間隔的基礎(chǔ)上減去2ms;如果當(dāng)前緩沖區(qū)緩存的數(shù)據(jù)的播放時(shí)長小于300ms,則表明視頻播放的過快,應(yīng)減慢播放的速度,則幀補(bǔ)償為2ms,當(dāng)前幀應(yīng)當(dāng)?shù)牟シ诺臅r(shí)間間隔為接收的視頻源數(shù)據(jù)的幀間隔的基礎(chǔ)上加上2ms;步驟S105,根據(jù)所述當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔獲得下一幀視頻數(shù)據(jù)和音頻數(shù)據(jù)的解碼時(shí)間。在本發(fā)明實(shí)施例中,由于緩沖區(qū)緩存的數(shù)據(jù)都是待解碼的數(shù)據(jù),所以在從緩沖區(qū)取出待解碼的數(shù)據(jù)后先要經(jīng)過解碼渲染,因此在得到當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔后,還需要減去當(dāng)前幀解碼渲染的時(shí)間。從緩沖區(qū)開始讀取一幀數(shù)據(jù)時(shí)記錄第一時(shí)間,對讀取的幀數(shù)據(jù)進(jìn)行解碼渲染成功后記錄第二時(shí)間,將所述第二時(shí)間與第一時(shí)間的時(shí)間差值作為解碼渲染該幀數(shù)據(jù)的時(shí)間;如果當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔大于解碼渲染當(dāng)前幀數(shù)據(jù)的時(shí)間,則在當(dāng)前幀解碼渲染成功后休眠第二時(shí)長,并讀取下一幀數(shù)據(jù)進(jìn)行解碼處理,所述第二時(shí)長為當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔減去解碼渲染當(dāng)前幀數(shù)據(jù)的時(shí)間;如果當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔小于或等于解碼渲染當(dāng)前幀數(shù)據(jù)的時(shí)間,則讀取下一幀數(shù)據(jù)進(jìn)行解碼處理。在本發(fā)明實(shí)施例中,從緩沖區(qū)開始讀取一幀數(shù)據(jù)時(shí)記錄第一時(shí)間,對讀取的幀數(shù)據(jù)進(jìn)行解碼渲染成功后記錄第二時(shí)間,將所述第二時(shí)間與第一時(shí)間的時(shí)間差值作為解碼渲染該幀數(shù)據(jù)的時(shí)間;當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔是指從緩沖區(qū)讀取當(dāng)前幀的時(shí)間與從緩沖區(qū)讀取下一幀的時(shí)間的差值,所以包括了當(dāng)前幀解碼渲染的時(shí)間,如果當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔大于解碼渲染該幀數(shù)據(jù)的時(shí)間,則用當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔減去解碼渲染該幀數(shù)據(jù)的時(shí)間得到所需休眠的時(shí)間。如果當(dāng)前幀進(jìn)行解碼渲染的時(shí)間較長,或者由于接收的視頻源數(shù)據(jù)的幀率較快得到的當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔較小,造成當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔小于當(dāng)前幀解碼渲染的時(shí)間時(shí),則無需休眠,對當(dāng)前幀解碼渲染成功直接讀取下一幀數(shù)據(jù)進(jìn)行解碼處理。本發(fā)明實(shí)施例通過設(shè)置視頻播放的流暢等級;接收視頻源數(shù)據(jù),將所述視頻源數(shù)據(jù)分為視頻數(shù)據(jù)和音頻數(shù)據(jù),所述視頻數(shù)據(jù)緩存在預(yù)設(shè)的視頻緩沖區(qū),所述音頻數(shù)據(jù)緩存在預(yù)設(shè)的音頻緩沖區(qū),并計(jì)算接收的視頻源數(shù)據(jù)的幀間隔;若所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長分別達(dá)到設(shè)置的流暢等級對應(yīng)的緩沖區(qū)間大小后,分別對第一幀視頻數(shù)據(jù)和第一幀音頻數(shù)據(jù)進(jìn)行解碼播放;根據(jù)接收的視頻源數(shù)據(jù)的幀間隔和當(dāng)前所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長計(jì)算獲得當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔;根據(jù)所述當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔獲得下一幀視頻數(shù)據(jù)和音頻數(shù)據(jù)的解碼時(shí)間。由于本發(fā)明無需視頻源數(shù)據(jù)的編碼幀率參數(shù),客戶端可以根據(jù)緩沖區(qū)間的數(shù)據(jù)自行調(diào)整每幀播放的時(shí)間,表現(xiàn)為幀多快播,幀少慢播的現(xiàn)象,能夠改善視頻播放時(shí)卡頓的問題,提高視頻播放的流暢性,使用戶獲得良好的實(shí)時(shí)瀏覽體驗(yàn)。而且,本發(fā)明操作方便、實(shí)現(xiàn)簡單,適應(yīng)面廣,具有較強(qiáng)的易用性和實(shí)用性。實(shí)施例二:參見圖2,圖2是本發(fā)明實(shí)施例二提供的視頻播放方法的示意流程圖,如圖所示該方法可以包括以下步驟:步驟S201,設(shè)置視頻播放的流暢等級。該步驟與步驟S101相同,具體可參見步驟S101的相關(guān)描述,在此不再贅述。步驟S202,接收視頻源數(shù)據(jù),將所述視頻源數(shù)據(jù)分為視頻數(shù)據(jù)和音頻數(shù)據(jù),所述視頻數(shù)據(jù)緩存在預(yù)設(shè)的視頻緩沖區(qū),所述音頻數(shù)據(jù)緩存在預(yù)設(shè)的音頻緩沖區(qū),并計(jì)算接收的視頻源數(shù)據(jù)的幀間隔。該步驟在步驟S102的基礎(chǔ)上優(yōu)化了計(jì)算接收的視頻源數(shù)據(jù)的幀間隔的過程。優(yōu)選的,計(jì)算接收的視頻源數(shù)據(jù)的幀間隔具體為:接收到視頻源數(shù)據(jù)時(shí),記錄第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間,并記錄接收到的幀數(shù);再次接收到一幀視頻源數(shù)據(jù)時(shí),記錄當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔;若所述當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔小于等于第一預(yù)設(shè)時(shí)長,用所述當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔除以接收上一幀視頻源數(shù)據(jù)后記錄的接收到的幀數(shù)得到接收的視頻源數(shù)據(jù)的幀間隔,并記錄當(dāng)前接收到的幀數(shù);若所述當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔大于第一預(yù)設(shè)時(shí)長,則將當(dāng)前接收到的一幀視頻源數(shù)據(jù)作為第一幀視頻源數(shù)據(jù),重新計(jì)算接收的視頻源數(shù)據(jù)的幀間隔。為了更好的理解上述過程,下面通過舉例進(jìn)行說明,但該舉例不用于限制本發(fā)明的保護(hù)范圍。表1為視頻源數(shù)據(jù)的幀間隔的計(jì)算過程表1在本發(fā)明實(shí)施例中,采用動(dòng)態(tài)的方式計(jì)算接收的視頻源數(shù)據(jù)的幀間隔。如表1所述,以第一預(yù)設(shè)時(shí)長為1s為例,當(dāng)接收到第1幀視頻源數(shù)據(jù)時(shí),記錄該幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間time1,并記錄接收的幀數(shù)1;當(dāng)接收到第2幀視頻源數(shù)據(jù)時(shí),記錄第2幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間time2,并更新當(dāng)前時(shí)間與第1幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔為time2-time1;若time2-time1小于等于1s,則用(time2-time1)除以接收第1幀視頻源數(shù)據(jù)后記錄的接收到的幀數(shù)1得到接收的視頻源數(shù)據(jù)的幀間隔time2-time1,并更新當(dāng)前接收的幀數(shù)為2;若time2-time1大于1s,則將第2幀視頻源數(shù)據(jù)作為第1幀視頻源數(shù)據(jù),重新記錄時(shí)間間隔和接收的幀數(shù),將當(dāng)前接收到的第2幀接收的時(shí)刻更新為time1,更新接收到的幀數(shù)為1;當(dāng)接收到第N幀視頻源數(shù)據(jù)時(shí),記錄第N幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間timeN,并更新當(dāng)前時(shí)間與第1幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔為timeN-time1;若timeN-time1小于等于1s,則用(timeN-time1)除以接收上一幀視頻源數(shù)據(jù)后記錄的接收到的幀數(shù)N-1得到接收的視頻源數(shù)據(jù)的幀間隔(TimeN-time1)/N-1,并更新當(dāng)前接收的幀數(shù)N;若timeN-time1大于1s,則將第N幀視頻源數(shù)據(jù)作為第1幀視頻源數(shù)據(jù),重新記錄時(shí)間間隔和接收的幀數(shù)為:將當(dāng)前接收到的第N幀接收的時(shí)刻更新為time1,更新接收到的幀數(shù)為1。以此類推,一直動(dòng)態(tài)更新接收的視頻源數(shù)據(jù)的幀間隔。每接收一幀數(shù)據(jù),更新一次視頻源數(shù)據(jù)的幀間隔。步驟S203,若所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長分別達(dá)到設(shè)置的流暢等級對應(yīng)的緩沖區(qū)間大小后,分別對第一幀視頻數(shù)據(jù)和第一幀音頻數(shù)據(jù)進(jìn)行解碼播放。該步驟與步驟S104相同,具體可參見步驟S104的相關(guān)描述,在此不再贅述。步驟S204,計(jì)算當(dāng)前緩沖區(qū)數(shù)據(jù)的播放時(shí)長。由于接收到視頻源數(shù)據(jù)時(shí),將視頻源數(shù)據(jù)分為視頻數(shù)據(jù)和音頻數(shù)據(jù),所述視頻數(shù)據(jù)緩沖在預(yù)設(shè)的視頻緩沖區(qū),所述音頻數(shù)據(jù)緩沖在預(yù)設(shè)的音頻緩沖區(qū),并且視頻數(shù)據(jù)解碼播放的線程與音頻數(shù)據(jù)解碼播放的線程是相互獨(dú)立的,因此在第一幀視頻數(shù)據(jù)和音頻數(shù)據(jù)開始解碼后就需要分開計(jì)算緩沖區(qū)當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔,因此需要分開計(jì)算視頻緩沖區(qū)和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長。計(jì)算視頻緩沖區(qū)當(dāng)前視頻幀的播放時(shí)長為:將步驟S202計(jì)算的接收的視頻源數(shù)據(jù)的幀間隔乘以緩沖區(qū)當(dāng)前緩存的視頻幀幀數(shù)。計(jì)算視頻緩沖區(qū)當(dāng)前數(shù)據(jù)的播放時(shí)長是用來計(jì)算當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔的,所以接收的視頻源數(shù)據(jù)的幀間隔為從緩沖區(qū)取該幀數(shù)據(jù)前最新更新的接收的視頻源數(shù)據(jù)的幀間隔,而緩沖區(qū)當(dāng)前緩存的視頻幀幀數(shù)為當(dāng)前幀解碼前最新更新的緩沖區(qū)間緩存的幀數(shù)。計(jì)算音頻緩沖區(qū)當(dāng)前音頻幀的播放時(shí)長為:其中,duration為音頻幀的播放時(shí)長,bufferSize為音頻裸數(shù)據(jù)字節(jié)數(shù),SamplePerSecond為采樣頻率,Channel為采樣聲道數(shù),BitRate為采樣位數(shù)。SamplePerSecond為采樣頻率,表示單位時(shí)間內(nèi)的采樣次數(shù)。采樣頻率越大,采樣點(diǎn)之間的間隔就越小,數(shù)字化后得到的聲音越逼真,但相應(yīng)的數(shù)據(jù)量就越大。BitRate為采樣位數(shù),表示每次采樣值數(shù)值大小的位數(shù),采樣位數(shù)越大,所能記錄聲音的變化度就越細(xì)膩,但相應(yīng)數(shù)據(jù)量就越大。Channel為采樣聲道數(shù),表示處理的聲音是單聲道還是立體聲,單聲道在聲音處理過程中只有單數(shù)據(jù)流,而立體聲則需要左右聲道的兩個(gè)數(shù)據(jù)流。bufferSize為音頻裸數(shù)據(jù)字節(jié)數(shù),表示音頻緩沖區(qū)當(dāng)前緩存的音頻字節(jié)數(shù)。步驟S205,根據(jù)預(yù)設(shè)的緩沖區(qū)數(shù)據(jù)的播放時(shí)長在不同流暢等級下對應(yīng)的幀補(bǔ)償?shù)年P(guān)系模型獲得當(dāng)前幀的幀補(bǔ)償,將接收的視頻源數(shù)據(jù)的幀間隔加上當(dāng)前幀的幀補(bǔ)償?shù)玫疆?dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔。在本發(fā)明實(shí)施例中,幀補(bǔ)償是對當(dāng)前接收的視頻源數(shù)據(jù)的幀間隔做出調(diào)整,調(diào)整的大小根據(jù)當(dāng)前緩沖區(qū)緩存的數(shù)據(jù)的播放時(shí)長決定,緩沖區(qū)緩存的數(shù)據(jù)較多,則需要提高播放速度,相應(yīng)將接收的視頻源數(shù)據(jù)的幀間隔調(diào)小得到當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔。具體當(dāng)前幀的幀補(bǔ)償通過緩沖區(qū)數(shù)據(jù)的播放時(shí)長在不同流暢等級下對應(yīng)的幀補(bǔ)償?shù)年P(guān)系模型獲得??蛇x的,所述緩沖區(qū)數(shù)據(jù)的播放時(shí)長在不同流暢等級下對應(yīng)的幀補(bǔ)償?shù)年P(guān)系模型具體為:設(shè)置不同流暢等級對應(yīng)的緩沖區(qū)間、不同流暢等級對應(yīng)的區(qū)間抖動(dòng)值;基于區(qū)間抖動(dòng)值將緩沖區(qū)間設(shè)置為多個(gè)爬山等級;根據(jù)不同的爬山等級,對幀間隔設(shè)置不同的幀補(bǔ)償。在本發(fā)明實(shí)施例中,雖然根據(jù)流暢等級設(shè)置了不同的緩沖區(qū)間,但是由于網(wǎng)絡(luò)抖動(dòng)的原因,瞬時(shí)接收的數(shù)據(jù)有可能出現(xiàn)不穩(wěn)定,所以為每個(gè)緩沖區(qū)間還設(shè)置了區(qū)間抖動(dòng)值,作為視頻緩沖的合理范圍,可以直接將緩沖區(qū)間加上區(qū)間抖動(dòng)值設(shè)置一個(gè)范圍,也可以基于區(qū)間抖動(dòng)值將緩沖區(qū)間設(shè)置為多個(gè)區(qū)間段,每個(gè)區(qū)間段稱之為一個(gè)爬山等級。為了更好的理解上述過程,下面通過舉例進(jìn)行說明基于區(qū)間抖動(dòng)值將緩沖區(qū)間設(shè)置為多個(gè)區(qū)間段的過程,但該舉例不用于限制本發(fā)明的保護(hù)范圍。表2為設(shè)置的不同流暢等級對應(yīng)的緩沖區(qū)間、不同流暢等級對應(yīng)的區(qū)間抖動(dòng)值、幀間補(bǔ)償大小。流暢等級緩沖區(qū)間大小區(qū)間抖動(dòng)值幀間補(bǔ)償大小0040ms3ms1100ms40ms3ms2200ms40ms3ms3300ms80ms3ms4400ms80ms3ms5500ms80ms3ms6600ms100ms3ms7700ms100ms3ms8800ms100ms3ms9900ms100ms3ms101000ms100ms3ms表2如表2所示,將流暢等級設(shè)置為0~10個(gè)等級,區(qū)間抖動(dòng)值為流暢等級小于3設(shè)置為40ms,流暢等級小于6設(shè)置為80ms,其余設(shè)置為100ms,幀間補(bǔ)償大小設(shè)置為3ms,需要說明的是,區(qū)間抖動(dòng)值和幀間補(bǔ)償大小可以根據(jù)應(yīng)用場景進(jìn)行調(diào)節(jié)。表3是通過區(qū)間抖動(dòng)值設(shè)置緩沖區(qū)間的爬山等級以及幀補(bǔ)償?shù)倪^程。表3如表3所示,以流暢等級為4舉例,緩沖區(qū)間大小為400ms,區(qū)間抖動(dòng)值為80ms,設(shè)置每個(gè)爬山等級最大值為:400ms+80ms*k(k=-5,-4,-3,-2,-1,0,1,2,3,4,5),每個(gè)爬山等級對應(yīng)的幀補(bǔ)償為-3*k(k=-5,-4,-3,-2,-1,0,1,2,3,4,5),得到流暢等級為4的緩沖區(qū)間內(nèi)的爬山等級分別為:小于0ms,0~80ms,80ms~160ms,160ms~240ms,240ms~320ms,…,720ms~800ms,大于800ms。每個(gè)爬山等級對應(yīng)的幀補(bǔ)償為15,12,9,6,3,…,-12,-15,-18。以上僅用于舉例,在設(shè)置爬山等級范圍時(shí),還可以將400ms+80ms*k(k=-5,-4,-3,-2,-1,0,1,2,3,4,5)設(shè)置為每個(gè)爬山等級的最小值,每個(gè)爬山等級對應(yīng)的幀補(bǔ)償為-3*k(k=-5,-4,-3,-2,-1,0,1,2,3,4,5),得到流暢等級為4的緩沖區(qū)間內(nèi)的爬山等級分別為:小于0ms,0~80ms,80ms~160ms,160ms~240ms,240ms~320ms,…,720ms~800ms,大于800ms。每個(gè)爬山等級對應(yīng)的幀補(bǔ)償則變?yōu)?8,15,12,9,6,3,…,-12,-15。在本發(fā)明實(shí)施例中,還可以采用不同的方式將緩沖區(qū)間設(shè)置為多個(gè)小區(qū)間段,并且每個(gè)小區(qū)間段設(shè)置不同的幀補(bǔ)償,在此并不做限制。由以上基于區(qū)間抖動(dòng)值設(shè)置緩沖區(qū)間的爬山等級以及幀補(bǔ)償?shù)倪^程可以看出將緩沖區(qū)間設(shè)置為多個(gè)小區(qū)間段的爬山等級,目的是根據(jù)當(dāng)前緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長在哪個(gè)爬山等級,得到不同的幀補(bǔ)償,就可以根據(jù)當(dāng)前緩沖區(qū)緩存的數(shù)據(jù)的多少對接收的視頻源數(shù)據(jù)的幀間隔做出調(diào)整,達(dá)到根據(jù)接收的視頻源數(shù)據(jù)的幀率和網(wǎng)絡(luò)狀況,動(dòng)態(tài)調(diào)整幀間隔,改善視頻播放時(shí)卡頓的問題。具體的,以當(dāng)前緩沖區(qū)間緩沖的數(shù)據(jù)的播放時(shí)長為389ms為例說明當(dāng)計(jì)算的當(dāng)前緩沖區(qū)緩存的數(shù)據(jù)的播放時(shí)長在哪個(gè)爬山等級或小區(qū)間段范圍內(nèi),則對應(yīng)取哪個(gè)幀補(bǔ)償。如果設(shè)置流暢等級為4,當(dāng)緩沖區(qū)間達(dá)到400ms時(shí),開始對第一幀數(shù)據(jù)解碼,但是由于網(wǎng)絡(luò)抖動(dòng)造成傳輸數(shù)據(jù)大小不穩(wěn)定,導(dǎo)致緩沖區(qū)間緩存的數(shù)據(jù)播放時(shí)長有可能并不會穩(wěn)定在400ms,可能會在400ms上下浮動(dòng),當(dāng)前緩沖區(qū)間緩沖的數(shù)據(jù)的播放時(shí)長為389ms,說明視頻的播放幀率相對于接收的視頻源數(shù)據(jù)的幀率快,則當(dāng)前幀應(yīng)當(dāng)播放的幀率應(yīng)該在接收的視頻源數(shù)據(jù)的幀率基礎(chǔ)上減慢,則當(dāng)前幀應(yīng)當(dāng)播放的幀間隔應(yīng)該在接收的視頻源數(shù)據(jù)的幀間隔的基礎(chǔ)上增加時(shí)間,389ms在設(shè)置的流暢等級為4時(shí)對應(yīng)的爬山等級為320~400ms,對應(yīng)的幀補(bǔ)償為3ms,則當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔為當(dāng)前接收的視頻源數(shù)據(jù)的幀間隔加上3ms。從而實(shí)現(xiàn)緩沖區(qū)幀多快播,幀少慢播,改善視頻播放時(shí)卡頓的的問題。步驟S206,根據(jù)所述當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔獲得下一幀視頻數(shù)據(jù)和音頻數(shù)據(jù)的解碼時(shí)間。該步驟與步驟S105相同,具體可參見步驟S105的相關(guān)描述,在此不再贅述。需要說明的是,表1、表2和表3中所示數(shù)據(jù)均用于舉例說明,并不用于表示實(shí)際的情況,也不對本發(fā)明實(shí)施例有任何限制作用。應(yīng)理解,在上述實(shí)施例一和二中,各步驟的序號的大小并不意味著執(zhí)行順序的先后,各步驟的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對本發(fā)明實(shí)施例的實(shí)施過程構(gòu)成任何限定。實(shí)施例三:參見圖3,圖3是本發(fā)明實(shí)施例三提供的視頻播放裝置的示意框圖,為了便于說明,僅示出與本發(fā)明實(shí)施例相關(guān)的部分。該視頻播放裝置可以是內(nèi)置于終端設(shè)備(例如手機(jī)、平板電腦、筆記本、計(jì)算機(jī)、穿戴設(shè)備等)內(nèi)的軟件單元、硬件單元或者軟硬結(jié)合的單元,也可以作為獨(dú)立的掛件集成到所述終端設(shè)備中。所述視頻播放裝置包括:流暢等級設(shè)置模塊31,用于設(shè)置視頻播放的流暢等級;視頻源數(shù)據(jù)接收模塊32,用于接收視頻源數(shù)據(jù),將所述視頻源數(shù)據(jù)分為視頻數(shù)據(jù)和音頻數(shù)據(jù),將所述視頻數(shù)據(jù)緩存在預(yù)設(shè)的視頻緩沖區(qū),所述音頻數(shù)據(jù)緩存在預(yù)設(shè)的音頻緩沖區(qū),并計(jì)算接收的視頻源數(shù)據(jù)的幀間隔;第一幀數(shù)據(jù)解碼時(shí)間獲得模塊33,用于若所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長分別達(dá)到所述流暢等級設(shè)置模塊31設(shè)置的流暢等級對應(yīng)的緩沖區(qū)間大小后,分別對第一幀視頻數(shù)據(jù)和第一幀音頻數(shù)據(jù)進(jìn)行解碼播放;當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔計(jì)算模塊34,用于根據(jù)所述視頻源數(shù)據(jù)接收模塊32計(jì)算的接收的視頻源數(shù)據(jù)的幀間隔和當(dāng)前所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長計(jì)算獲得當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔;下一幀數(shù)據(jù)解碼時(shí)間獲得模塊35,用于根據(jù)所述當(dāng)前幀播放的時(shí)間間隔計(jì)算模塊34計(jì)算的當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔獲得下一幀視頻數(shù)據(jù)和音頻數(shù)據(jù)的解碼時(shí)間??蛇x的,所述視頻源數(shù)據(jù)接收模塊32還用于:接收到視頻源數(shù)據(jù)時(shí),記錄第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間,并記錄接收到的幀數(shù);再次接收到一幀視頻源數(shù)據(jù)時(shí),記錄當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔;若所述當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔小于等于第一預(yù)設(shè)時(shí)長,用所述當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔除以接收上一幀視頻源數(shù)據(jù)后記錄的接收到的幀數(shù)得到接收的視頻源數(shù)據(jù)的幀間隔,并記錄當(dāng)前接收到的幀數(shù);若所述當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔大于第一預(yù)設(shè)時(shí)長,則將當(dāng)前接收到的一幀視頻源數(shù)據(jù)作為第一幀視頻源數(shù)據(jù),重新計(jì)算接收的視頻源數(shù)據(jù)的幀間隔??蛇x的,所述當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔計(jì)算模塊34包括:緩沖區(qū)數(shù)據(jù)的播放時(shí)長計(jì)算單元341,用于計(jì)算當(dāng)前緩沖區(qū)數(shù)據(jù)的播放時(shí)長;當(dāng)前幀的幀補(bǔ)償獲得單元342,用于根據(jù)預(yù)設(shè)的緩沖區(qū)數(shù)據(jù)的播放時(shí)長在不同流暢等級下對應(yīng)的幀補(bǔ)償?shù)年P(guān)系模型獲得當(dāng)前幀的幀補(bǔ)償;當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔計(jì)算單元343,用于將所述視頻源數(shù)據(jù)接收模塊32接收的視頻源數(shù)據(jù)的幀間隔加上所述當(dāng)前幀的幀補(bǔ)償獲得單元342獲得的當(dāng)前幀的幀補(bǔ)償?shù)玫疆?dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔。可選的,所述緩沖區(qū)數(shù)據(jù)的播放時(shí)長計(jì)算單元341具體用于:計(jì)算視頻緩沖區(qū)當(dāng)前視頻幀的播放時(shí)長為:視頻緩沖區(qū)當(dāng)前緩存的視頻幀幀數(shù)乘以接收到的視頻幀的幀間隔得到視頻緩沖區(qū)當(dāng)前視頻幀的播放時(shí)長;計(jì)算音頻緩沖區(qū)當(dāng)前音頻幀的播放時(shí)長為:其中,duration為音頻幀的播放時(shí)長,bufferSize為音頻裸數(shù)據(jù)字節(jié)數(shù),SamplePerSecond為采樣頻率,Channel為采樣聲道數(shù),BitRate為采樣位數(shù)??蛇x的,所述緩沖區(qū)數(shù)據(jù)的播放時(shí)長在不同流暢等級下對應(yīng)的幀補(bǔ)償?shù)年P(guān)系模型具體為:設(shè)置不同流暢等級對應(yīng)的緩沖區(qū)間和不同流暢等級對應(yīng)的區(qū)間抖動(dòng)值;基于區(qū)間抖動(dòng)值將緩沖區(qū)間設(shè)置為多個(gè)爬山等級;根據(jù)不同的爬山等級,對幀間隔設(shè)置不同的幀補(bǔ)償。可選的,所述下一幀數(shù)據(jù)的解碼時(shí)間獲得模塊35包括:解碼渲染一幀數(shù)據(jù)的時(shí)間獲得單元351,用于從緩沖區(qū)開始讀取一幀數(shù)據(jù)時(shí)記錄第一時(shí)間,對讀取的幀數(shù)據(jù)進(jìn)行解碼渲染成功后記錄第二時(shí)間,將所述第二時(shí)間與第一時(shí)間的時(shí)間差值作為解碼渲染該幀數(shù)據(jù)的時(shí)間;下一幀數(shù)據(jù)的解碼時(shí)間獲得單元352,用于如果當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔大于所述解碼播放一幀數(shù)據(jù)的時(shí)間獲得單元351獲得的解碼渲染當(dāng)前幀數(shù)據(jù)的時(shí)間,則在當(dāng)前幀解碼渲染成功后休眠第二時(shí)長,并讀取下一幀數(shù)據(jù)進(jìn)行解碼處理,所述第二時(shí)長為當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔減去解碼渲染當(dāng)前幀數(shù)據(jù)的時(shí)間;下一幀數(shù)據(jù)的解碼時(shí)間獲得單元,還用于如果當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔小于或等于所述解碼播放一幀數(shù)據(jù)的時(shí)間獲得單元351獲得的解碼渲染當(dāng)前幀數(shù)據(jù)的時(shí)間,則讀取下一幀數(shù)據(jù)進(jìn)行解碼處理。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能單元、模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能單元、模塊完成,即所述裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能單元或模塊,以完成以上描述的全部或者部分功能。實(shí)施例中的各功能單元或模塊可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中,上述集成的單元或模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。另外,各功能單元、模塊的具體名稱也只是為了便于相互區(qū)分,并不用于限制本申請的保護(hù)范圍。上述裝置中單元、模塊的具體工作過程,可以參考前述方法實(shí)施例的對應(yīng)過程,在此不再贅述。實(shí)施例四:參見圖4,圖4是本發(fā)明實(shí)施例四提供的視頻播放裝置的示意框圖。如圖所示的該視頻播放裝置可以包括:一個(gè)或多個(gè)處理器401(圖4中僅示出一個(gè));一個(gè)或多個(gè)輸入設(shè)備402(圖4中僅示出一個(gè)),一個(gè)或多個(gè)輸出設(shè)備403(圖4中僅示出一個(gè))和存儲器404。上述處理器401、輸入設(shè)備402、輸出設(shè)備403和存儲器404通過總線405連接。存儲器404用于存儲指令,處理器401用于執(zhí)行存儲器404存儲的指令。其中:所述處理器401,用于通過輸入設(shè)備402設(shè)置視頻播放的流暢等級;所述處理器401還用于根據(jù)輸入設(shè)備402接收視頻源數(shù)據(jù),將所述視頻源數(shù)據(jù)分為視頻數(shù)據(jù)和音頻數(shù)據(jù),所述視頻數(shù)據(jù)緩存在預(yù)設(shè)的視頻緩沖區(qū),所述音頻數(shù)據(jù)緩存在預(yù)設(shè)的音頻緩沖區(qū),并計(jì)算接收的視頻源數(shù)據(jù)的幀間隔;所述處理器401還用于若所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長分別達(dá)到設(shè)置的流暢等級對應(yīng)的緩沖區(qū)間大小后,分別對第一幀視頻數(shù)據(jù)和第一幀音頻數(shù)據(jù)通過輸出設(shè)備403進(jìn)行解碼播放;所述處理器401還用于根據(jù)通過輸入設(shè)備402接收的視頻源數(shù)據(jù)的幀間隔和當(dāng)前所述視頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長和音頻緩沖區(qū)緩沖的數(shù)據(jù)的播放時(shí)長計(jì)算獲得當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔;所述處理器401還用于根據(jù)所述當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔獲得下一幀視頻數(shù)據(jù)和音頻數(shù)據(jù)的解碼時(shí)間。可選的,所述處理器401用于通過輸入設(shè)備402接收到視頻源數(shù)據(jù)時(shí),記錄第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間,并記錄接收到的幀數(shù);所述處理器401還用于再次通過輸入設(shè)備402接收到一幀視頻源數(shù)據(jù)時(shí),記錄當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔;所述處理器401還用于若所述當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔小于等于第一預(yù)設(shè)時(shí)長,用所述當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔除以接收上一幀視頻源數(shù)據(jù)后記錄的接收到的幀數(shù)得到接收的視頻源數(shù)據(jù)的幀間隔,并記錄當(dāng)前接收到的幀數(shù);所述處理器401還用于若所述當(dāng)前時(shí)間與第一幀視頻源數(shù)據(jù)接收時(shí)刻的本地時(shí)間的時(shí)間間隔大于第一預(yù)設(shè)時(shí)長,則將當(dāng)前接收到的一幀視頻源數(shù)據(jù)作為第一幀視頻源數(shù)據(jù),重新計(jì)算接收的視頻源數(shù)據(jù)的幀間隔??蛇x的,所述處理器401用于計(jì)算當(dāng)前緩沖區(qū)數(shù)據(jù)的播放時(shí)長;所述處理器401還用于根據(jù)預(yù)設(shè)的緩沖區(qū)數(shù)據(jù)的播放時(shí)長在不同流暢等級下對應(yīng)的幀補(bǔ)償?shù)年P(guān)系模型獲得當(dāng)前幀的幀補(bǔ)償;所述處理器401還用于將通過輸入設(shè)備402接收的視頻源數(shù)據(jù)的幀間隔加上當(dāng)前幀的幀補(bǔ)償?shù)玫疆?dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔??蛇x的,所述處理器401用于計(jì)算視頻緩沖區(qū)當(dāng)前視頻幀的播放時(shí)長為:視頻緩沖區(qū)當(dāng)前緩存的視頻幀幀數(shù)乘以接收到的視頻幀的幀間隔得到視頻緩沖區(qū)當(dāng)前視頻幀的播放時(shí)長;所述處理器401還用于計(jì)算音頻緩沖區(qū)當(dāng)前音頻幀的播放時(shí)長為:其中,duration為音頻幀的播放時(shí)長,bufferSize為音頻裸數(shù)據(jù)字節(jié)數(shù),SamplePerSecond為采樣頻率,Channel為采樣聲道數(shù),BitRate為采樣位數(shù)??蛇x的,所述緩沖區(qū)數(shù)據(jù)的播放時(shí)長在不同流暢等級下對應(yīng)的幀補(bǔ)償?shù)年P(guān)系模型具體為:設(shè)置不同流暢等級對應(yīng)的緩沖區(qū)間、不同流暢等級對應(yīng)的區(qū)間抖動(dòng)值;基于區(qū)間抖動(dòng)值將緩沖區(qū)間設(shè)置為多個(gè)爬山等級;根據(jù)不同的爬山等級,對幀間隔設(shè)置不同的幀補(bǔ)償??蛇x的,所述處理器401用于從緩沖區(qū)開始讀取一幀數(shù)據(jù)時(shí)記錄第一時(shí)間,對讀取的幀數(shù)據(jù)進(jìn)行解碼渲染成功后記錄第二時(shí)間,將所述第二時(shí)間與第一時(shí)間的時(shí)間差值作為解碼渲染該幀數(shù)據(jù)的時(shí)間;所述處理器401還用于如果當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔大于解碼渲染當(dāng)前幀數(shù)據(jù)的時(shí)間,則在當(dāng)前幀解碼渲染成功后休眠第二時(shí)長,并讀取下一幀數(shù)據(jù)進(jìn)行解碼處理,所述第二時(shí)長為當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔減去解碼渲染當(dāng)前幀數(shù)據(jù)的時(shí)間;所述處理器401還用于如果當(dāng)前幀應(yīng)當(dāng)播放的時(shí)間間隔小于或等于解碼渲染當(dāng)前幀數(shù)據(jù)的時(shí)間,則讀取下一幀數(shù)據(jù)進(jìn)行解碼處理。所述存儲器404,用于存儲軟件程序、模塊、單元以及視頻播放裝置中需要的數(shù)據(jù)信息,所述處理器401通過運(yùn)行存儲在所述存儲器404的軟件程序、模塊以及單元,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,改善視頻播放時(shí)卡頓的問題,提高視頻播放的流暢性。應(yīng)當(dāng)理解,在本發(fā)明實(shí)施例中,所稱處理器401可以是中央處理單元(CentralProcessingUnit,CPU),該處理器401還可以是其他通用處理器401、數(shù)字信號處理器401(DigitalSignalProcessor,DSP)、專用集成電路(ApplicationSpecificIntegratedCircuit,ASIC)、現(xiàn)成可編程門陣列(Field-ProgrammableGateArray,F(xiàn)PGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件等。通用處理器401可以是微處理器401或者該處理器401也可以是任何常規(guī)的處理器401等。輸入設(shè)備402可以包括觸控板、指紋采集傳感器(用于采集用戶的指紋信息和指紋的方向信息)、麥克風(fēng)、數(shù)據(jù)采集裝置、數(shù)據(jù)接收裝置等,輸出設(shè)備403可以包括顯示器(LCD等)、揚(yáng)聲器、數(shù)據(jù)發(fā)送裝置等。該存儲器404可以包括只讀存儲器和隨機(jī)存取存儲器,并向處理器401提供指令和數(shù)據(jù)。存儲器404的一部分還可以包括非易失性隨機(jī)存取存儲器。例如,存儲器404還可以存儲設(shè)備類型的信息。具體實(shí)現(xiàn)中,本發(fā)明實(shí)施例中所描述的處理器401、輸入設(shè)備402、輸出設(shè)備403和存儲器404可執(zhí)行本發(fā)明實(shí)施例提供的視頻播放方法的實(shí)施例中所描述的實(shí)現(xiàn)方式,也可執(zhí)行視頻播放裝置的實(shí)施例三中所描述的實(shí)現(xiàn)方式,在此不再贅述。本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實(shí)施例描述的各示例的模塊及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。在本發(fā)明所提供的實(shí)施例中,應(yīng)該理解到,所揭露的終端設(shè)備、裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通訊連接可以是通過一些接口,裝置或單元的間接耦合或通訊連接,可以是電性,機(jī)械或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個(gè)實(shí)施例中的各功能模塊可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲在一個(gè)計(jì)算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明實(shí)施例的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個(gè)存儲介質(zhì)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器401(processor)執(zhí)行本發(fā)明實(shí)施例各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲器(ROM,Read-OnlyMemory)、隨機(jī)存取存儲器(RAM,RandomAccessMemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。以上所述實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例各實(shí)施例技術(shù)方案的精神和范圍。當(dāng)前第1頁1 2 3