请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

av_read_frame速度慢

遇到个奇怪的问题,av_read_frame速度很慢,平均1s中才能返回一个数据,断点排查发现经常是一帧正常一帧-35,可能是什么原因呀?用ffmpeg命令直接录制和播放没问题,代码如下:

void rec_audio(){
    
    int ret = 0;
    char errors[1024] = {0, };
    
    AVFormatContext *fmt_ctx = NULL;
    AVDictionary *optins = NULL;
    
    // 数据包
    int count = 0;
    AVPacket pkt;
    
    // [[video device]:[audio device]]
    char *devicename = ":1"; // 用了耳机当做输入源,之前用本机 :0 试过,也是一样的
    
    // 设置日志级别
    av_log_set_level(AV_LOG_DEBUG);
    
    // 注册所有设备
    avdevice_register_all();
    
    // 获取格式
    const AVInputFormat *iformat = av_find_input_format("avfoundation");
    
    if ((ret = avformat_open_input(&fmt_ctx, devicename, iformat, &optins)) < 0) {
        av_strerror(ret, errors, 1024);
        av_log(NULL, AV_LOG_ERROR, "Failed to open audio device, [%d]%s\n", ret, errors);
        // 释放
        avformat_close_input(&fmt_ctx);
        return;
    }
    
    // 创建文件
    char *out = "/Users/like/Downloads/audio.pcm";
    FILE *outfile = fopen(out, "wb+");
    
    // 读数据
    av_init_packet(&pkt);
    while (count < 20) {
        ret = av_read_frame(fmt_ctx, &pkt);
        if(ret == -35) {
            av_log(NULL, AV_LOG_DEBUG, "please sleep\n");
            sleep(1);
            continue;
        }
        if(ret < 0){
            break;
        }
        count++;
        av_log(NULL, AV_LOG_INFO, "packet size is %d(%p), count=%d\n", pkt.size, pkt.data, count);
        // 写文件
        fwrite(pkt.data, pkt.size, 1, outfile);
        fflush(outfile);
        // 释放
        av_packet_unref(&pkt);
    }
    
    // 关闭文件
    fclose(outfile);
    
    // 释放
    avformat_close_input(&fmt_ctx);
    
    printf("Read finish, count is %d\n", count);
    if (ret != 0) {
        av_strerror(ret, errors, 1024);
        av_log(NULL, AV_LOG_ERROR, "Something error, [%d]%s\n", ret, errors);
        return;
    }
    
    return;
}

正在回答 回答被采纳积分+3

3回答

戴着眼镜的平头哥 2023-06-10 20:19:57

解决了,不知道楼主是不是这样解决的

https://coding.imooc.com/learn/myrelated?cid=415&cate=myquestion

0 回复 有任何疑惑可以回复我~
  • 老铁 你这个是怎么解决的
    回复 有任何疑惑可以回复我~ 2023-09-08 20:51:18
戴着眼镜的平头哥 2023-06-10 13:32:21

遇到了相同的问题,请问怎么解决的?

0 回复 有任何疑惑可以回复我~
提问者 快乐的兰那罗 2022-09-23 16:42:23

问题已解决

0 回复 有任何疑惑可以回复我~
  • 问题的原因是什么?怎么解决的?我也遇到了同样的问题
    回复 有任何疑惑可以回复我~ 2023-02-15 00:34:08
  • 解决了吗?
    回复 有任何疑惑可以回复我~ 2023-02-15 23:01:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信