天天看點

【Android音視訊開發】C++多線程解碼音頻資料

FFmpeg在C++子線程中解碼音頻資料,得到資料包AVPacket

AVPacket:存放原始音頻/視訊的壓縮包。

【Android音視訊開發】C++多線程解碼音頻資料

C++多線程解碼音頻資料

1、注冊解碼器并初始化網絡

av_register_all();

avformat_network_init();

2、打開檔案或網絡流

AVFormatContext *pFormatCtx = avformat_alloc_context();

avformat_open_input(&pFormatCtx, url, NULL, NULL);

3、擷取流資訊

avformat_find_stream_info(pFormatCtx, NULL)

4、擷取音頻流

pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO

5、擷取解碼器

AVCodec *dec = avcodec_find_decoder(audio->codecpar->codec_id);

6、利用解碼器建立解碼器上下文

AVCodecContext *avCodecContext = avcodec_alloc_context3(dec); avcodec_parameters_to_context(audio->avCodecContext, audio->codecpar)

7、打開解碼器

avcodec_open2(audio->avCodecContext, dec, 0)