CoderMJLee/audio-video-dev-tutorial

mac环境下录音失败

wickey-w opened this issue · 0 comments

版本
macOS Big Sur 11.5.1
ffmpeg:5.0
qt: 6.2.3
在08_record_audio课堂代码下运行,out.pcm文件大小是0字节

void MainWindow::on_audioButton_clicked() {
qDebug() << "开始录音" << QThread::currentThread();

// 获取输入格式对象
const AVInputFormat *fmt = av_find_input_format(FMT_NAME);
if (!fmt) {
    qDebug() << "获取输入格式对象失败" << FMT_NAME;
    return;
}

// 格式上下文(将来可以利用上下文操作设备)
AVFormatContext *ctx = nullptr;
// 打开设备
int ret = avformat_open_input(&ctx, DEVICE_NAME, fmt, nullptr);
if (ret < 0) {
    char errbuf[1024];
    av_strerror(ret, errbuf, sizeof (errbuf));
    qDebug() << "打开设备失败" << errbuf;
    return;
}

// 文件名
QFile file(FILENAME);

// 打开文件
// WriteOnly:只写模式。如果文件不存在,就创建文件;如果文件存在,就会清空文件内容
if (!file.open(QFile::WriteOnly)) {
    qDebug() << "文件打开失败" << FILENAME;

    // 关闭设备
    avformat_close_input(&ctx);
    return;
}

// 采集的次数
int count = 50;

// 数据包
AVPacket pkt;
// 不断采集数据
while (count-- > 0 && av_read_frame(ctx, &pkt) == 0) {
    // 将数据写入文件
    file.write((const char *) pkt.data, pkt.size);
}

// 释放资源
// 关闭文件
file.close();

// 关闭设备
avformat_close_input(&ctx);

qDebug() << "结束录音" << QThread::currentThread();

}

在debug模式运行下,应用程序输出如下
2022-03-19 19:56:58.461667+0800 08_record_audio[65945:4796567] 开始录音 QThread(0x10962a2e0)
2022-03-19 19:56:58.513056+0800 08_record_audio[65945:4796567] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x11a5674f0> 30010C1C-93BF-11D8-8B5B-000A95AF9C6A
2022-03-19 19:56:58.577507+0800 08_record_audio[65945:4796567] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x11a5674f0> 30010C1C-93BF-11D8-8B5B-000A95AF9C6A
2022-03-19 19:56:58.583072+0800 08_record_audio[65945:4796567] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x11a56b870> F8BB1C28-BAE8-11D6-9C31-00039315CD46
2022-03-19 19:56:59.812602+0800 08_record_audio[65945:4796567] 结束录音 QThread(0x10962a2e0)