JHHK

欢迎来到我的个人网站
行者常至 为者常成

【MJ】08_音频录制02_编程

参考:【秒懂音视频开发】08_音频录制02_编程

本文是上面文章的摘要,只用于自己快速浏览.

目录

通过编程录音

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错误


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.