• 大小: 3.32MB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-01-31
  • 语言: 其他
  • 标签: ffmpeg4.0.2  aac  Qt5.8.0  

资源简介

win10 x64bit环境做的一个调用新版ffmpeg4.0.2版本的pcm转aac编码器,解决新版ffmpeg不能直接编码成aac问题。

资源截图

代码片段和文件信息

#include “codec.h“
#include “ui_codec.h“

codec::codec(QWidget *parent) :
    QMainWindow(parent)
    ui(new Ui::codec)
{
    ui->setupUi(this);

    openAACFile();
}

codec::~codec()
{
    delete ui;
}

int codec::flush_encoder(AVFormatContext *fctxunsigned int astindex){
    int ret;
    int got_afr;
    AVPacket ec_apkt;
    if (!(fctx->streams[astindex]->codec->codec->capabilities & AV_CODEC_CAP_DELAY))
        return 0;
    while (1) {
        ec_apkt.data = nullptr;
        ec_apkt.size = 0;
        av_init_packet(&ec_apkt);
        ret = avcodec_encode_audio2 (fctx->streams[astindex]->codec &ec_apkt
            nullptr &got_afr);
        av_frame_free(nullptr);
        if (ret < 0)
            break;
        if (!got_afr){
            ret = 0;
            break;
        }
        printf(“Flush Encoder: Succeed to encode 1 aac frame!\taSize:%5d\n“ec_apkt.size);
        // Mux encoded aac frame
        ret = av_write_frame(fctx &ec_apkt);
        if (ret < 0)
            cout << “Write 1 aac frame!“ << endl;
            break;
    }
    return ret;
}

void codec::AddADTS(int pktLen)
{
    //int m_PcmSampleRatem_PcmChannel;
    AVCodecContext *aacctx;

    char m_pOutData[1024 * 10];
    int profile = 1; // AAC LC
    int freqIdx = 0xb; // 44.1KHz
    int chanCfg = aacctx->channels; //m_PcmChannel; // CPE

    if (aacctx->bit_rate == 96000)
    {
        freqIdx = 0x00;
    }
    else if(aacctx->bit_rate == 88200)
    {
        freqIdx = 0x01;
    }
    else if (aacctx->bit_rate == 64000)
    {
        freqIdx = 0x02;
    }
    else if (aacctx->bit_rate == 48000)
    {
        freqIdx = 0x03;
    }
    else if (aacctx->bit_rate == 44100)
    {
        freqIdx = 0x04;
    }
    else if (aacctx->bit_rate == 32000)
    {
        freqIdx = 0x05;
    }
    else if (aacctx->bit_rate == 24000)
    {
        freqIdx = 0x06;
    }
    else if (aacctx->bit_rate == 22050)
    {
        freqIdx = 0x07;
    }
    else if (aacctx->bit_rate == 16000)
    {
        freqIdx = 0x08;
    }
    else if (aacctx->bit_rate == 12000)
    {
        freqIdx = 0x09;
    }
    else if (aacctx->bit_rate == 11025)
    {
        freqIdx = 0x0a;
    }
    else if (aacctx->bit_rate == 8000)
    {
        freqIdx = 0x0b;
    }
    else if (aacctx->bit_rate == 7350)
    {
        freqIdx = 0xc;
    }
    // fill in ADTS data
    m_pOutData[0] = 0xFF;
    m_pOutData[1] = 0xF1;
    m_pOutData[2] = ((profile) << 6) + (freqIdx << 2) + (chanCfg >> 2);
    m_pOutData[3] = (((chanCfg & 3) << 6) + (pktLen >> 11));
    m_pOutData[4] = ((pktLen & 0x7FF) >> 3);
    m_pOutData[5] = (((pktLen & 7) << 5) + 0x1F);
    m_pOutData[6] = 0xFC;
}

int codec::openAACFile()
{
    AVFormatContext* aacfctx = nullptr;
    AVOutputFormat* fmt = nullptr;
    AVStream* aacSt = nullptr;
    AVCodecContext* aacctx = nullptr;
    AVCodec* aacc;
    AVframe* aacfr = nullptr;
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-11-29 09:21  aac\
     文件        1621  2018-11-29 09:18  aac\aac.pro
     文件       23472  2018-11-29 09:14  aac\aac.pro.user
     文件        7549  2018-11-29 09:20  aac\codec.cpp
     文件        1393  2018-11-29 09:21  aac\codec.h
     文件         639  2018-11-29 09:14  aac\codec.ui
     目录           0  2018-11-29 08:20  aac\ff4.0.2x32\
     文件       35823  2018-07-25 16:07  aac\ff4.0.2x32\LICENSE.txt
     文件        4480  2018-07-25 16:07  aac\ff4.0.2x32\README.txt
     目录           0  2018-11-29 08:20  aac\ff4.0.2x32\examples\
     文件        1970  2018-07-25 16:07  aac\ff4.0.2x32\examples\Makefile
     文件         888  2018-07-25 16:07  aac\ff4.0.2x32\examples\README
     文件        5551  2018-07-25 16:07  aac\ff4.0.2x32\examples\avio_dir_cmd.c
     文件        4015  2018-07-25 16:07  aac\ff4.0.2x32\examples\avio_reading.c
     文件        5349  2018-07-25 16:07  aac\ff4.0.2x32\examples\decode_audio.c
     文件        5290  2018-07-25 16:07  aac\ff4.0.2x32\examples\decode_video.c
     文件       14568  2018-07-25 16:07  aac\ff4.0.2x32\examples\demuxing_decoding.c
     文件        6579  2018-07-25 16:07  aac\ff4.0.2x32\examples\encode_audio.c
     文件        5544  2018-07-25 16:07  aac\ff4.0.2x32\examples\encode_video.c
     文件        5641  2018-07-25 16:07  aac\ff4.0.2x32\examples\extract_mvs.c
     文件       11824  2018-07-25 16:07  aac\ff4.0.2x32\examples\filter_audio.c
     文件       10266  2018-07-25 16:07  aac\ff4.0.2x32\examples\filtering_audio.c
     文件        9675  2018-07-25 16:07  aac\ff4.0.2x32\examples\filtering_video.c
     文件        5254  2018-07-25 16:07  aac\ff4.0.2x32\examples\http_multiclient.c
     文件        7715  2018-07-25 16:07  aac\ff4.0.2x32\examples\hw_decode.c
     文件        1918  2018-07-25 16:07  aac\ff4.0.2x32\examples\metadata.c
     文件       21513  2018-07-25 16:07  aac\ff4.0.2x32\examples\muxing.c
     文件        8239  2018-07-25 16:07  aac\ff4.0.2x32\examples\qsvdec.c
     文件        6388  2018-07-25 16:07  aac\ff4.0.2x32\examples\remuxing.c
     文件        8005  2018-07-25 16:07  aac\ff4.0.2x32\examples\resampling_audio.c
     文件        5028  2018-07-25 16:07  aac\ff4.0.2x32\examples\scaling_video.c
............此处省略241个文件信息

评论

共有 条评论