无码成人A片在线观看,性欧美videofree高清变态,中文字幕有码无码av,国产无人区卡一卡二扰乱码 ,最近高清日本免费

您現(xiàn)在的位置: 通信界 >> 視頻通信 >> 技術(shù)正文  
 
ffmpeg的快速音視頻開發(fā)方法[圖]
[ 通信界 / 佚名 / www.k-94.cn / 2012/3/25 10:56:44 ]
 

在DSP平臺(tái)上移植音視頻編解碼算法通常分為3個(gè)階段: 第1個(gè)階段產(chǎn)生并評(píng)估C代碼;第2個(gè)階段優(yōu)化C代碼;第3個(gè)階段進(jìn)行匯編優(yōu)化[1]。整個(gè)過程比較耗時(shí),工作量巨大。為減小移植工作量,可引入ffmpeg音視頻開發(fā)包,在開發(fā)包基礎(chǔ)上進(jìn)行開發(fā)可以免去第一階段工作,并減少部分第二階段的工作。ffmpeg是一個(gè)優(yōu)秀的音視頻解決方案,在此框架下可以方便、快速地進(jìn)行進(jìn)一步的開發(fā)。在嵌入式硬件平臺(tái)和嵌入Linux環(huán)境下,本文搭建了一種基于ffmpeg框架的音視頻編解碼軟件開發(fā)平臺(tái),可供算法改進(jìn)、性能測(cè)試,使得視頻編解碼算法的優(yōu)化改進(jìn)得以在一個(gè)高起點(diǎn)上快速進(jìn)行。本文分別介紹了平臺(tái)搭建步驟(包括UBoot、Linux、ffmpeg的移植)和基于ffmpeg開發(fā)的要點(diǎn)。

1 ffmpeg簡(jiǎn)介

ffmpeg是一個(gè)集錄制、轉(zhuǎn)換、音/視頻編解碼功能為一體的、完整的開源解決方案。ffmpeg的開發(fā)基于Linux操作系統(tǒng),也可在大多數(shù)操作系統(tǒng)中編譯和使用。ffmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多種編碼,AVI、MPEG、OGG、Matroska、ASF等90多種解碼;TCPMP、VLC、MPlayer等開源播放器都用到了ffmpeg。它能夠快速實(shí)現(xiàn)音視頻格式轉(zhuǎn)換,也能從音視頻源獲取數(shù)據(jù)并將其保存。在捕獲視頻數(shù)據(jù)時(shí)可以設(shè)置捕獲設(shè)備和視頻輸入標(biāo)準(zhǔn)(包括NTSC、PAL 及SECAM),對(duì)于DV1394還可設(shè)置視頻捕獲通道。ffmpeg 使用video4linux 架構(gòu)的視頻源,以及其他任何開源系統(tǒng)的音頻源。

2 建立嵌入式Linux開發(fā)平臺(tái)

2.1 bootloader移植

UBoot是一個(gè)著名的開放源碼項(xiàng)目,支持ARM、PowerPC等多種架構(gòu)的處理器,也支持Linux、NetBSD 和VxWorks 等多種操作系統(tǒng)。UBoot是用于初始化目標(biāo)板硬件,為嵌入式操作系統(tǒng)提供目標(biāo)板硬件配置信息,完成嵌入式操作系統(tǒng)裝載、引導(dǎo)和運(yùn)行的固件程序。

本嵌入式平臺(tái)硬件環(huán)境的CPU為S3C2410,板上用來啟動(dòng)的NOR Flash為Intel公司的E28F320J3。移植工作的板極配置主要是配置好NOR Flash的驅(qū)動(dòng),用于存放UBoot鏡像文件,配置網(wǎng)卡芯片是為了可以使用網(wǎng)絡(luò)加載Linux內(nèi)核鏡像文件。

本平臺(tái)使用uboot1.1.5版本,使用cross3.2交叉編譯工具[2]。UBoot的移植詳見參考文獻(xiàn)[3]。在其基礎(chǔ)上,筆者做了以下修改:新建開發(fā)板目錄,名稱為myboard,拷貝driver/cfi_flash.c代替 board/myboard/flash.c,并改名為flash.c。修改include/configs/myboard.h文件,添加(或者修改為)如下宏定義:

#define CFG_FLASH_CFI1

#define CFG_FLASH_DRIVER1

#define CFG_FLSH_USE BUFFER_WRITE 1

#define CFG_FLASH_PROTECTION1

#define CFG_ENV_IS_IN_FLASH1

#define CFG_ENV_ADDR (PHYS_FLASH_1 + 0x40000)

#define CFG_ENV_SECT_SIZE(0x20000)

#define CFG_INIT_CRITICAL1

UBoot編譯好之后下載到開發(fā)板,設(shè)置網(wǎng)卡物理地址、IP地址、服務(wù)器地址和啟動(dòng)參數(shù),并把系統(tǒng)控制權(quán)交給Linux操作系統(tǒng)。其中,啟動(dòng)參數(shù)用來自動(dòng)從服務(wù)器下載編譯好的Linux內(nèi)核。設(shè)置UBoot的命令如下:

#setenv bootcmd tftp 32000000 uImage\\;bootm 32000000

#saveenv

2.2 Linux移植

本文移植Linux2.6內(nèi)核。2.6內(nèi)核比2.4內(nèi)核在調(diào)度器性能、實(shí)時(shí)性、內(nèi)核可搶占性等方面都有大幅提高。參照參考文獻(xiàn)[3]進(jìn)行移植,在文件系統(tǒng)方面,為方便開發(fā)調(diào)試,采用NFS網(wǎng)絡(luò)文件系統(tǒng)。在裁減配置內(nèi)核時(shí),選擇NFS配置。內(nèi)核配置的kernel command line如下:

root=/dev/nfs rw nfsroot=192.168.0.1:/home/arm/rootfs noinitrd init=/linuxrc console=ttySAC0,115200 ip=192.168.0.2

2.3 USB攝像頭驅(qū)動(dòng)配置

USB攝像頭使用網(wǎng)眼V2000。這款攝像頭使用ov511芯片,它的驅(qū)動(dòng)在配置Linux內(nèi)核時(shí)可以選擇加載。

3 建立ffmpeg的嵌入式運(yùn)行環(huán)境

3.1 ffmpeg的移植及編譯

下載最新的ffmpeg包解壓縮,在嵌入式平臺(tái)上使用開發(fā)包需要交叉編譯,手工修改配置文件如下:

#vi configure

prefix="/home/arm/files/video/libffmpge"

cross_prefix="usr/local/arm/3.4.1/bin/"

cc="armlinuxgcc"

ar="armlinuxar"

ranlib="armlinuxranlib"

strip="armlinuxstrip"

然后運(yùn)行命令

./configure cpu=armv4l enable shared enable pthreads

參考文獻(xiàn)[4]直接使用ffmpeg編譯后產(chǎn)生的可執(zhí)行文件來采集視頻。本文中應(yīng)用程序開發(fā)需要用到ffmpeg的動(dòng)態(tài)庫(kù),加上enableshared即可。配置完成后,運(yùn)行make、make install 命令,可在路徑/home/arm/files/video/libffmpge下生成可供嵌入式平臺(tái)程序動(dòng)態(tài)調(diào)用的庫(kù)libavformat.so和libavcodec.so。

3.2 視頻處理應(yīng)用程序開發(fā)

基于ffmpeg開發(fā)的文檔資料不多,因此,本文對(duì)ffmpeg的使用進(jìn)行詳細(xì)說明。本文基于ffmpeg庫(kù)的應(yīng)用是低幀率視頻采集編碼與網(wǎng)絡(luò)傳輸。這里以H.263編碼格式為例。

應(yīng)用程序要用到幾個(gè)主要的結(jié)構(gòu):

AVFormatContext *m_pFormatCtx_dec;

AVCodecContext *m_pCodecCtx_dec;

AVCodec*m_pCodec_dec;

AVFrame*m_pFrame_dec;

AVCodecContext *m_pCodecCtx_cd;

AVCodec*m_pCodec_cd;

應(yīng)用程序主要流程如圖1所示。

圖1 應(yīng)用程序主要流程

下面具體介紹核心函數(shù)和主要數(shù)據(jù)結(jié)構(gòu)的使用。

初始化部分:

//指定設(shè)備"/dev/v4l/video0"及視頻分辨率等參數(shù)

AVFormatParameters formatParams;

AVInputFormat* pInputFormat;

char *filename = "";

pInputFormat = av_find_input_format("video4linux");

(1) 找到視頻流

//注冊(cè)庫(kù)中含有的所有可用的文件格式和編碼器

av_register_all();//打開視頻攝像頭文件

av_open_input_file(&m_pFormatCtx_dec,filename,pInputFormat,0,&formatParams);//取出包含在文件中的流信息,用有效的信息把AVFormatContext的流域(streams field)填滿

av_find_stream_info(m_pFormatCtx_dec);

if(m_pFormatCtx_dec>streams[i]>codec.codec_type == CODEC_TYPE_VIDEO)

m_videostream = i; //尋找第一個(gè)視頻流

(2) 得到視頻流編碼上下文的指針

m_pCodecCtx_dec = &(m_pFormatCtx_dec>streams[m_videostream]>codec);//尋找視頻流的解碼器并打開它

m_pCodec_dec = avcodec_find_decoder(m_pCodecCtx_dec>codec_id);

avcodec_open(pCodecCtx, pCodec);

(3) 分配空間用來存儲(chǔ)解碼后的圖片

m_pFrame_dec = avcodec_alloc_frame();

(4) 設(shè)置編碼器

編碼器參數(shù)需在m_pCodec_cd中初始化。

m_pCodec_cd = avcodec_find_encoder(CODEC_ID_H263P);//H.263格式

avcodec_open(m_pCodecCtx_cd,m_pCodec_cd);

(5) 開始編碼

初始化完畢之后,就可以對(duì)攝像頭取得的視頻幀進(jìn)行解碼,解碼完成之后再對(duì)其編碼。

avcodec_decode_video(pCodecCtx_dec,pFrame_dec,&frameFinished, packet.data,packet.size);

avcodec_encode_video(pCodecCtx_cd,pOutBuf,pVideoCap>m_out_buf_size,pFrame_dec);

每幀編完碼之后,可以調(diào)用網(wǎng)絡(luò)接口發(fā)送視頻數(shù)據(jù)到網(wǎng)絡(luò)終端,實(shí)現(xiàn)遠(yuǎn)程監(jiān)控或者測(cè)試。

4 視頻編解碼算法改進(jìn)與開發(fā)方法

應(yīng)用程序編寫時(shí)調(diào)用ffmpeg庫(kù)函數(shù),方法簡(jiǎn)單易行。調(diào)用原始的未進(jìn)行算法改進(jìn)的庫(kù)函數(shù)并不能得到理想的編解碼速度,因此需要對(duì)原來的開發(fā)包源代碼進(jìn)行算法級(jí)改進(jìn)。核心的運(yùn)行量大的算法需要改用匯編代碼,以充分挖掘硬件潛力。對(duì)源碼修改之后重新編譯,得到可供應(yīng)用程序調(diào)用的動(dòng)態(tài)庫(kù),而應(yīng)用程序本身不必進(jìn)行修改,因此非常方便。

結(jié)語(yǔ)

本文介紹的視頻開發(fā)方法可以省去開發(fā)過程中第一階段和部分第二階段的工作量,從而快速地對(duì)現(xiàn)有算法進(jìn)行改進(jìn)、優(yōu)化、測(cè)試。另外,本平臺(tái)搭建方法也可以用于其他硬件平臺(tái)(如ADSPBF561平臺(tái))上,以滿足更高的實(shí)時(shí)性需求。

參考文獻(xiàn)

[1] 安向陽(yáng),沈庭芝.基于DSP TMS320DM642的H.264視頻編碼的實(shí)現(xiàn)和優(yōu)化[J]. 微計(jì)算機(jī)信息,2005,21(72): 128130.

[2] http://ftp.arm.linux.org.uk/pub/ armlinux/toolchain/.

[3] 吳張順,張珣. 基于ffmpeg的視頻編碼存儲(chǔ)研究與實(shí)現(xiàn)[J]. 杭州電子科技大學(xué)學(xué)報(bào),2006,26(3): 3034.

蔣志峰((碩士研究生),主要研究方向?yàn)榍度胧较到y(tǒng)、視頻信號(hào)處理。

 

作者:佚名 合作媒體:不詳 編輯:顧北

 

 

 
 熱點(diǎn)技術(shù)
普通技術(shù) “5G”,真的來了!牛在哪里?
普通技術(shù) 5G,是偽命題嗎?
普通技術(shù) 云視頻會(huì)議關(guān)鍵技術(shù)淺析
普通技術(shù) 運(yùn)營(yíng)商語(yǔ)音能力開放集中管理方案分析
普通技術(shù) 5G網(wǎng)絡(luò)商用需要“無憂”心
普通技術(shù) 面向5G應(yīng)運(yùn)而生的邊緣計(jì)算
普通技術(shù) 簡(jiǎn)析5G時(shí)代四大關(guān)鍵趨勢(shì)
普通技術(shù) 國(guó)家網(wǎng)信辦就《數(shù)據(jù)安全管理辦法》公開征求意見
普通技術(shù) 《車聯(lián)網(wǎng)(智能網(wǎng)聯(lián)汽車)直連通信使用5905-5925MHz頻段管理規(guī)定(
普通技術(shù) 中興通訊混合云解決方案,滿足5G多元業(yè)務(wù)需求
普通技術(shù) 大規(guī)模MIMO將帶來更多無線信道,但也使無線信道易受攻擊
普通技術(shù) 蜂窩車聯(lián)網(wǎng)的標(biāo)準(zhǔn)及關(guān)鍵技術(shù)及網(wǎng)絡(luò)架構(gòu)的研究
普通技術(shù) 4G與5G融合組網(wǎng)及互操作技術(shù)研究
普通技術(shù) 5G中CU-DU架構(gòu)、設(shè)備實(shí)現(xiàn)及應(yīng)用探討
普通技術(shù) 無源光網(wǎng)絡(luò)承載5G前傳信號(hào)可行性的研究概述
普通技術(shù) 面向5G中傳和回傳網(wǎng)絡(luò)承載解決方案
普通技術(shù) 數(shù)據(jù)中心布線系統(tǒng)可靠性探討
普通技術(shù) 家庭互聯(lián)網(wǎng)終端價(jià)值研究
普通技術(shù) 鎏信科技CEO劉舟:從連接層構(gòu)建IoT云生態(tài),聚焦CMP是關(guān)鍵
普通技術(shù) SCEF引入需求分析及部署應(yīng)用
  版權(quán)與免責(zé)聲明: ① 凡本網(wǎng)注明“合作媒體:通信界”的所有作品,版權(quán)均屬于通信界,未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用。已經(jīng)本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使用,并注明“來源:通信界”。違反上述聲明者,本網(wǎng)將追究其相關(guān)法律責(zé)任。 ② 凡本網(wǎng)注明“合作媒體:XXX(非通信界)”的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。 ③ 如因作品內(nèi)容、版權(quán)和其它問題需要同本網(wǎng)聯(lián)系的,請(qǐng)?jiān)谝辉聝?nèi)進(jìn)行。
通信視界
華為余承東:Mate30總體銷量將會(huì)超過兩千萬(wàn)部
趙隨意:媒體融合需積極求變
普通對(duì)話 苗圩:建設(shè)新一代信息基礎(chǔ)設(shè)施 加快制造業(yè)數(shù)字
普通對(duì)話 華為余承東:Mate30總體銷量將會(huì)超過兩千萬(wàn)部
普通對(duì)話 趙隨意:媒體融合需積極求變
普通對(duì)話 韋樂平:5G給光纖、光模塊、WDM光器件帶來新機(jī)
普通對(duì)話 安筱鵬:工業(yè)互聯(lián)網(wǎng)——通向知識(shí)分工2.0之路
普通對(duì)話 庫(kù)克:蘋果不是壟斷者
普通對(duì)話 華為何剛:挑戰(zhàn)越大,成就越大
普通對(duì)話 華為董事長(zhǎng)梁華:盡管遇到外部壓力,5G在商業(yè)
普通對(duì)話 網(wǎng)易董事局主席丁磊:中國(guó)正在引領(lǐng)全球消費(fèi)趨
普通對(duì)話 李彥宏:無人乘用車時(shí)代即將到來 智能交通前景
普通對(duì)話 中國(guó)聯(lián)通研究院院長(zhǎng)張?jiān)朴拢弘p輪驅(qū)動(dòng)下,工業(yè)
普通對(duì)話 “段子手”楊元慶:人工智能金句頻出,他能否
普通對(duì)話 高通任命克里斯蒂安諾·阿蒙為公司總裁
普通對(duì)話 保利威視謝曉昉:深耕視頻技術(shù) 助力在線教育
普通對(duì)話 九州云副總裁李開:幫助客戶構(gòu)建自己的云平臺(tái)
通信前瞻
楊元慶:中國(guó)制造高質(zhì)量發(fā)展的未來是智能制造
對(duì)話亞信科技CTO歐陽(yáng)曄博士:甘為橋梁,攜"電
普通對(duì)話 楊元慶:中國(guó)制造高質(zhì)量發(fā)展的未來是智能制造
普通對(duì)話 對(duì)話亞信科技CTO歐陽(yáng)曄博士:甘為橋梁,攜"電
普通對(duì)話 對(duì)話倪光南:“中國(guó)芯”突圍要發(fā)揮綜合優(yōu)勢(shì)
普通對(duì)話 黃宇紅:5G給運(yùn)營(yíng)商帶來新價(jià)值
普通對(duì)話 雷軍:小米所有OLED屏幕手機(jī)均已支持息屏顯示
普通對(duì)話 馬云:我挑戰(zhàn)失敗心服口服,他們才是雙11背后
普通對(duì)話 2018年大數(shù)據(jù)產(chǎn)業(yè)發(fā)展試點(diǎn)示范項(xiàng)目名單出爐 2
普通對(duì)話 陳志剛:提速又降費(fèi),中國(guó)移動(dòng)的兩面精彩
普通對(duì)話 專訪華為終端何剛:第三代nova已成為爭(zhēng)奪全球
普通對(duì)話 中國(guó)普天陶雄強(qiáng):物聯(lián)網(wǎng)等新經(jīng)濟(jì)是最大機(jī)遇
普通對(duì)話 人人車?yán)罱。航衲臧l(fā)力金融 拓展汽車后市場(chǎng)
普通對(duì)話 華為萬(wàn)飚:三代出貴族,PC產(chǎn)品已走在正確道路
普通對(duì)話 共享退潮單車入冬 智享單車卻走向盈利
普通對(duì)話 Achronix發(fā)布新品單元塊 推動(dòng)eFPGA升級(jí)
普通對(duì)話 金柚網(wǎng)COO邱燕:天吳系統(tǒng)2.0真正形成了社保管