亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法與流程

文檔序號(hào):11931618閱讀:439來源:國知局
對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法與流程

本發(fā)明涉及一種對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法,尤其涉及一種綜合利用英特爾多媒體軟件開發(fā)包(intel media sdk)與ffmpeg軟件開發(fā)包來實(shí)現(xiàn)視音頻同步跳轉(zhuǎn)(seek)的方法。



背景技術(shù):

目前市面上有很多多媒體視音頻處理軟件開發(fā)包,這些開發(fā)包各有自己的優(yōu)勢與劣勢,例如,ffmpeg軟件開發(fā)包,它能夠提供包括視音頻采集、視音頻格式轉(zhuǎn)換、視頻抓圖、視頻加水印等功能,具有功能強(qiáng)大、覆蓋面廣的優(yōu)點(diǎn)。但ffmpeg在硬件編解碼加速方面卻較少涉及,尚很不完善,遠(yuǎn)不及intel media sdk的性能優(yōu)越。intelmedia sdk在硬件加速解碼、編碼方面提供了卓越的性能,其能充分利用圖形處理器(GPU)來進(jìn)行硬件加速。經(jīng)過測試,對于同一段素材,與ffmpeg sdk相比,利用intel media sdk來轉(zhuǎn)碼,速度能提高百分之三十左右而其CPU占用效率卻大大降低。相同運(yùn)行環(huán)境下,采用ffmpeg sdk與采用intel media sdk來對相同素材進(jìn)行解碼的性能測試結(jié)果如下:

顯然intel media sdk在硬件加速方面具有明顯優(yōu)勢。然而,intel media sdk卻不能基于多媒體文件流進(jìn)行seek操作,只能提供基于ES流(Elementary Stream,基本碼流)的硬件加速的順序解碼操作。

在廣電領(lǐng)域,在對多媒體文件進(jìn)行解碼播放過程或者非線性編輯系統(tǒng)中,人們經(jīng)常將播放或預(yù)覽位置從文件的一個(gè)時(shí)間點(diǎn)拖動(dòng)到另一個(gè)時(shí)間點(diǎn)。來查看自己關(guān)心的內(nèi)容。這一過程就稱為seek。這種操作較為常見,若不能對文件流按需seek,則即使具有優(yōu)越的硬件加速功能,在產(chǎn)品的應(yīng)用中也會(huì)非常受限。



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

本發(fā)明提供一種對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法,以解決現(xiàn)有技術(shù)中的一項(xiàng)或多項(xiàng)缺失。

本發(fā)明實(shí)施例提供一種對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法,包括:接收用戶輸入的多媒體文件,通過ffmpeg對所述多媒體文件進(jìn)行解復(fù)用,得到所述多媒體文件的ES流,并獲取所述多媒體文件的視音頻信息;利用所述視音頻信息對英特爾解碼器進(jìn)行初始化;根據(jù)一跳轉(zhuǎn)精確性需求信息和一目標(biāo)幀的信息,確定所述ES流中目標(biāo)幀的時(shí)間戳;通過所述ffmpeg對所述ES流進(jìn)行流操作,并從所述目標(biāo)幀的一左側(cè)關(guān)鍵幀的位置開始讀取視音頻幀數(shù)據(jù);利用初始化后的所述英特爾解碼器對讀取的所述視音頻幀數(shù)據(jù)進(jìn)行解碼,得到所述視音頻幀的時(shí)間戳;判斷所述視音頻幀的時(shí)間戳大于或等于所述目標(biāo)幀的時(shí)間戳?xí)r,將所述視音頻幀數(shù)據(jù)放入視音頻輸出隊(duì)列,以進(jìn)行輸出。

一個(gè)實(shí)施例中,根據(jù)一跳轉(zhuǎn)精確性需求信息和一目標(biāo)幀的信息,確定所述ES流中目標(biāo)幀的時(shí)間戳,包括:根據(jù)所述跳轉(zhuǎn)精確性需求信息設(shè)定所述ES流中的幀發(fā)生跳轉(zhuǎn)的閾值;判斷所述目標(biāo)幀與所述ES流中當(dāng)前解碼輸出幀的幀號(hào)差值是否大于或等于所述閾值;如果是,根據(jù)所述當(dāng)前解碼輸出幀的位置計(jì)算得到所述目標(biāo)幀的時(shí)間戳。

一個(gè)實(shí)施例中,還包括:根據(jù)所述ES流中的第一幀視頻幀的時(shí)間戳對所述目標(biāo)幀中的視頻幀的時(shí)間戳進(jìn)行校正,根據(jù)所述ES流中的第一幀音頻幀的時(shí)間戳對所述目標(biāo)幀中的音頻幀的時(shí)間戳進(jìn)行校正。

一個(gè)實(shí)施例中,還包括:判斷所述視音頻幀的時(shí)間戳小于所述目標(biāo)幀的時(shí)間戳?xí)r,丟棄時(shí)間戳小于所述目標(biāo)幀的時(shí)間戳的視音頻幀數(shù)據(jù),并繼續(xù)讀取下一幀的視音頻幀數(shù)據(jù),直到讀取的視音頻幀的時(shí)間戳大于或等于所述目標(biāo)幀的時(shí)間戳。

一個(gè)實(shí)施例中,當(dāng)所述視音頻流數(shù)據(jù)為視頻數(shù)據(jù)時(shí),所述英特爾解碼器為視頻解碼器;當(dāng)所述視音頻流數(shù)據(jù)為音頻數(shù)據(jù)時(shí),所述英特爾解碼器為音頻解碼器。

一個(gè)實(shí)施例中,當(dāng)所述視音頻流數(shù)據(jù)為視頻數(shù)據(jù)時(shí),所述目標(biāo)幀的時(shí)間戳為:vt=((目標(biāo)視頻幀幀號(hào)*(1.0/視頻幀率)*基準(zhǔn)時(shí)間)*基準(zhǔn)時(shí)間的倒數(shù)/視頻流的時(shí)間基)。

一個(gè)實(shí)施例中,當(dāng)所述視音頻流數(shù)據(jù)為音頻數(shù)據(jù)時(shí),所述目標(biāo)幀的時(shí)間戳為:at=((目標(biāo)音頻幀幀號(hào)*(1.0*一幀音頻的采樣數(shù)*基準(zhǔn)時(shí)間/目標(biāo)音頻采樣率)*基準(zhǔn)時(shí)間的倒數(shù)/音頻流的時(shí)間基),其中,一幀音頻的采樣數(shù)=目標(biāo)音頻采樣率/視頻幀率,目標(biāo)音頻幀幀號(hào)=目標(biāo)音頻采樣索引值/一幀音頻的采樣數(shù),目標(biāo)音頻采樣索引值可通過seek操作發(fā)生時(shí)接口調(diào)用者傳入的接口參數(shù)中得到。

一個(gè)實(shí)施例中,將讀取的所述視音頻幀數(shù)據(jù)放入視音頻輸出隊(duì)列,以進(jìn)行輸出,包括:將時(shí)間戳大于或等于所述目標(biāo)幀的讀取的所述視音頻幀數(shù)據(jù)中的視頻數(shù)據(jù)放入視頻輸出隊(duì)列,以進(jìn)行視頻輸出;將時(shí)間戳大于或等于所述目標(biāo)幀的讀取的所述視音頻幀數(shù)據(jù)中的音頻數(shù)據(jù)放入音頻輸出隊(duì)列,以進(jìn)行音頻輸出;判斷所述視頻輸出隊(duì)列和所述音頻輸出隊(duì)列均含有進(jìn)行輸出的視音頻幀數(shù)據(jù)時(shí),所述ffmpeg停止讀取視音頻幀數(shù)據(jù)。

一個(gè)實(shí)施例中,所述多媒體文件的視音頻信息包括:多媒體文件總長度、多媒體文件封裝格式、視頻編碼方式、視頻幀率、視頻流長度、視頻顏色格式、視頻碼率、音頻編碼格式、音頻采樣率、音頻采樣格式及音頻流長度中的一個(gè)或多個(gè)。

一個(gè)實(shí)施例中,所述左側(cè)關(guān)鍵幀為位于所述目標(biāo)幀左側(cè)且最接近所述目標(biāo)幀的關(guān)鍵幀。

本發(fā)明實(shí)施例,能夠既可以充分利用英特爾解碼器(intel media sdk)進(jìn)行硬件加速解碼,又能允許使用者對被解碼播放的多媒體文件進(jìn)行按需跳轉(zhuǎn)(seek),可以很好地實(shí)現(xiàn)基于英特爾解碼器intel media sdk的多媒體文件的硬件加速解碼播放與按需跳轉(zhuǎn)seek。本發(fā)明能夠綜合利用intel media sdk與ffmpeg sdk來實(shí)現(xiàn)視音頻同步seek的方法。同時(shí),由于對目標(biāo)視頻幀、目標(biāo)音頻幀的匹配采用最接近原則(最左側(cè)關(guān)鍵幀),因而對于有一些存在時(shí)間戳漂移現(xiàn)象的多媒體素材,同樣能進(jìn)行較為準(zhǔn)確的seek操作。

附圖說明

為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。在附圖中:

圖1是本發(fā)明實(shí)施例的對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法的流程示意圖;

圖2是本發(fā)明一實(shí)施例中的目標(biāo)幀時(shí)間戳的獲取方法的流程示意圖;

圖3是本發(fā)明另一實(shí)施例的目標(biāo)幀時(shí)間戳的獲取方法的流程示意圖;

圖4是本發(fā)明一實(shí)施例中的將視音頻幀數(shù)據(jù)放入視音頻輸出隊(duì)列的方法的流程示意圖;

圖5是本發(fā)明一實(shí)施例對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法的流程示意圖。

具體實(shí)施方式

為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下面結(jié)合附圖對本發(fā)明實(shí)施例做進(jìn)一步詳細(xì)說明。在此,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,但并不作為對本發(fā)明的限定。

本發(fā)明實(shí)施例提供一種對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法,該方法既可以利用英特爾解碼器(intel media sdk)進(jìn)行硬件加速解碼,又能對被解碼播放的多媒體文件進(jìn)行按需跳轉(zhuǎn)(seek)。

圖1是本發(fā)明實(shí)施例的對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法的流程示意圖。如圖1所示,對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法,可包括步驟:

S110:接收用戶輸入的多媒體文件,通過ffmpeg對所述多媒體文件進(jìn)行解復(fù)用,得到所述多媒體文件的ES流,并獲取所述多媒體文件的視音頻信息;

S120:利用所述視音頻信息對英特爾解碼器進(jìn)行初始化;

S130:根據(jù)一跳轉(zhuǎn)精確性需求信息和一目標(biāo)幀的信息,確定所述ES流中目標(biāo)幀的時(shí)間戳;

S140:通過所述ffmpeg對所述ES流進(jìn)行流操作,并從所述目標(biāo)幀的一左側(cè)關(guān)鍵幀的位置開始讀取視音頻幀數(shù)據(jù);

S150:利用初始化后的所述英特爾解碼器對讀取的所述視音頻幀數(shù)據(jù)進(jìn)行解碼,得到所述視音頻幀的時(shí)間戳;

S160:判斷所述視音頻幀的時(shí)間戳大于或等于所述目標(biāo)幀的時(shí)間戳?xí)r,將所述視音頻幀數(shù)據(jù)放入視音頻輸出隊(duì)列,以進(jìn)行輸出。

在上述步驟S120中,該多媒體文件的視音頻信息可包括多種信息。例如,上述多媒體文件的視音頻信息可包括多媒體文件總長度、多媒體文件封裝格式、視頻編碼 方式、視頻幀率、視頻流長度、視頻顏色格式、視頻碼率、音頻編碼格式、音頻采樣率、音頻采樣格式及音頻流長度的能夠信息中的一個(gè)或多個(gè)。

本發(fā)明實(shí)施例通過上述步驟S120,利用步驟S110得到的視音頻信息對英特爾解碼器進(jìn)行初始化,可以準(zhǔn)備好硬件加速解碼上下文。

本發(fā)明實(shí)施例中,例如上述S120和S150中,對于不同的多媒體數(shù)據(jù),可使用不同的解碼器。例如,當(dāng)讀取的視音頻流數(shù)據(jù)為視頻數(shù)據(jù)時(shí),上述英特爾解碼器為視頻解碼器;當(dāng)讀取的視音頻流數(shù)據(jù)為音頻數(shù)據(jù)時(shí),上述英特爾解碼器為音頻解碼器。同樣地,利用視頻信息對視頻解碼器進(jìn)行初始化,利用音頻信息對音頻解碼器進(jìn)行初始化。

在上述步驟S140中,該目標(biāo)幀的左側(cè)可包括許多由多個(gè)幀構(gòu)成的成組的幀,每一組幀的最左側(cè)的第一幀可為關(guān)鍵幀,則可從目標(biāo)幀左側(cè)的各個(gè)不同的關(guān)鍵幀開始讀取視音頻數(shù)據(jù)。較佳地,步驟S140中的左側(cè)關(guān)鍵幀為位于該目標(biāo)幀左側(cè)且最接近所述目標(biāo)幀的關(guān)鍵幀,以此,可減少ffmpeg的流操作任務(wù)量,從而提高seek效率。而且,對于有一些存在時(shí)間戳漂移現(xiàn)象的多媒體素材,同樣能進(jìn)行較為準(zhǔn)確的seek操作。

本發(fā)明實(shí)施例,針對現(xiàn)有技術(shù)中ffmpeg的硬件編碼加速缺陷和英特爾解碼器(intel media sdk)不能基于流進(jìn)行跳轉(zhuǎn)(seek)的缺陷,通過有效地一并利用ffmpeg進(jìn)行流操作和利用英特爾解碼器(intel media sdk)讀取視音頻幀數(shù)據(jù),能夠既可以利用英特爾解碼器(intel media sdk)進(jìn)行硬件加速解碼,又能對被解碼播放的多媒體文件進(jìn)行按需跳轉(zhuǎn)(seek)。

圖2是本發(fā)明一實(shí)施例中的目標(biāo)幀時(shí)間戳的獲取方法的流程示意圖。如圖2所示,在上述步驟S130中,根據(jù)一跳轉(zhuǎn)精確性需求信息和一目標(biāo)幀的信息,確定所述ES流中目標(biāo)幀的時(shí)間戳的方法,可包括步驟:

S131:根據(jù)所述跳轉(zhuǎn)精確性需求信息設(shè)定所述ES流中的幀發(fā)生跳轉(zhuǎn)的閾值;

S132:判斷所述目標(biāo)幀與所述ES流中當(dāng)前解碼輸出幀的幀號(hào)差值是否大于或等于所述閾值;

S133:如果是,根據(jù)所述當(dāng)前解碼輸出幀的位置計(jì)算得到所述目標(biāo)幀的時(shí)間戳。

在上述步驟S131中,幀發(fā)生跳轉(zhuǎn)的閾值,例如是最小時(shí)間間隔或最小幀號(hào)差值間隔。在上述步驟S132中,上述跳轉(zhuǎn)精確性需求信息可以是跳轉(zhuǎn)前(seek)視音頻 幀的幀號(hào)與所需跳轉(zhuǎn)(seek)的目標(biāo)幀的幀號(hào)的差值Δt,例如可以用時(shí)間差或幀號(hào)差表示。若幀發(fā)生跳轉(zhuǎn)的閾值為Δm,可當(dāng)Δt≥Δm時(shí),才計(jì)算目標(biāo)幀的時(shí)間戳,以進(jìn)行seek操作。

本發(fā)明實(shí)施例中,通過根據(jù)跳轉(zhuǎn)精確性需求信息設(shè)定發(fā)生跳轉(zhuǎn)的閾值,并根據(jù)閾值判斷是否發(fā)生跳轉(zhuǎn),可以滿足各種跳轉(zhuǎn)精確性要求。通過根據(jù)當(dāng)前解碼輸出幀的位置可以有效計(jì)算出目標(biāo)幀的時(shí)間戳。

圖3是本發(fā)明另一實(shí)施例的目標(biāo)幀時(shí)間戳的獲取方法的流程示意圖。如圖3所示,由圖2所示的目標(biāo)幀時(shí)間戳的獲取方法,還可包括步驟:

S134:根據(jù)所述ES流中的第一幀視頻幀的時(shí)間戳對所述目標(biāo)幀中的視頻幀的時(shí)間戳進(jìn)行校正,根據(jù)所述ES流中的第一幀音頻幀的時(shí)間戳對所述目標(biāo)幀中的音頻幀的時(shí)間戳進(jìn)行校正。

在該較佳實(shí)施例中,通過對目標(biāo)幀的時(shí)間戳進(jìn)行校正,可以得到更準(zhǔn)確的目標(biāo)幀的時(shí)間戳。在上述步驟S140~S160中,可以根據(jù)校正后的目標(biāo)幀時(shí)間戳讀取視音頻幀數(shù)據(jù)。

再如圖1所示,本發(fā)明實(shí)施例的對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法,還可包括步驟:

S170:判斷所述視音頻幀的時(shí)間戳小于所述目標(biāo)幀的時(shí)間戳?xí)r,丟棄時(shí)間戳小于所述目標(biāo)幀的時(shí)間戳的視音頻幀數(shù)據(jù),并繼續(xù)讀取下一幀的視音頻幀數(shù)據(jù),直到讀取的視音頻幀的時(shí)間戳大于或等于所述目標(biāo)幀的時(shí)間戳。

本發(fā)明實(shí)施例中,根據(jù)視音頻幀的時(shí)間戳小于目標(biāo)幀的時(shí)間戳,可以判斷所讀取的視音頻幀還在目標(biāo)幀的左側(cè),尚未達(dá)到跳轉(zhuǎn)播放位置。丟棄時(shí)間戳小于目標(biāo)幀的時(shí)間戳的視音頻幀數(shù)據(jù),有助于節(jié)省解碼器的緩存空間。

圖4是本發(fā)明一實(shí)施例中的將視音頻幀數(shù)據(jù)放入視音頻輸出隊(duì)列的方法的流程示意圖。如圖4所示,在上述步驟S160中,將讀取的所述視音頻幀數(shù)據(jù)放入視音頻輸出隊(duì)列,以進(jìn)行輸出,可包括步驟:

S161:將時(shí)間戳大于或等于所述目標(biāo)幀的讀取的所述視音頻幀數(shù)據(jù)中的視頻數(shù)據(jù)放入視頻輸出隊(duì)列,以進(jìn)行視頻輸出;

S162:將時(shí)間戳大于或等于所述目標(biāo)幀的讀取的所述視音頻幀數(shù)據(jù)中的音頻數(shù)據(jù)放入音頻輸出隊(duì)列,以進(jìn)行音頻輸出;

S163:判斷所述視頻輸出隊(duì)列和所述音頻輸出隊(duì)列均含有進(jìn)行輸出的視音頻幀數(shù)據(jù)時(shí),所述ffmpeg停止讀取視音頻幀數(shù)據(jù)。

本發(fā)明實(shí)施例中,在上述步驟S161和S162中,放入隊(duì)列的視音頻數(shù)據(jù)用于等待輸出。在上述步驟S163中,根據(jù)視、音頻均有輸出時(shí),停止讀取視音頻幀數(shù)據(jù),即結(jié)束seek,不僅能夠跳轉(zhuǎn)到目標(biāo)幀處,而且能夠同時(shí)可使用戶通過聲音或畫面任一個(gè)都可以確定已跳轉(zhuǎn)完成,進(jìn)而能夠帶給用戶較好的聽覺和視覺體驗(yàn)。

值得說明的是,本發(fā)明各實(shí)施例中關(guān)于“視音頻”的描述,例如視音頻幀、視音頻幀數(shù)據(jù)、視音頻信息,可以對于音頻和視頻中的至少一個(gè)而言。各步驟、操作或處理中,音頻數(shù)據(jù)可視需要與音頻操作相對應(yīng),視頻數(shù)據(jù)可視需要與視頻操作相對應(yīng),例如音頻數(shù)據(jù)通過音頻解碼器進(jìn)行解碼,視頻數(shù)據(jù)通過視頻進(jìn)行解碼,目標(biāo)幀中音頻幀的時(shí)間戳可通過第一幀中的音頻幀的時(shí)間戳進(jìn)行校正,目標(biāo)幀中的視頻幀的時(shí)間戳可通過第一幀中的視頻幀的時(shí)間戳進(jìn)行校正。

圖5是本發(fā)明一實(shí)施例對多媒體文件進(jìn)行按需跳轉(zhuǎn)的方法的流程示意圖。如圖5所示,首先,利用ffmpeg對輸入的多媒體文件進(jìn)行解復(fù)用操作,得到ES流,通過解復(fù)用操作可以獲取到文件總長度、文件封裝格式、視頻編碼方式、視頻幀率、視頻流長度、視頻顏色格式、視頻碼率,音頻編碼格式、音頻采樣率、音頻采樣格式、音頻流長度等編碼相關(guān)信息(步驟S201)。

然后,利用獲取到的這些編碼相關(guān)信息對intel解碼器進(jìn)行初始化,準(zhǔn)備好硬件加速解碼上下文相關(guān)信息(步驟S202)。接下來,根據(jù)對seek操作精確性的需求,設(shè)定判斷seek操作發(fā)生的閾值為Δm,例如,設(shè)定Δm=5幀(步驟S203)。計(jì)算當(dāng)前目標(biāo)幀與上一幀幀號(hào)的差值Δt,若Δt≥Δm則進(jìn)入seek操作邏輯(步驟S204)。根據(jù)目標(biāo)幀幀號(hào)計(jì)算出目標(biāo)視音頻幀的時(shí)間戳,并利用首幀視音頻的時(shí)間戳對該值進(jìn)行校正(步驟S205~S206)。

具體地,可根據(jù)目標(biāo)幀幀號(hào)計(jì)算初始目標(biāo)視頻幀的時(shí)間戳vt,再利用首幀視頻的時(shí)間戳vs對該初始目標(biāo)視頻幀的時(shí)間戳vt進(jìn)行校正,得到目標(biāo)視頻幀的時(shí)間戳VT。例如,目標(biāo)視頻幀的時(shí)間戳VT的計(jì)算公式可為:

VT=vt+vs, (1)

根據(jù)目標(biāo)幀幀號(hào)計(jì)算初始目標(biāo)視頻幀的時(shí)間戳vt的計(jì)算公式可為多種表達(dá)形式或計(jì)算方式,例如該計(jì)算公式可為:

vt=((目標(biāo)視頻幀幀號(hào)*(1.0/視頻幀率)*基準(zhǔn)時(shí)間)*基準(zhǔn)時(shí)間的倒數(shù)/視頻流的時(shí)間基), (2)

其中,目標(biāo)視頻幀幀號(hào)可根據(jù)一目標(biāo)幀的信息中得到,視頻幀率、基準(zhǔn)時(shí)間AV_TIME_BASE、及視頻流的時(shí)間基,可通過解復(fù)用得到的多媒體文件的視音頻信息得到?;鶞?zhǔn)時(shí)間AV_TIME_BASE的具體值可視需要進(jìn)行選擇,例如,AV_TIME_BASE=1000000。

類似地,可根據(jù)目標(biāo)幀幀號(hào)計(jì)算初始目標(biāo)音頻幀的時(shí)間戳at,再利用首幀音頻的時(shí)間戳as對該初始目標(biāo)音頻幀的時(shí)間戳at進(jìn)行校正,得到目標(biāo)音頻幀的時(shí)間戳AT。例如,目標(biāo)音頻幀的時(shí)間戳AT的計(jì)算公式可為:

AT=at+as。 (3)

根據(jù)目標(biāo)幀幀號(hào)計(jì)算初始目標(biāo)音頻幀的時(shí)間戳at的計(jì)算公式可為多種表達(dá)形式或計(jì)算方式,例如該計(jì)算公式可為:

at=((目標(biāo)音頻幀幀號(hào)*(1.0*一幀音頻的采樣數(shù)*基準(zhǔn)時(shí)間/目標(biāo)音頻采樣率)*基準(zhǔn)時(shí)間的倒數(shù)/音頻流的時(shí)間基) (4)

其中,公式(4)可滿足:一幀音頻的采樣數(shù)=目標(biāo)音頻采樣率/視頻幀率,目標(biāo)音頻幀幀號(hào)=目標(biāo)音頻采樣索引值/一幀音頻的采樣數(shù)。目標(biāo)音頻采樣索引值可通過seek操作發(fā)生時(shí)接口調(diào)用者傳入的接口參數(shù)中得到。目標(biāo)音頻采樣率是指調(diào)用者所需要的音頻采樣率,目標(biāo)音頻采樣率可根據(jù)接口調(diào)用者設(shè)置的目標(biāo)解碼參數(shù)結(jié)構(gòu)體中得到?;鶞?zhǔn)時(shí)間AV_TIME_BASE的具體值可視需要進(jìn)行選擇,例如,AV_TIME_BASE=1000000。

上述實(shí)施例中,通過步驟S205~S206,例如,通過公式(1)~(2),可得到準(zhǔn)確的基于視頻流時(shí)間基的目標(biāo)視頻時(shí)間戳VT;類似地,通過公式(3)~(4),可得到準(zhǔn)確的目標(biāo)音頻幀的時(shí)間戳AT。

在得到準(zhǔn)確的目標(biāo)視頻幀的時(shí)間戳VT與目標(biāo)音頻幀的時(shí)間戳AT后,可利用ffmpeg進(jìn)行流操作。較佳地,先跳轉(zhuǎn)到距離目標(biāo)視音頻幀(可為目標(biāo)視頻幀或目標(biāo)音頻幀)最近的左側(cè)關(guān)鍵幀位置,并可通知intel解碼器清空其內(nèi)部緩存,以便后續(xù)讀取數(shù)據(jù)(步驟S207)。

利用ffmpeg由該最近的左側(cè)關(guān)鍵幀位置開始,從文件流(ES流)中讀取音視頻幀數(shù)據(jù)(步驟S208)。若讀到的為視頻幀,則送入intel視頻解碼器解碼,判斷該視 頻幀的時(shí)間戳是否小于VT,若是,則直接丟棄,否則,放入視頻輸出隊(duì)列等待輸出(步驟S209~S211)。若讀到的為音頻幀,則送入intel音頻解碼器解碼,并判斷輸出的音頻幀是否小于AT,若是,則直接拋棄,否則,放入音頻輸出隊(duì)列,等待輸出(步驟S212~S214)。當(dāng)視頻幀和音頻幀均有輸出時(shí),seek結(jié)束。

本發(fā)明實(shí)施例,能夠既可以充分利用英特爾解碼器(intel media sdk)進(jìn)行硬件加速解碼,又能允許使用者對被解碼播放的多媒體文件進(jìn)行按需跳轉(zhuǎn)(seek),可以很好地實(shí)現(xiàn)基于英特爾解碼器intel media sdk的多媒體文件的硬件加速解碼播放與按需跳轉(zhuǎn)seek。本發(fā)明能夠綜合利用intel media sdk與ffmpeg sdk來實(shí)現(xiàn)視音頻同步seek的方法。同時(shí),由于對目標(biāo)視頻幀、目標(biāo)音頻幀的匹配采用最接近原則(最左側(cè)關(guān)鍵幀),因而對于有一些存在時(shí)間戳漂移現(xiàn)象的多媒體素材,同樣能進(jìn)行較為準(zhǔn)確的seek操作。

本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。

本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其它可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。

這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。

這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其它可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算 機(jī)或其它可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。

以上所述的具體實(shí)施例,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

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