ChinaFFmpeg

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12167|回复: 1

[源码] ffmpeg 编码pcm to ulaw

[复制链接]
发表于 2014-3-18 19:40:30 | 显示全部楼层 |阅读模式
小弟最近在学习ffmpeg音频的编解码,在用pcm编码为ulaw的时候遇到了下面的问题,下面是我的源码
    avcodec *codec = avcodec_find_encoder(AV_CODEC_ID_PCM_MULAW);

    avCodecContext *c = avcodec_alloc_context3(codec);

    c->bit_rate = 128000;
    c->codec_type = AVMEDIA_TYPE_AUDIO;
    c->codec_id = AV_CODEC_ID_PCM_MULAW;
    c->sample_fmt = AV_SAMPLE_FMT_S16;
    c->channels = 1;
    c->sample_rate = 8000;
    c->channel_layout = 1 ;

    if(avcodec_open2(c, codec, NULL)<0)
   {
        error();
   }

   AVFrame *frame = av_frame_alloc();
   frame->nb_samples = c->frame_size;
   frame->format = c->sample_fmt;
   frame->channel_layout = c->channel_layout;

   int buffer_size = av_samples_get_buffer_size(NULL, c->channels, c->frame_size, c->sample_fmt, 0);

   samples = av_malloc(buffer_size);

   int ret = avcodec_fill_audio_frame(c.frame, c->channels, c->sample_fmt, (const uint8_t *)samples, buffer_size, 0);

    av_init_packet(&packet);

     while(!feof(fp))
    {
        packet.data = NULL;
        packet.size = 0;
        fread(samples, buffer_size, 1, fp);
         ret = avcodec_encode_audio2(c.context, &packet, c.frame, &got_output);


         if(got_output)
         {
             fwrite(packet.data, 1, packet.size, fp);
         }
    }
大概就是这样,一些出错处理和初始化略过不表,现在遇到的问题就是avcodec_open2之后的frame_size为0.导致av_samples_get_buffer_size失败
然后我自己设置buffer_size = sample_rate ×16/2×channels;结果编码出来的格式也不对,请大家教教我应该怎么做,然后这个frame_size是否就是一个pcm sample的大小?多谢,望回复!
回复

使用道具 举报

 楼主| 发表于 2014-3-24 16:40:59 | 显示全部楼层
没人回复我啊,我自己回复一下,那个frame_size为0的问题找到了,是因为pcm.c的encode_init里设置的就是0,然后网上找不到编码pcmu的源码例子。我就想使用ffmpeg 命令行转换成pcmu。然后我再跟踪看它怎么设置编码器的。我使用的命令如下./ffmpeg -ar 8000 -f s16le -i xxx.pcm -acodec pcm_mulaw -f mulaw -ar 8000 -ac 1 -ab 64000 output.ulaw
ffmpeg-2.1.4的版本,linux下可以使用,问题是生成的output.ulaw里面还有原来内容的4边内容,比如原来的pcm里是说了一句话,现在的output.ulaw打开是说了4边那句话,不知道是什么原因造成的,求大神解救.下面我把原始pcm.和编码后的上传上来。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Archiver|ChinaFFmpeg

GMT+8, 2025-4-3 23:56 , Processed in 0.082136 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表