[FFMPEG][轉(zhuǎn)]H264Buffer流解碼成YUV420P

主要針對(duì)自己手動(dòng)解析h264裸流文件得到圈盔,分割得到buffer給ffmpeg解析

在網(wǎng)上找了很久這方面的內(nèi)容,發(fā)現(xiàn)網(wǎng)上的代碼都太舊了,所使用的函數(shù)舊到連最新版本的ffmpeg都已經(jīng)不包含了,所以對(duì)于我這個(gè)初學(xué)者來說太坑拉驰吓。不過經(jīng)過多次查找ffmpeg的頭文件和結(jié)合網(wǎng)上的內(nèi)容,終于成功可以解碼拉∠捣睿現(xiàn)在貼出來檬贰。

首先是初始化一些參數(shù)

  • 下面初始化h264解碼庫
//下面初始化h264解碼庫  
avcodec_init();  
av_register_all();  
  
AVFrame *pFrame_ = NULL;  
  
AVCodecContext *codec_ = avcodec_alloc_context();  
  
/* find the video encoder */  
AVCodec *videoCodec = avcodec_find_decoder(CODEC_ID_H264);  
  
if (!videoCodec)   
{  
    cout << "codec not found!" << endl;  
    return -1;  
}  
  
//初始化參數(shù),下面的參數(shù)應(yīng)該由具體的業(yè)務(wù)決定  
codec_->time_base.num = 1;  
codec_->frame_number = 1; //每包一個(gè)視頻幀  
codec_->codec_type = AVMEDIA_TYPE_VIDEO;  
codec_->bit_rate = 0;  
codec_->time_base.den = 30;//幀率  
codec_->width = 1280;//視頻寬  
codec_->height = 720;//視頻高  
  
if(avcodec_open(codec_, videoCodec) >= 0)  
    pFrame_ = avcodec_alloc_frame();// Allocate video frame  
else  
    return -1;  
  • 下面是具體的解碼的代碼
AVPacket packet = {0};  
int frameFinished = dwBufsize;//這個(gè)是隨便填入數(shù)字缺亮,沒什么作用  
  
packet.data = pBuffer;//這里填入一個(gè)指向完整H264數(shù)據(jù)幀的指針  
packet.size = dwBufsize;//這個(gè)填入H264數(shù)據(jù)幀的大小  
  
//下面開始真正的解碼  
avcodec_decode_video2(codec_, pFrame_, &frameFinished, &packet);  
if(frameFinished)//成功解碼  
{  
    int picSize = codec_->height * codec_->width;  
    int newSize = picSize * 1.5;  
  
    //申請(qǐng)內(nèi)存  
    unsigned char *buf = new unsigned char[newSize];  
  
    int height = p->codec->height;  
    int width = p->codec->width;  
  
  
    //寫入數(shù)據(jù)  
    int a=0,i;   
    for (i=0; i<height; i++)   
    {   
        memcpy(buf+a,pFrame_->data[0] + i * pFrame_->linesize[0], width);   
        a+=width;   
    }   
    for (i=0; i<height/2; i++)   
    {   
        memcpy(buf+a,pFrame_->data[1] + i * pFrame_->linesize[1], width/2);   
        a+=width/2;   
    }   
    for (i=0; i<height/2; i++)   
    {   
        memcpy(buf+a,pFrame_->data[2] + i * pFrame_->linesize[2], width/2);   
        a+=width/2;   
    }  
  
    //===============  
    //到這里翁涤,buf里面已經(jīng)是yuv420p的數(shù)據(jù)了,可以對(duì)它做任何的處理拉萌踱!  
    //===============  
    delete [] buf;  
}  

不過我發(fā)現(xiàn)這樣解碼很耗cpu資源葵礼,我的Core2 E7400 2.8G的處理器,解碼1920X1080分辨率每秒30幀的視頻時(shí)虫蝶,CPU占用率能用到差不多50%。

PS:原來avcodec_decode_video2這個(gè)函數(shù)會(huì)修改codec_里面的參數(shù)的倦西,也就是說如果原來里面填的分別率是1280X720能真,運(yùn)行avcodec_decode_video2codec里面會(huì)變成實(shí)際視頻的分辨率。

[轉(zhuǎn)載自:https://www.cnblogs.com/lidabo/p/3326502.html]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扰柠,一起剝皮案震驚了整個(gè)濱河市粉铐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卤档,老刑警劉巖蝙泼,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異劝枣,居然都是意外死亡汤踏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門舔腾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溪胶,“玉大人,你說我怎么就攤上這事稳诚』┎保” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)才避。 經(jīng)常有香客問我橱夭,道長(zhǎng),這世上最難降的妖魔是什么桑逝? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任棘劣,我火速辦了婚禮,結(jié)果婚禮上肢娘,老公的妹妹穿的比我還像新娘呈础。我一直安慰自己,他們只是感情好橱健,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布而钞。 她就那樣靜靜地躺著,像睡著了一般拘荡。 火紅的嫁衣襯著肌膚如雪臼节。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天珊皿,我揣著相機(jī)與錄音网缝,去河邊找鬼。 笑死蟋定,一個(gè)胖子當(dāng)著我的面吹牛粉臊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驶兜,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼扼仲,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了抄淑?” 一聲冷哼從身側(cè)響起屠凶,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肆资,沒想到半個(gè)月后矗愧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郑原,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年唉韭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犯犁。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纽哥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栖秕,到底是詐尸還是另有隱情春塌,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站只壳,受9級(jí)特大地震影響俏拱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吼句,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一锅必、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惕艳,春花似錦搞隐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谁鳍,卻和暖如春癞季,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倘潜。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工绷柒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涮因。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓废睦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親养泡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗜湃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容