解决方案 »

  1.   

    我看官方例子的out_count 是根据in _count  用av_rescale_rnd函数来计算的,其实我的应该都不用 因为我的pcm的sample rate是44100 channels 为1  我的aac的也是44100 channels也为1  唯一的不同是pcm的sampe fmt 是AV_SAMPLE_FMT_S16 而aac的是AV_SAMPLE_FMT_FLTP  ,可是重点是我怎么求得in _count啊 ffmpeg示例直接就是1024 然后根据这个生成的源数据。
      

  2.   

    还有stream的time_base 和 AVCodecContext 的time_base又是什么关系
      

  3.   

    我也在在研究这个问题,好象是说in_count=AVCodecContext.frame_size的。
    就是下面这个 ,我也不是很明白。而且我用vorbis编码的话发现这个值很少,只有64src_nb_samples = c->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE ?
            10000 : c->frame_size;
      

  4.   

            dst_nb_samples = av_rescale_rnd(swr_get_delay(swr_ctx, c->sample_rate) + src_nb_samples,
                                            c->sample_rate, c->sample_rate, AV_ROUND_UP);
            if (dst_nb_samples > max_dst_nb_samples) {
                av_free(dst_samples_data[0]);
                ret = av_samples_alloc(dst_samples_data, &dst_samples_linesize, c->channels,
                                       dst_nb_samples, c->sample_fmt, 0);
                if (ret < 0)
                    exit(1);
                max_dst_nb_samples = dst_nb_samples;
                dst_samples_size = av_samples_get_buffer_size(NULL, c->channels, dst_nb_samples,
                                                              c->sample_fmt, 0);
            }        /* convert to destination format */
            ret = swr_convert(swr_ctx,
                              dst_samples_data, dst_nb_samples,
                              (const uint8_t **)src_samples_data, src_nb_samples);
    自带demo,转出来是杂音
      

  5.   


    我最后也是用的这个demo的自己生成的音频测试的,最后同事从底层硬编码拿的aac数据,自己加头就可以了
      

  6.   


    如果知道codecContext,in_count是可以直接从codecContext->frame_size取的,我的那个是从android层传下来的数据,没有codecContext