欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種用于WP手機(jī)進(jìn)行H264硬件解碼的方法及系統(tǒng)與流程

文檔序號(hào):12628967閱讀:707來(lái)源:國(guó)知局

本發(fā)明涉及視頻解碼領(lǐng)域,具體涉及一種用于WP手機(jī)進(jìn)行H264硬件解碼的方法和一種用于WP手機(jī)進(jìn)行H264硬件解碼的系統(tǒng)。



背景技術(shù):

H264是一種當(dāng)前較為流行的高清視頻編碼解碼規(guī)范,可以有效壓縮視頻體積,利于存儲(chǔ)和網(wǎng)絡(luò)播放,但視頻播放時(shí),需要對(duì)視頻源進(jìn)行解碼,解碼分為硬解和軟解。Windows Phone,簡(jiǎn)稱WP,是微軟公司推出的一款手機(jī)操作系統(tǒng)。

如今,各種直播越發(fā)流行,足不出戶,便可通過(guò)手機(jī)觀看到游戲、娛樂(lè)等精彩的直播內(nèi)容,例如用戶通過(guò)WP手機(jī)訪問(wèn)服務(wù)器,從而獲取視頻流,然后WP手機(jī)對(duì)視頻流進(jìn)行H264硬件解碼,邊可觀看到直播,但如今大多數(shù)WP手機(jī)H264硬件解碼方式一般采用SDK(Software Development Kit,軟件開發(fā)工具包)提供的MediaElement(視頻播放)接口,其解碼過(guò)程繁瑣,且易出錯(cuò)。



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

針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種用于WP手機(jī)進(jìn)行H264硬件解碼的方法和一種用于WP手機(jī)進(jìn)行H264硬件解碼的系統(tǒng),整個(gè)解碼過(guò)程控制方便,且解碼效率高。

為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:提供一種用于WP手機(jī)進(jìn)行H264硬件解碼的方法,用于在Windows 10系統(tǒng)下對(duì)視頻流進(jìn)行解碼,包括以下步驟:

步驟S1:獲取直播間視頻的流地址,并獲取流地址對(duì)應(yīng)的視頻流;

步驟S2:將DXVA硬件解碼器和Direct3D11硬件解碼器初始化,并將DXVA硬件解碼器和Direct3D11硬件解碼器與FFMPEG程序間建立連接;

步驟S3:使用DXVA硬件解碼器和Direct3D11硬件解碼器對(duì)視頻流進(jìn)行解碼,得到圖像。

在上述技術(shù)方案的基礎(chǔ)上,所述步驟S2中初始化DXVA硬件解碼器和Direct3D11硬件解碼器的具體步驟為:

步驟S2.1:創(chuàng)建IMFDXGIDeviceManager接口和ID3D11VideoDevice接口;

步驟S2.2:獲取硬件解碼級(jí)別,根據(jù)硬件解碼級(jí)別獲取最優(yōu)的硬件解碼參數(shù)結(jié)構(gòu);

步驟S2.3:創(chuàng)建含有多個(gè)紋理表面的ID3D11Texture2D接口,且給ID3D11Texture2D接口的每個(gè)紋理表面創(chuàng)建一ID3D11VideoDecoderOutputView接口;

步驟S2.4:創(chuàng)建ID3D11VideoDecoder接口,并初始化FFMPEG中的AVD3D11VAContext結(jié)構(gòu)。

在上述技術(shù)方案的基礎(chǔ)上,所述IMFDXGIDeviceManager接口通過(guò)MFCreateDXGIDeviceManager函數(shù)創(chuàng)建。

在上述技術(shù)方案的基礎(chǔ)上,所述ID3D11VideoDevice接口的創(chuàng)建方法為:

調(diào)用IMFDXGIDeviceManager接口中的ResetDevice方法將Direct3D11硬件解碼器重置,然后調(diào)用IMFDXGIDeviceManager接口中的OpenDeviceHandle方法獲取一設(shè)備句柄,并調(diào)用IMFDXGIDeviceManager接口中的GetVideoService方法通過(guò)設(shè)備句柄創(chuàng)建ID3D11VideoDevice接口。

在上述技術(shù)方案的基礎(chǔ)上,所述ID3D11Texture2D接口通過(guò)ID3D11Device接口的CreateTexture2D方法創(chuàng)建,所述ID3D11Texture2D接口用于圖像輸出,所述ID3D11VideoDecoderOutputView接口通過(guò)調(diào)用ID3D11VideoDevice接口的CreateVideoDecoderOutputView方法創(chuàng)建。

在上述技術(shù)方案的基礎(chǔ)上,所述ID3D11VideoDecoder接口通過(guò)調(diào)用ID3D11VideoDevice接口的CreateVideoDecoder方法創(chuàng)建。

在上述技術(shù)方案的基礎(chǔ)上,將ID3D11VideoDecoderOutputView接口和ID3D11VideoDecoder接口賦值給AVD3D11VAContext結(jié)構(gòu)來(lái)完成AVD3D11VAContext結(jié)構(gòu)的初始化。

在上述技術(shù)方案的基礎(chǔ)上,所述步驟S2中DXVA硬件解碼器和Direct3D11硬件解碼器與FFMPEG程序間建立連接的方法為:將AVD3D11VAContext結(jié)構(gòu)賦值給FFMPEG程序的AVCodecContext結(jié)構(gòu)中的硬件解碼環(huán)境hwaccel_context,其中hwaccel_context為AVD3D11VAContext結(jié)構(gòu)的指針。

在上述技術(shù)方案的基礎(chǔ)上,所述步驟S3的具體步驟為:

S3.1:調(diào)用FFMPEG程序中的avcodec_decode_video2函數(shù)對(duì)視頻流進(jìn)行解碼;

S3.2:通過(guò)Direct3D11硬件解碼器的ID3D11DeviceContext接口中的Draw方法顯示出解碼后的圖像。

本發(fā)明還提供一種用于WP手機(jī)進(jìn)行H264硬件解碼的系統(tǒng),包括接收端和控制端;

所述接收端用于接收播間視頻的流地址,并根據(jù)流地址獲取流地址對(duì)應(yīng)的視頻流,然后將視頻流發(fā)送給控制端;

所述控制端用于將DXVA硬件解碼器和Direct3D11硬件解碼器初始化,并將DXVA硬件解碼器和Direct3D11硬件解碼器與FFMPEG程序間建立連接,然后調(diào)用FFMPEG程序中的avcodec_decode_video2函數(shù)對(duì)視頻流進(jìn)行解碼,得到解碼后的圖像。

與現(xiàn)有技術(shù)相比,本發(fā)明的一種用于WP手機(jī)進(jìn)行H264硬件解碼的方法的優(yōu)點(diǎn)在于:在直播間拉取視頻流,將DXVA硬件解碼器和Direct3D11硬件解碼器初始化后,使DXVA硬件解碼器和Direct3D11硬件解碼器與FFMPEG程序間建立連接,然后在WP手機(jī)上進(jìn)行H264硬件解碼,且整個(gè)解碼過(guò)程不必依賴于SDK提供的MediaElement接口,能夠?qū)φ麄€(gè)解碼以及顯示流程實(shí)現(xiàn)完全自主控制。

本發(fā)明的一種用于WP手機(jī)進(jìn)行H264硬件解碼的系統(tǒng)的優(yōu)點(diǎn)在于:用戶僅需拉取直播間的視頻流,便可便捷的在WP手機(jī)上通過(guò)DXVA硬件解碼器和Direct3D11硬件解碼器進(jìn)行硬件解碼的方式,對(duì)視頻流進(jìn)行硬件解碼,從而便捷的觀看到主播的直播。

附圖說(shuō)明

圖1為本發(fā)明一種用于WP手機(jī)進(jìn)行H264硬件解碼的方法的流程圖。

具體實(shí)施方式

以下結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。

參見圖1所示,本發(fā)明提供一種用于WP手機(jī)進(jìn)行H264硬件解碼的方法,用于在WP手機(jī)上對(duì)視頻流進(jìn)行硬件解碼后播放,本實(shí)施例中,WP手機(jī)上運(yùn)行的操作系統(tǒng)為版本號(hào)為Windows 10的操作系統(tǒng),該方法包括以下步驟:

步驟S1:獲取直播間視頻的流地址,并獲取流地址所對(duì)應(yīng)的視頻流,流地址和視頻流可以通過(guò)訪問(wèn)直播公司的服務(wù)器進(jìn)行獲取。

步驟S2:將DXVA硬件解碼器和Direct3D11硬件解碼器初始化,并將DXVA硬件解碼器和Direct3D11硬件解碼器與FFMPEG程序間建立連接,即DXVA硬件解碼器和Direct3D11硬件解碼器均與FFMPEG程序間建立連接。DXVA(DirectX Video Acceleration,視頻硬件加速)是微軟公司定制的視頻加速規(guī)范。Direct 3D是微軟公司出品的3D圖形API(Application Programming Interface,應(yīng)用程序編程接口),Direct3D11是Direct3D的其中一個(gè)版本,本實(shí)施例所需要用到的為Direct3D11中與視頻解碼相關(guān)的接口。FFMPEG(Fast Forward Mpeg)是一套用來(lái)記錄以及轉(zhuǎn)換數(shù)字音頻和數(shù)字視頻,并將數(shù)字音頻和數(shù)字視頻轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。初始化DXVA硬件解碼器和Direct3D11硬件解碼器的具體步驟為:

步驟S2.1:創(chuàng)建IMFDXGIDeviceManager接口和ID3D11VideoDevice接口。IMFDXGIDeviceManager接口通過(guò)MFCreateDXGIDeviceManager函數(shù)創(chuàng)建。ID3D11VideoDevice接口的創(chuàng)建方法為:調(diào)用IMFDXGIDeviceManager接口中的ResetDevice方法將Direct3D11硬件解碼器重置,然后調(diào)用IMFDXGIDeviceManager接口中的OpenDeviceHandle方法獲取一設(shè)備句柄deviceHandle,并調(diào)用IMFDXGIDeviceManager接口中的GetVideoService方法通過(guò)設(shè)備句柄deviceHandle創(chuàng)建ID3D11VideoDevice接口。IMFDXGIDeviceManager接口是UWP中DXVA功能的入口接口,UWP即Windows通用應(yīng)用平臺(tái),是Windows 10系統(tǒng)中Universal Windows Platform的簡(jiǎn)稱。MFCreateDXGIDeviceManager函數(shù)為微軟的Media Foundation中的API函數(shù)的接口,MFCreateDXGIDeviceManager用于Media Foundation利用Direct3D11進(jìn)行硬件解碼,Media Foundation是微軟公司推出的新一代多媒體應(yīng)用庫(kù),其目的在于給Windows操作系統(tǒng)平臺(tái)提供一個(gè)統(tǒng)一的多媒體影音解決方案,開發(fā)者可以通過(guò)Media Foundation播放視頻或聲音文件。ID3D11VideoDevice接口是用來(lái)創(chuàng)建資源表面和創(chuàng)建硬件解碼器的接口。ResetDevice方法、OpenDeviceHandle方法和GetVideoService方法均為IMFDXGIDeviceManager接口中的功能方法。

步驟S2.2:調(diào)用ID3D11VideoDevice接口的GetVideoDecoderProfile方法,獲取硬件解碼級(jí)別,然后根據(jù)硬件解碼級(jí)別調(diào)用ID3D11VideoDevice接口中的GetVideoDecoderConfig方法獲取硬件解碼參數(shù)D3D11_VIDEO_DECODER_CONFIG結(jié)構(gòu),D3D11_VIDEO_DECODER_CONFIG表示最優(yōu)的硬件解碼參數(shù)結(jié)構(gòu)。

步驟S2.3:創(chuàng)建含有多個(gè)紋理表面的ID3D11Texture2D接口,且給ID3D11Texture2D接口的每個(gè)紋理表面創(chuàng)建一ID3D11VideoDecoderOutputView接口。ID3D11Texture2D接口用于硬件解碼的圖像輸出,解碼后的圖像會(huì)存儲(chǔ)在該接口中,然后圖像通過(guò)該接口進(jìn)行繪制顯示。ID3D11Texture2D接口通過(guò)ID3D11Device接口的CreateTexture2D方法創(chuàng)建,ID3D11Texture2D接口用來(lái)表示一個(gè)Direct3D11設(shè)備,Direct3D11設(shè)備用來(lái)創(chuàng)建資源和枚舉顯示適配器性能。ID3D11VideoDecoderOutputView接口是ID3D11Texture2D接口的紋理的一個(gè)視圖,用于解碼器保存解碼后的圖像。

步驟S2.4:創(chuàng)建ID3D11VideoDecoder接口,并初始化FFMPEG中的AVD3D11VAContext結(jié)構(gòu)。D3D11VideoDecoder接口是DXVA硬件解碼器的解碼接口。D3D11VideoDecoder接口通過(guò)調(diào)用ID3D11VideoDevice接口中的CreateVideoDecoder方法創(chuàng)建。AVD3D11VAContext結(jié)構(gòu)用于向FFMPEG程序提供進(jìn)行DXVA和D3D11硬件解碼的上下文環(huán)境。將ID3D11VideoDecoderOutputView接口和ID3D11VideoDecoder接口賦值給AVD3D11VAContext結(jié)構(gòu)來(lái)完成AVD3D11VAContext結(jié)構(gòu)的初始化。

DXVA硬件解碼器和Direct3D11硬件解碼器與FFMPEG程序間建立連接的方法為:將AVD3D11VAContext結(jié)構(gòu)賦值給FFMPEG程序的AVCodecContext結(jié)構(gòu)中的硬件解碼環(huán)境hwaccel_context。AVCodecContext結(jié)構(gòu)是FFMPEG程序中解碼函數(shù)avcodec_decode_video2的重要解碼環(huán)境,因解碼函數(shù)avcodec_decode_video2在默認(rèn)情況下是進(jìn)行軟件解碼的,為了完成本發(fā)明的硬件解碼過(guò)程,需對(duì)AVCodecContext結(jié)構(gòu)進(jìn)行相應(yīng)設(shè)置,hwaccel_context即為AVCodecContext結(jié)構(gòu)中的設(shè)置字段,hwaccel_context表示硬件解碼環(huán)境上下文,hwaccel_context是一個(gè)AVD3D11VAContext結(jié)構(gòu)的指針。

步驟S3:使用DXVA硬件解碼器和Direct3D11硬件解碼器,對(duì)視頻流進(jìn)行解碼,得到圖像。具體的為:調(diào)用FFMPEG程序中的avcodec_decode_video2函數(shù)對(duì)視頻流進(jìn)行解碼,解碼后得到的圖像會(huì)通過(guò)解碼函數(shù)avcodec_decode_video2進(jìn)行返回,返回的是一個(gè)包含ID3D11VideoDecoderOutputView接口的指針,然后通過(guò)Direct3D11硬件解碼器的ID3D11DeviceContext接口中的Draw方法顯示出解碼后的圖像,完成在WP手機(jī)上的H264硬件解碼過(guò)程,Draw為ID3D11DeviceContext接口中的一個(gè)函數(shù),用以繪制非索引和非實(shí)例化圖文。

通過(guò)上述步驟,在直播間拉取視頻流,將DXVA硬件解碼器和Direct3D11硬件解碼器初始化后,使DXVA硬件解碼器和Direct3D11硬件解碼器與FFMPEG程序間建立連接,然后在WP手機(jī)上進(jìn)行H264硬件解碼,且整個(gè)解碼過(guò)程不必依賴于SDK提供的MediaElement接口,能夠?qū)φ麄€(gè)解碼以及顯示流程實(shí)現(xiàn)完全自主控制。

本發(fā)明還提供一種采用上述方法的用于WP手機(jī)進(jìn)行H264硬件解碼的系統(tǒng),該系統(tǒng)包括接收端和控制端,接收端用于接收播間視頻的流地址,并根據(jù)流地址獲取流地址對(duì)應(yīng)的視頻流,然后將視頻流發(fā)送給控制端;控制端用于將DXVA硬件解碼器和Direct3D11硬件解碼器初始化,并將DXVA硬件解碼器和Direct3D11硬件解碼器與FFMPEG程序間建立連接,然后調(diào)用FFMPEG程序中的avcodec_decode_video2函數(shù)對(duì)視頻流進(jìn)行解碼,得到解碼后的圖像。

本發(fā)明不局限于上述實(shí)施方式,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說(shuō)明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
贺兰县| 大荔县| 方正县| 易门县| 濮阳市| 湖口县| 石嘴山市| 奇台县| 石渠县| 深圳市| 昭苏县| 布尔津县| 常德市| 石渠县| 湛江市| 卢龙县| 随州市| 吉安市| 宁城县| 富顺县| 祁门县| 阳春市| 秭归县| 德阳市| 上高县| 上饶县| 兴城市| 金沙县| 建水县| 南投县| 黄陵县| 石首市| 岫岩| 兴城市| 息烽县| 和顺县| 宝丰县| 若尔盖县| 阜康市| 纳雍县| 上饶市|