本文是上面文章的摘要,只用于自己快速浏览.
目录
通过编程录音
1. 权限申请
在Mac平台,有2个注意点:
需要在Info.plist中添加麦克风的使用说明,申请麦克风的使用权限
使用Debug模式运行程序
2. 常用的四个库
// 设备相关API
#include <libavdevice/avdevice.h>
// 格式相关API
#include <libavformat/avformat.h>
// 工具相关API(比如错误处理)
#include <libavutil/avutil.h>
// 编码相关API
#include <libavcodec/avcodec.h>
3. 开发录音功能的主要步骤是:
1.注册设备
//初始化libavdevice并注册所有输入和输出设备
avdevice_register_all();
2.获取输入格式对象
//获取输入格式对象,后面需要利用输入格式对象打开设备
AVInputFormat *fmt = av_find_input_format(FMT_NAME)
3.打开设备
// 格式上下文(后面通过格式上下文操作设备)
AVFormatContext *ctx = nullptr;
// 打开设备
int ret = avformat_open_input(&ctx, DEVICE_NAME, fmt, nullptr);
4.采集数据
AVPacket *pkt = av_packet_alloc();
// 从设备中采集数据,返回值为0,代表采集数据成功
ret = av_read_frame(ctx, pkt);
5.释放资源
// 关闭文件
file.close();
// 释放资源
av_packet_free(&pkt);
// 关闭设备
avformat_close_input(&ctx);
4. 从上下文中可以获取录音设备的相关参数
// 获取输入流
AVStream *stream = ctx->streams[0];
// 获取音频参数
AVCodecParameters *params = stream->codecpar;
多线程
录音属于耗时操作,为了避免阻塞主线程,最好在子线程中进行录音操作。这里创建了一个继承自QThread的线程类,线程一旦启动(start),就会自动调用run函数。
存在问题:程序启动控制台会打印 35错误
行者常至,为者常成!