国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FFMPEG的視頻水印系統(tǒng)設(shè)計(jì)

2018-04-13 01:07宋燕燕
關(guān)鍵詞:編解碼視頻流視頻文件

宋燕燕,秦 軍

(中國(guó)傳媒大學(xué)南廣學(xué)院,江蘇 南京 211172)

0 引 言

計(jì)算機(jī)與網(wǎng)絡(luò)信息技術(shù)的快速發(fā)展,促使當(dāng)今社會(huì)進(jìn)入了網(wǎng)絡(luò)信息時(shí)代,各個(gè)領(lǐng)域的數(shù)據(jù)和信息急劇增多。數(shù)字媒體的安全問(wèn)題也極大地制約了當(dāng)前信息化進(jìn)程,數(shù)據(jù)的版權(quán)保護(hù)問(wèn)題日益凸顯,因此數(shù)字水印技術(shù)應(yīng)運(yùn)而生。數(shù)字水印技術(shù)是將一些標(biāo)識(shí)信息直接嵌入在數(shù)字媒體元素中,且不影響原載體的使用價(jià)值。數(shù)字水印是保護(hù)信息安全、實(shí)現(xiàn)防偽溯源、版權(quán)保護(hù)的有效辦法[1]。當(dāng)前的媒體形式中,最能吸引眼球的是視頻文件,如何對(duì)視頻文件進(jìn)行有效保護(hù)已經(jīng)成為十分迫切的研究課題。視頻的格式有很多種,所以,相同的水印算法在不同種視頻中,并不一定兼容。文中設(shè)計(jì)的系統(tǒng)的意義在于,可以根據(jù)不同的編碼過(guò)程在程序中加以調(diào)整,使得在同一個(gè)平臺(tái)上進(jìn)行多種格式視頻水印的嵌入和提取,避免了給不同格式的視頻單獨(dú)調(diào)用編解碼庫(kù)構(gòu)建仿真平臺(tái)的麻煩。實(shí)現(xiàn)了一種基于FFMPEG的視頻水印系統(tǒng),使得各種編碼格式的視頻水印算法都能在同一個(gè)仿真平臺(tái)通用。

1 相關(guān)技術(shù)

FFMPEG是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。它提供了錄制、轉(zhuǎn)換以及編解碼功能的完整解決方案[2-5],包含了非常先進(jìn)的音頻/視頻編解碼庫(kù)libavcodec。為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多編解碼方式都是從頭開(kāi)發(fā)的[6-9]。

FFMPEG支持MPEG,DivX,MPEG -4,AC3,DV,F(xiàn)LV等40多種編碼,以及AVI、MPEG、OGG、Matroska、ASF等90多種解碼,涵蓋了多種音視頻格式。FFMPEG也支持常見(jiàn)的圖像色彩空間,并且在libavswcale中定義了色彩空間轉(zhuǎn)換的相關(guān)函數(shù),實(shí)現(xiàn)了各種色彩模式的相互轉(zhuǎn)換[10-12]。

SDL(simple direct-media layer)是一套開(kāi)放源代碼的跨平臺(tái)多媒體開(kāi)發(fā)庫(kù),使用C語(yǔ)言編寫(xiě)。SDL提供了數(shù)種控制圖像、聲音、輸出、輸入的函數(shù),讓開(kāi)發(fā)者只要用相同或相似的代碼就可以開(kāi)發(fā)出跨多個(gè)平臺(tái)(Linux、Windows、Mac OS X等)的應(yīng)用軟件。目前SDL多用于開(kāi)發(fā)游戲、模擬器、媒體播放器等多媒體應(yīng)用領(lǐng)域[13-15]。

2 系統(tǒng)方案

視頻水印系統(tǒng)主要分為三個(gè)模塊:輸入模塊、處理模塊和輸出模塊,各模塊之間通過(guò)調(diào)用各個(gè)接口進(jìn)行交互,使得功能更加完善,使用起來(lái)更加契合[11]。

1.輸入模塊。

(1)內(nèi)存管理。

內(nèi)存管理的主要功能就是將選中的視頻文件信息寫(xiě)入內(nèi)存,并且通過(guò)一系列的操作將視頻數(shù)據(jù)提供給FFMEPG的解碼器。

(2)解碼。

解碼主要是對(duì)視頻解碼,文中對(duì)音頻信息不作處理。視頻解碼主要的內(nèi)容就是將之前存入內(nèi)存的數(shù)據(jù)信息通過(guò)FFMPEG的解碼器進(jìn)行解碼,解碼完成后送給SDL。并且利用SDL進(jìn)行YUV數(shù)據(jù)顯示。

(3)渲染紋理。

負(fù)責(zé)把利用FFMPEG解碼獲得的YUV數(shù)據(jù)渲染到紋理中,再拷貝到渲染器,實(shí)現(xiàn)視頻成功顯示。

2.處理模塊。

利用FFMPEG中的過(guò)濾器的各種方法,給視頻加“特效”,而文中的特效就是圖片水印。FFMPEG的libavfilter類(lèi)庫(kù)提供了大量的視音頻過(guò)濾器,種類(lèi)繁多,有很多現(xiàn)成的filter可以直接使用,也給大家研究視頻播放器帶來(lái)了許多便捷。文中是在FFMPEG的libavfilter類(lèi)庫(kù)的基礎(chǔ)上完成一個(gè)水印疊加器,利用Visual Studio 2015平臺(tái)加以實(shí)現(xiàn)。

可以將一張透明背景的圖片作為水印疊加到一個(gè)視頻文件上。需要注意的是,其疊加工作是在解碼后的YUV像素?cái)?shù)據(jù)的基礎(chǔ)上完成的。程序支持使用SDL顯示疊加后的YUV數(shù)據(jù),也可以將疊加后的YUV輸出成文件。

3.輸出模塊。

利用FFMPEG中封裝好的代碼,實(shí)現(xiàn)視頻的輸出。系統(tǒng)方案如圖1所示。

圖1 系統(tǒng)方案

3 視頻流解碼

每個(gè)視頻都有自己的封裝格式,而所謂封裝格式,也就是視頻的類(lèi)型。比如:MP4、TS等。也就是說(shuō),在每個(gè)視頻的封裝格式中,都包含此視頻的各種信息,比如視頻流和音頻流等。對(duì)于有封裝格式的視頻,需要先從中提取出視頻流,然后通過(guò)解碼器解碼。例如解碼TS格式的視頻文件,就是“TS→H.264碼流→YUV”[4]。視頻流解碼流程如圖2所示。

圖2 視頻流解碼流程

(1)首先設(shè)定函數(shù)av_register_all()進(jìn)行初始化,再設(shè)定avformat_open_input()方法打開(kāi)文件,獲取視頻文件的封裝格式信息。其中需要判斷打開(kāi)是否成功,如果不成功則顯示“無(wú)法打開(kāi)視頻文件”。

(2)使用for循環(huán),判斷流信息中哪個(gè)是視頻流信息,哪個(gè)是音頻流信息;找到視頻流后,尋找解碼器;找到解碼器后,使用avcodec_open2()打開(kāi)解碼器。

(3)定義方法av_read_frame()獲取封裝格式AVPacker信息,再使用Avcodec_decode_video2()方法解碼AVPacker信息。若沒(méi)有獲取到AVPacker信息,則停止運(yùn)行。

(4)若獲取到了AVPacker信息,則使用av_malloc()方法將YUV格式信息從內(nèi)存中取出,填充到pAVFrameYUV中。

4 水印添加

視頻文件經(jīng)過(guò)解碼、渲染等一系列工序之后,要將水印文件添加到視頻文件上。FFMPEG自帶的類(lèi)庫(kù)中含有大量的過(guò)濾器,這些過(guò)濾器可以將一些文件信息轉(zhuǎn)碼。

AVFilter的基本處理流程如下:

(1)avfilter_register_all():注冊(cè)。

avfilter_graph_alloc():分配一個(gè)AVFilterGraph。

(2)創(chuàng)建AVFilterContext。

avfilter_graph_create_filter():創(chuàng)建filter。

(3)重復(fù)以上兩步,創(chuàng)建一個(gè)source,一個(gè)sink。

avfilter_graph_parse_ptr():將一串通過(guò)字符串描述的Graph添加到AVFilterGraph中。

avfilter_graph_config():檢查FilterGraph的配置。

av_buffersrc_add_frame():向FilterGraph中加入一個(gè)AVFrame。

av_buffersink_get_frame():從AVFilterGraph中取出一個(gè)AVFrame。

(4)重復(fù)以上兩步,加入一個(gè)AVFrame處理AVFrame,取出AVFrame。

以上就是AVFilter的處理流程,其他特效通過(guò)avfilter_graph_parse_ptr(filter_graph,filters_descr,&inputs,&outputs,NULL)中filters_descr這個(gè)字符串來(lái)決定,調(diào)用FFMPEG提供的方法和傳入了符合格式的過(guò)濾字串。

具體流程如圖3所示。

圖3 視頻水印添加流程

5 運(yùn)行結(jié)果

基于FFMPEG的視頻水印系統(tǒng)已完成,系統(tǒng)運(yùn)行環(huán)境:Windows 2007系統(tǒng);平臺(tái):Visual Studio 2015。

首先在Visual Studio中運(yùn)行系統(tǒng),如圖4所示,可以看到左部的圖片是默認(rèn)圖片,點(diǎn)擊“打開(kāi)文件”,選擇一個(gè)視頻文件進(jìn)行添加,而文中選擇了一部后綴名為.ts的視頻進(jìn)行添加,視頻添加后左部默認(rèn)圖片會(huì)變成視頻文件的首幀畫(huà)面。

點(diǎn)擊“播放”按鈕,視頻可以正常播放,而點(diǎn)擊“暫停”按鈕,視頻文件會(huì)停在當(dāng)前幀,點(diǎn)擊“停止”按鈕,視頻會(huì)停止播放并且恢復(fù)到默認(rèn)圖片。

實(shí)現(xiàn)一張水印圖片,點(diǎn)擊“選擇水印”按鈕,選中該圖片,選中后會(huì)呈現(xiàn)于界面上,用戶(hù)可以查看是否選擇正確。

點(diǎn)擊“加水印”按鈕,系統(tǒng)會(huì)自動(dòng)將圖片水印加入視頻文件畫(huà)面中,并且添加完畢會(huì)自動(dòng)導(dǎo)出到項(xiàng)目文件,導(dǎo)出的視頻格式類(lèi)型是.yuv。并且在添加完成后,會(huì)有彈框提示,提醒用戶(hù)已經(jīng)完成水印添加,并且已經(jīng)導(dǎo)出。

圖4 運(yùn)行結(jié)果

6 結(jié)束語(yǔ)

從數(shù)字媒體元素版權(quán)保護(hù)需求出發(fā)探討了視頻水印系統(tǒng)設(shè)計(jì)方案,利用FFMPEG編解碼庫(kù)解決視頻水印算法中的編解碼問(wèn)題,實(shí)現(xiàn)H.264的視頻解碼功能,包括ts、mp4等視頻格式。提出了FFMPEG轉(zhuǎn)碼圖形用戶(hù)界面的具體實(shí)現(xiàn)方法,介紹了FFMPEG轉(zhuǎn)碼加密模塊的流程、函數(shù)調(diào)用關(guān)系、具體加密算法的實(shí)現(xiàn)和視頻播放模塊的具體實(shí)現(xiàn)。利用模塊化思想,為不同編碼格式的視頻水印算法提供一個(gè)通用平臺(tái),對(duì)視頻的版權(quán)保護(hù)起到了積極作用,具有一定的現(xiàn)實(shí)意義和參考價(jià)值。

參考文獻(xiàn):

[1] CHANG X,WANG W,ZHAO J,et al.A survey of digital video watermarking[C]//Seventh international conference on natural computation.[s.l.]:[s.n.],2011:61-65.

[2] 任 嚴(yán),韓 臻,劉 麗.基于FFMPEG的視頻轉(zhuǎn)換與發(fā)布系統(tǒng)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(20):4962-4963.

[3] 王 彤.基于FFmpeg的H.264解碼器實(shí)現(xiàn)[D].大連:大連理工大學(xué),2011.

[4] CHENG Yun,LIU Qingtang,ZHAO Chengling,et al.Design and implementation of mediaplayer based on FFmpeg[J].Software Engineering and Knowledge Engineering,2012,2:867-874.

[5] ZENG Hao,FANG Yuan.Implementation of video transcoding client based on FFMPEG[J].Advanced Materials Research,2013,756-759:1748-1752.

[6] 辛長(zhǎng)春,婁小平,呂乃光.基于FFmpeg的遠(yuǎn)程視頻監(jiān)控系統(tǒng)編解碼[J].電子技術(shù),2013(1):3-5.

[7] 張國(guó)慶.基于FFmpeg的視頻轉(zhuǎn)碼與保護(hù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中師范大學(xué),2011.

[8] 李芳芳,蘇凱雄.基于FFmpeg的H.264格式轉(zhuǎn)換器的設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2016,40(7):32-35.

[9] 胡 聰,周 甜,唐璐丹.基于FFMPEG的跨平臺(tái)視頻編解碼研究[J].武漢理工大學(xué)學(xué)報(bào).2011,33(11):139-142.

[10] 吳 岳,施惠娟.基于FFMPEG的視頻水印系統(tǒng)[J].電子設(shè)計(jì)工程,2013,21(23):185-187.

[11] 胡 成,任平安,李文莉.基于Android系統(tǒng)的FFmpeg多媒體同步傳輸算法研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2011,21(10):85-87.

[12] LI Chengbo,JIANG Hong,WILFORD P,et al.Video coding using compressive sensing for wireless communications[C]//WCNC 2011.[s.l.]:IEEE,2011:2077-2082.

[13] 李 科,李 璐,蘭時(shí)勇.基于FFmpeg和SDL實(shí)現(xiàn)多路實(shí)時(shí)流變換及播放[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014,24(4):65-68.

[14] 汪俊杰,王志明.基于SDL的H.264流媒體播放系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(12):51-54.

[15] DUAN H,NG B P,CHONG M S S,et al.Applications of the SRV constraint in broadband pattern synthesis[J].Signal Processing,2008,88(4):1035-1045.

猜你喜歡
編解碼視頻流視頻文件
邊緣實(shí)時(shí)視頻流分析系統(tǒng)配置動(dòng)態(tài)調(diào)整算法研究
隨心定制視頻文件的縮略圖
為多重編解碼世界做好準(zhǔn)備
大型民機(jī)試飛遙測(cè)視頻編解碼方法研究
快速檢索,抓取電影中的精彩篇章
鐵路貨場(chǎng)智能大門(mén)集裝箱全景圖像采集方法研究
美國(guó)視頻流市場(chǎng)首現(xiàn)飽和征兆
網(wǎng)絡(luò)電視視頻編解碼主流標(biāo)準(zhǔn)對(duì)比
三招搞定課件中的“網(wǎng)絡(luò)視頻”
視頻文件,看過(guò)來(lái)