国产香港一级毛片在线看_人人看人人爽91视频_99久久er这里只有精品17_国产日产欧美a一级在线

您的位置:首頁(yè)>新聞 > 創(chuàng)業(yè) >

使用libavcodec將mp3音頻文件解碼為pcm音頻采樣數(shù)據(jù)【[mp3float @ 0x561c1ec49940] Header missing】

2023-06-25 06:04:09    來(lái)源:博客園

一.打開(kāi)和關(guān)閉輸入文件和輸出文件


(資料圖片僅供參考)

想要解決上面提到的問(wèn)題,我們需要對(duì)mp3文件的格式有個(gè)大致了解,為了方便講解,我這里畫了個(gè)示意圖:

ID3V2包含了作者,作曲,專輯等信息,長(zhǎng)度不固定,擴(kuò)展了 ID3V1 的信息量。
Frame一系列的幀,個(gè)數(shù)由文件大小和幀長(zhǎng)決定
ID3V1包含了作者,作曲,專輯等信息,長(zhǎng)度為 128BYTE

由于av_parser_parse2()這個(gè)方法的輸入必須是只包含音頻編碼數(shù)據(jù)的“裸流”,所以,我們?cè)谧x取mp3文件的時(shí)候,必須跳過(guò)ID3V2標(biāo)簽部分,從Frame開(kāi)始。所以,我們就必須知道ID3V2標(biāo)簽的總長(zhǎng)度。下面,我畫了個(gè)ID3V2標(biāo)簽頭的示意圖,方便講解。

File ID(3)Version(2)Flags(1)Size(4)

ID3V2標(biāo)簽頭固定為10byte,其中,Size部分的值是指除ID3V2標(biāo)簽頭之外數(shù)據(jù)的總長(zhǎng)度。需要注意的是,在實(shí)際計(jì)算長(zhǎng)度的時(shí)候,這4個(gè)字節(jié)的最高位需要舍棄,也就是說(shuō),只用到了28bit,即:0xxxxxxx0xxxxxxx0xxxxxxx0xxxxxxx

#define AUDIO_INBUF_SIZE 20480#define AUDIO_REFILL_THRESH 4096static FILE* input_file= nullptr;static FILE* output_file= nullptr;static const AVCodec* codec= nullptr;static AVCodecContext* codec_ctx= nullptr;static AVPacket* pkt= nullptr;static AVFrame* frame= nullptr;static AVCodecParserContext* parser= nullptr;static enum AVCodecID audio_codec_id;void close_input_output_files(){    if(input_file!= nullptr){        fclose(input_file);        input_file= nullptr;    }    if(output_file!= nullptr){        fclose(output_file);        output_file= nullptr;    }}int32_t open_input_output_files(const char* input_name,const char* output_name){    if(strlen(input_name)==0||strlen(output_name)==0){        cout<<"Error:empty input or output file name."<

二.音頻解碼器的初始化以及銷毀

int32_t init_audio_decoder(const char* audio_codec){    if(strcasecmp(audio_codec,"MP3")==0){        audio_codec_id=AV_CODEC_ID_MP3;        cout<<"Select codec id:MP3"<id);    if(!parser){        cerr<<"Error:could not init parser."<

三.解碼循環(huán)體

解碼循環(huán)體至少需要實(shí)現(xiàn)以下三個(gè)功能:

1.從輸入源中循環(huán)獲取碼流包

2.將當(dāng)前幀傳入解碼器,獲取輸出的音頻采樣數(shù)據(jù)

3.輸出解碼獲取的音頻采樣數(shù)據(jù)到輸出文件

從輸入源中讀取音頻數(shù)據(jù)到緩存: 

int32_t read_data_to_buf(uint8_t* buf,int32_t size,int32_t& out_size){    int32_t read_size=fread(buf,1,size,input_file);    if(read_size==0){        cerr<<"Error:read_data_to_buf failed."<

解碼循環(huán)體:  

int32_t end_of_input_file(){    return feof(input_file);}static int32_t decode_packet(bool flushing){    int32_t result=0;    result= avcodec_send_packet(codec_ctx,flushing? nullptr:pkt);    if(result<0){        cerr<<"Error:avcodec_send_packet failed,result:"<=0){        result= avcodec_receive_frame(codec_ctx,frame);        if(result==AVERROR(EAGAIN)||result==AVERROR_EOF){            return 1;        }        else if(result<0){            cerr<<"Error:avcodec_receive_frame failed."<nb_samples:"<<frame->nb_samples<<",frame->channels:"<<frame->channels<0){            result=av_parser_parse2(parser,codec_ctx,&pkt->data,&pkt->size,data,data_size,AV_NOPTS_VALUE,AV_NOPTS_VALUE,0);            if(result<0){                cerr<<"Error:av_parser_parse2 failed."<size){                cout<<"Parsed packet size:"<size< 0)                    data_size += len;            }        }    }    decode_packet(true);    return 0;}

輸出解碼的音頻采樣數(shù)據(jù):  

int32_t write_samples_to_pcm(AVFrame* frame,AVCodecContext* codec_ctx){    int data_size= av_get_bytes_per_sample(codec_ctx->sample_fmt);    if(data_size<0){        cerr<<"Error:failed to calculate data size."<channels;ch++){            fwrite(frame->data[ch]+i*data_size,1,data_size,output_file);        }    }    return 0;}

最終,main函數(shù)的實(shí)現(xiàn)如下:

int main(){    const char* input_file_name="../input.mp3";    const char* output_file_name="../output.pcm";    const char* codec_name="MP3";    int32_t result= open_input_output_files(input_file_name,output_file_name);    if(result<0){        return result;    }    result=init_audio_decoder(codec_name);    if(result<0){        return result;    }    result=audio_decoding();    if(result<0){        return result;    }    destroy_audio_decoder();    close_input_output_files();    return 0;}

解碼完成后,可以使用ffplay播放output.pcm文件:

ffplay -ar 44100 -ar 2 -f f32le -i output.pcm

關(guān)鍵詞:

相關(guān)閱讀

国产香港一级毛片在线看_人人看人人爽91视频_99久久er这里只有精品17_国产日产欧美a一级在线

      欧美伦理影视网| 1000部国产精品成人观看| 一区二区三区四区视频精品免费 | 国产午夜三级一区二区三| 一区二区高清视频在线观看| 国产一区二区在线视频| 久久久九九九九| 色网站国产精品| 久久美女艺术照精彩视频福利播放| 亚洲一卡二卡三卡四卡| 国产福利一区二区三区视频在线| 亚洲三级理论片| 欧美一级日韩免费不卡| 一区二区三区四区在线免费观看| 成人小视频免费在线观看| 亚洲靠逼com| 精品久久久久久久人人人人传媒 | 一区二区三区日韩| 欧美xxxx老人做受| 天堂va蜜桃一区二区三区| 久久综合久久综合亚洲| 日本韩国欧美一区二区三区| 国产精品久久久久久久久晋中| 激情文学综合网| 亚洲人成7777| 久久综合狠狠综合久久激情 | 亚洲成av人在线观看| 久久男人中文字幕资源站| 日本va欧美va欧美va精品| 国产目拍亚洲精品99久久精品| 欧美日韩成人综合| 亚洲一区二区成人在线观看| 91女厕偷拍女厕偷拍高清| 91福利视频在线| 亚洲精品乱码久久久久久| 99热精品国产| 欧美三区在线视频| 亚洲一二三四区不卡| 久久久久一区二区三区四区| 欧美乱妇一区二区三区不卡视频| 亚洲午夜成aⅴ人片| 久久婷婷色综合| 777亚洲妇女| 免费视频一区二区| 亚洲男人的天堂在线观看| 久久久亚洲国产美女国产盗摄 | 美国毛片一区二区三区| 1024精品合集| 日本一区二区成人在线| 成人在线视频首页| 欧美综合亚洲图片综合区| 亚洲综合一区在线| 亚洲国产高清不卡| 亚洲精品一区二区精华| 国产在线精品一区二区不卡了| 亚洲综合色丁香婷婷六月图片| 国产精品免费看片| 99免费精品视频| 欧美男同性恋视频网站| 日韩不卡一区二区三区| 一区二区三区影院| 国产精品国产三级国产有无不卡| 99久久精品国产一区二区三区| 欧美日韩激情一区二区| 日本少妇一区二区| 亚洲第一久久影院| 亚洲一区在线免费观看| 国产精品免费久久| 中文字幕欧美激情一区| av亚洲产国偷v产偷v自拍| 欧美一区在线视频| 九色综合狠狠综合久久| 婷婷国产在线综合| 亚洲不卡一区二区三区| 中文字幕字幕中文在线中不卡视频| 欧美激情自拍偷拍| 91在线无精精品入口| 日韩一区二区三区av| 韩国成人精品a∨在线观看| 色婷婷av一区二区三区gif | 国产精品入口麻豆九色| 久久女同互慰一区二区三区| 久久先锋影音av| 不卡视频一二三四| 日韩欧美一二三四区| 国产东北露脸精品视频| 777奇米四色成人影色区| 黑人巨大精品欧美黑白配亚洲| 在线看日韩精品电影| 日本不卡不码高清免费观看| 无吗不卡中文字幕| 丝袜亚洲另类丝袜在线| 亚洲午夜久久久久久久久久久 | 国产精品免费网站在线观看| 国产丝袜欧美中文另类| 国产色综合久久| 国产日韩欧美一区二区三区综合 | 日韩va亚洲va欧美va久久| 午夜影院久久久| 日韩成人dvd| 欧美三级在线看| 国产一区二区三区四| 91精品在线免费| jlzzjlzz亚洲日本少妇| 欧美精品一区二区三区四区 | 亚洲桃色在线一区| 一区二区三区毛片| 亚洲午夜av在线| 日本不卡一区二区三区| 欧美无砖砖区免费| 国产精品系列在线观看| 日韩精品一区二区三区在线播放 | 亚洲一区二区免费视频| 视频一区视频二区中文字幕| 91久久奴性调教| 国产一区二区三区精品欧美日韩一区二区三区 | 国产欧美日韩不卡| 国产精品久久久久久久蜜臀| 一区二区三区在线高清| 亚洲图片一区二区| 老司机免费视频一区二区三区| 在线电影国产精品| 99久久精品一区| 中文字幕第一区二区| 最新国产成人在线观看| 日日骚欧美日韩| 欧美精选在线播放| 99久久久久久| ...xxx性欧美| 亚洲一区二区3| 久草中文综合在线| 欧美电影免费观看高清完整版在| 久久久精品欧美丰满| 亚洲欧美一区二区三区孕妇| 亚洲五码中文字幕| 国产一区二区视频在线| 久久无码av三级| 国产精品福利电影一区二区三区四区| 亚洲一级不卡视频| 欧美色手机在线观看| av电影在线不卡| 亚洲男人的天堂在线aⅴ视频| 亚洲va欧美va国产va天堂影院| 国产一区二区三区在线观看免费| 精品国产电影一区二区| 国产精品高潮呻吟| 蜜臀av一区二区在线免费观看| 欧美一区二区高清| 国产无人区一区二区三区| 亚洲二区在线视频| 69堂成人精品免费视频| 国产日产欧美一区| 午夜国产精品影院在线观看| 91精品国产综合久久精品app| 国产日韩欧美电影| 视频一区在线播放| 欧美xxxxx牲另类人与| 亚洲视频每日更新| 精品一区中文字幕| 国产欧美日韩激情| 亚洲国产欧美在线| 豆国产96在线|亚洲| 亚洲日本中文字幕区| 欧美日韩国产不卡| 国产欧美1区2区3区| 免费观看在线色综合| 久久综合一区二区| 亚洲一区二区三区三| 成人午夜精品在线| 亚洲精品国产第一综合99久久| 欧美三区在线视频| 国产欧美日本一区二区三区| 日本中文一区二区三区| 久久女同互慰一区二区三区| 亚洲国产中文字幕在线视频综合| 国产成人免费在线| 亚洲精品乱码久久久久久日本蜜臀| 欧美日韩不卡一区| 中文字幕免费不卡| 经典三级视频一区| 亚洲欧洲精品一区二区三区不卡| 欧美日韩综合不卡| 国产精品午夜在线观看| 国产一区二区三区免费观看 | 亚洲欧洲美洲综合色网| 国产乱理伦片在线观看夜一区| 亚洲欧美另类在线| 欧美一区中文字幕| 亚洲主播在线观看| 久久久久久麻豆| 九九国产精品视频| 亚洲欧美日韩国产综合| 日韩欧美在线网站| 亚洲高清视频的网址| 久久久久久久av麻豆果冻| 久久精品国产免费看久久精品| 自拍偷在线精品自拍偷无码专区 | 亚洲综合色在线| 2021国产精品久久精品| 在线影视一区二区三区|