亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【金秋打卡】第20天 創建 AAC 編碼器

標簽:
Android

课程名称音视频基础+ffmpeg原理 入门音视频技术开发
课程章节:【实战】音频编码
课程讲师李超

课程内容

ffmpeg编码的过程包括:

  • 创建编码器;
  • 创建上下文;
  • 打开编码器;
  • 送数据给编码器;
  • 编码;
  • 释放资源

ffmpeg 编码过程中重要的 API。

avcodec_find_encoder()      #创建编码器 
avcodec_alloc_context3()    #创建上下文
avcodec_open2()             #打开编码器
avcodec_send_frame()        #将数据送给编码器 
avcodec_receive_packet()    #获取编码后的数据

从查找编码器,分配上下文,设置上下文参数,到打开编码器的完整代码。

AVCodecContext* open_coder(){
    //查找编码器
    int ret;
    char error[1024] = {0, };
    //libfdk_aac音频编码的ID或者名字必须跟 sample_fmt一致才可以,否则ffmpeg会报错。
    AVCodec *codec = avcodec_find_encoder_by_name("libfdk_aac");  
    //创建上下文
    AVCodecContext *codec_ctx = avcodec_alloc_context3(codec);
    codec_ctx->sample_fmt = AV_SAMPLE_FMT_S16;      //输入音频的采样率
    codec_ctx->channel_layout = AV_CH_LAYOUT_STEREO; //输入音频的通道布局
    codec_ctx->channels = 2; //输入音频的通道个数
    codec_ctx->sample_rate = 44100; //输入音频的采样率
    //bitrate 和profile互斥,bit_rate设置为0后,才会查找profile的值
    codec_ctx->bit_rate = 0; //AAC 128K AAC HE 64K AAC HE V2 32K
    codec_ctx->profile = FF_PROFILE_AAC_HE_V2;
    
    //打开编码器
    if((ret = avcodec_open2(codec_ctx, codec, NULL)) < 0){
        av_strerror(ret, error, 1024);
        printf(stderr, "Failed to open audio devices, [%d] %s\n", ret, error);
        return  NULL;
    }
    return codec_ctx;
}

接下来就应该将数据输入编码器,这里有两个结构体,AVFrame,AVPacket。其中AVFrame是没有编码的数据,AVPacket是编码后的数据。所以就是将AVFrame输入编码器进行编码,然后得到AVPacket数据,然后将AVPacket的保存进文件就是AAC数据了。
图片描述

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
移動開發工程師
手記
粉絲
12
獲贊與收藏
17

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消