两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

流媒體視頻數(shù)據(jù)的解碼方法和裝置的制造方法

文檔序號(hào):9915004閱讀:460來源:國知局
流媒體視頻數(shù)據(jù)的解碼方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及視頻技術(shù)領(lǐng)域,尤其涉及一種流媒體視頻數(shù)據(jù)的解碼方法和裝置。
【背景技術(shù)】
[0002]1s系統(tǒng)是由蘋果公司開發(fā)的移動(dòng)操作系統(tǒng)。1s系統(tǒng)播放器不支持某些格式的流媒體視頻數(shù)據(jù)的解碼,例如基于H.264格式的流媒體視頻數(shù)據(jù)(以下簡稱為H.264流媒體視頻數(shù)據(jù))。為解決這一問題,目前在1s系統(tǒng)環(huán)境下通常通過軟解碼來實(shí)現(xiàn)這類流媒體視頻數(shù)據(jù)的解碼。現(xiàn)在視頻行業(yè)內(nèi)的軟解碼通常采用FFmpeg開源框架,F(xiàn)Fmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。
[0003]然而,這種軟解碼方式完全依賴于CPU來執(zhí)行。由于CPU沒有相關(guān)的集成指令,需要靠CPU的運(yùn)算能力來解碼,所以對(duì)流媒體視頻數(shù)據(jù)的軟解碼會(huì)給CPU造成很大的負(fù)擔(dān),在移動(dòng)終端表現(xiàn)為效率低,耗電嚴(yán)重。

【發(fā)明內(nèi)容】

[0004]有鑒于此,本發(fā)明提出了一種流媒體視頻數(shù)據(jù)的解碼方法和裝置,其通過硬解碼方式實(shí)現(xiàn)了對(duì)流媒體視頻數(shù)據(jù)的解碼,提高了解碼效率并降低了耗電量。
[0005]—方面,提出了一種流媒體視頻數(shù)據(jù)的解碼方法,該方法包括:獲取流媒體視頻數(shù)據(jù)的視頻幀的時(shí)間信息;建立第一緩存區(qū)以緩存流媒體視頻數(shù)據(jù)的視頻幀;獲取所緩存的視頻幀的視頻幀信息;基于所獲取的時(shí)間信息和視頻幀信息對(duì)所緩存的視頻幀進(jìn)行解碼,并將解碼后的視頻幀數(shù)據(jù)保存在第二緩存區(qū)中;讀取第二緩存區(qū)中的視頻幀數(shù)據(jù)并進(jìn)行轉(zhuǎn)碼;以及將轉(zhuǎn)碼后的視頻幀數(shù)據(jù)寫入硬盤以供播放。
[0006]另一方面,提出了一種流媒體視頻數(shù)據(jù)的解碼裝置,該裝置包括:用于獲取流媒體視頻數(shù)據(jù)的視頻幀的時(shí)間信息的部件;用于建立第一緩存區(qū)以緩存流媒體視頻數(shù)據(jù)的視頻幀的部件;用于獲取所緩存的視頻幀的視頻幀信息的部件;用于基于所獲取的時(shí)間信息和視頻幀信息對(duì)所緩存的視頻幀進(jìn)行解碼,并將解碼后的視頻幀數(shù)據(jù)保存在第二緩存區(qū)中的部件;用于讀取第二緩存區(qū)中的視頻幀數(shù)據(jù)并進(jìn)行轉(zhuǎn)碼的部件;以及用于將轉(zhuǎn)碼后的視頻幀數(shù)據(jù)寫入硬盤以供播放的部件。根據(jù)下面參考附圖對(duì)示例性實(shí)施例的詳細(xì)說明,本發(fā)明的其它特征及方面將變得清楚。
【附圖說明】
[0007]包含在說明書中并且構(gòu)成說明書的一部分的附圖與說明書一起示出了本發(fā)明的示例性實(shí)施例、特征和方面,并且用于解釋本發(fā)明的原理。
[0008]圖1示出根據(jù)本發(fā)明一實(shí)施例的一種流媒體視頻數(shù)據(jù)的解碼方法的流程圖。
[0009]圖2示出根據(jù)本發(fā)明一實(shí)施例的一種流媒體視頻數(shù)據(jù)的解碼裝置的框圖。
[0010]圖3示出根據(jù)本發(fā)明一實(shí)施例的一種流媒體視頻數(shù)據(jù)的解碼設(shè)備的框圖。
【具體實(shí)施方式】
[0011]以下將參考附圖詳細(xì)說明本發(fā)明的各種示例性實(shí)施例、特征和方面。附圖中相同的附圖標(biāo)記表示功能相同或相似的元件。盡管在附圖中示出了實(shí)施例的各種方面,但是除非特別指出,不必按比例繪制附圖。
[0012]在這里專用的詞“示例性”意為“用作例子、實(shí)施例或說明性”。這里作為“示例性”所說明的任何實(shí)施例不必解釋為優(yōu)于或好于其它實(shí)施例。
[0013]另外,為了更好的說明本發(fā)明,在下文的【具體實(shí)施方式】中給出了眾多的具體細(xì)節(jié)。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,沒有某些具體細(xì)節(jié),本發(fā)明同樣可以實(shí)施。在一些實(shí)例中,對(duì)于本領(lǐng)域技術(shù)人員熟知的方法、手段、元件和電路未作詳細(xì)描述,以便于凸顯本發(fā)明的主旨。
[0014]實(shí)施例1
[0015]圖1示出根據(jù)本發(fā)明一實(shí)施例的一種流媒體視頻數(shù)據(jù)的解碼方法的流程圖。如圖1所示,該方法主要包括:
[0016]步驟101:獲取流媒體視頻數(shù)據(jù)的視頻幀的時(shí)間信息;
[0017]步驟102:建立第一緩存區(qū)以緩存流媒體視頻數(shù)據(jù)的視頻幀;
[0018]步驟103:獲取所緩存的視頻幀的視頻幀信息;
[0019]步驟104:基于所獲取的時(shí)間信息和視頻幀信息對(duì)所緩存的視頻幀進(jìn)行解碼,并將解碼后的視頻幀數(shù)據(jù)保存在第二緩存區(qū)中;
[0020]步驟105:讀取第二緩存區(qū)中的視頻幀數(shù)據(jù)并進(jìn)行轉(zhuǎn)碼;以及
[0021]步驟106:將轉(zhuǎn)碼后的視頻幀數(shù)據(jù)寫入硬盤以供播放。
[0022]本實(shí)施例的各步驟可借助于解碼硬件(如GPU)的指令集來完成,從而實(shí)現(xiàn)硬解碼,降低解碼過程中CPU資源的使用,提高了解碼速度,降低了終端設(shè)備的耗電量。
[0023]以下以1s系統(tǒng)下的VideoToolBox框架為例,給出本實(shí)施例的一個(gè)非限制性的具體示例。本領(lǐng)域技術(shù)人員應(yīng)理解,該示例僅為了說明本發(fā)明實(shí)施例以便于理解,而并非以任何方式限制本發(fā)明。
[0024]在一個(gè)示例中,該方法可包括獲取流媒體視頻數(shù)據(jù),其中流媒體視頻數(shù)據(jù)可以是基于H.2 6 4的H L S (H T T P流媒體直播)流媒體視頻數(shù)據(jù)。i ο s系統(tǒng)提供的播放器(例如AVplayer,MPMoviePlayer ,AVPlayerQueue等)是不支持H.264視頻格式的解碼的,所以要獲取流媒體視頻數(shù)據(jù),可控制流媒體視頻數(shù)據(jù)output (輸出數(shù)據(jù)流)的流向,即截獲output數(shù)據(jù),并對(duì)所截獲的數(shù)據(jù)進(jìn)行本實(shí)施例的后續(xù)處理,以實(shí)現(xiàn)硬解碼。
[0025]以AV P I a y e r播放器為例,可以設(shè)置A V P I a y e r播放器的輸出函數(shù)AVPlay er I temVideoOutput 的at tribute (屬性)的 kCVPi xe IBufferPixe IFormatTypeKey 格式,即指定解碼后的圖像格式。例如,對(duì)于移動(dòng)終端為蘋果?手機(jī)的情況,由于蘋果的硬解碼器只支持NV12,因此解碼后的圖像格式可指定成NV12格式。
[0026]可通過控制output流向來獲取流媒體視頻數(shù)據(jù)的視頻幀的時(shí)間信息。時(shí)間信息可以通過參數(shù)CMTime表示,其指示視頻幀的是每秒中的第幾幀,以及每秒有多少幀,利用該信息還可計(jì)算出每幀的起止時(shí)間等時(shí)間信息??赏ㄟ^函數(shù)CACurrentMediaTime ()來獲取CMTime0
[0027]可通過函數(shù)CopyPixelBufferForItemTime()來獲取 pixel buff er (像素緩存區(qū))作為第一緩存區(qū),以緩存流媒體視頻數(shù)據(jù)的視頻幀。可通過函數(shù)CVPixelBufferRef來獲取所緩存的視頻幀的視頻幀信息,視頻幀信息可包括用于顯示該視頻幀所需的信息,例如每個(gè)視頻幀的紋理數(shù)據(jù),用于繪制該視頻幀的畫面以供顯示。
[0028]在一個(gè)示例中,基于所獲取的時(shí)間信息和視頻幀信息對(duì)所緩存的視頻幀進(jìn)行解碼可包括:針對(duì)每個(gè)視頻幀,將所獲取的時(shí)間信息和視頻幀信息進(jìn)行合成得到合成后的視頻幀信息,并對(duì)合成后的視頻幀信息進(jìn)行解碼。
[0029]例如,可通過函數(shù)AVAssetffriter將第一緩存區(qū)中的視頻幀的視頻幀信息與其他信息(例如時(shí)間信息、音頻信息等)進(jìn)行合成。具體來說,可以通過函數(shù)AVAssetWirtelnput控制AVAssei^riter內(nèi)部的input(輸入數(shù)據(jù)流)流向以截取input數(shù)據(jù)進(jìn)行后續(xù)處理??梢詫⒅甘揪幗獯a格式的參數(shù)A VVideoCodecKey設(shè)置為針對(duì)H.264格式的AVVideoCodecH264。可根據(jù)上文所獲得的時(shí)間信息來指定input中每幀的時(shí)間信息。可通過適配器inputPixelBufferAdaptor將input流向?qū)懭階VAssei^r iter,將時(shí)間信息與視頻幀信息合成,得到合成后的視頻幀信息。
[0030]在一個(gè)示例中,可建立針對(duì)解碼的sess1n(會(huì)話),利用該會(huì)話,對(duì)合成后的視頻幀信息進(jìn)行解碼,并可將解碼獲得的視頻數(shù)據(jù)保存在第二緩存區(qū)中。第二緩存區(qū)可保存針對(duì)多個(gè)第一緩存區(qū)的解碼后的視頻幀數(shù)據(jù)(例如是可以接納針對(duì)多個(gè)Pixel buffer的解碼數(shù)據(jù)的pixel buffer pool (像素緩存區(qū)池))。由此,即可獲得解碼后的NV12格式的YUV圖像數(shù)據(jù)。這一過程將視頻幀的時(shí)間信息與視頻幀信息(例如視頻幀的紋理數(shù)據(jù))相結(jié)合,從而能夠?qū)崿F(xiàn)對(duì)包含時(shí)間信息的流媒體視頻數(shù)據(jù)的硬解碼,并使得解碼后的視頻幀數(shù)據(jù)中也包含幀的時(shí)間信息,從而能夠基于該時(shí)間信息來合成用于播放的視頻格式。
[0031]在一個(gè)示例中,在從第一緩存區(qū)中讀取視頻幀時(shí),可檢查視頻幀是否處于Ready(有效)狀態(tài),如果處于Ready狀態(tài)則可進(jìn)行讀取,反之,如處于sleep(無效)狀態(tài),則進(jìn)行等待,直到變?yōu)镽eady狀態(tài)。
[0032]在一個(gè)示例中,可以例如通過以下指令,基于函數(shù)CVPixelBufferLockBaseAddress(buffer,0)獲得幀指針 baseAddress:
[0033]void*baseAddress=CVPixeIBufferGetBaseAddress(buffer)),
[0034]所獲得的幀
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
平定县| 文水县| 进贤县| 福安市| 嵊州市| 濮阳市| 盖州市| 沙坪坝区| 封开县| 台江县| 崇礼县| 绥中县| 普兰县| 塔河县| 安阳市| 庆安县| 抚顺市| 安仁县| 隆回县| 顺平县| 分宜县| 绥中县| 长治市| 扶风县| 贞丰县| 左贡县| 郓城县| 虞城县| 昭觉县| 济宁市| 合川市| 镇江市| 合肥市| 夏津县| 壶关县| 格尔木市| 罗甸县| 玉环县| 商洛市| 拜泉县| 景德镇市|