QT 录制音频

音频的推流和封装与视频是类似的,主要在于录制和重采样部分。

QT再window的安装可以参考博客: vs2017 配置QT环境

主要是在创建QT项目的时候加入 multimedia库,利用这个库用来录制音频的。

QAudioFormat

这个类是用来设置录制音频的参数的,如下:

QAudioFormat fmt;
	fmt.setSampleRate(sampleRate);// 采样率, 一秒采集音频样本数量,常设置为44100
	fmt.setChannelCount(channels);  // 音频通道数
	fmt.setSampleSize(16); //一个音频数据大小
	fmt.setCodec("audio/pcm"); //编码方式,大多声卡只支持pcm,也可以通过获取参数得到声卡支持参数
	fmt.setByteOrder(QAudioFormat::LittleEndian); // 小端 存储还是大端存储
	fmt.setSampleType(QAudioFormat::UnSignedInt); // 数据类型,对应的是16位

下图位大端存储和小端存储区别

QAudioDeviceInfo

音频设备信息,通产用来判断是否有音频设备。

QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();
	if (!info.isFormatSupported(fmt))// 判断是否支持配置
	{
		cout << "Audio format not support!" << endl;
		fmt = info.nearestFormat(fmt);// 如果不支持,取最近的配置方法。
	}

QAudioInput

QT自带的音频输入类,将上面设置的格式信息给它,完成音频输入设备初始化。

QAudioInput *input = new QAudioInput(fmt);

//开始录制音频
QIODevice *io = input->start();


//一次读取一帧音频 input->bytesReady() 表示是准备好了多少数据(不是很准确)
if (input->bytesReady() < readSize)
{
	QThread::msleep(1);
	continue;
}

QIODevice 

输入QAudioInput 开始录音后返回的device,根据device来读取数据到 buffer

while (size != readSize)
		{
			int len = io->read(buf + size, readSize - size);
			if (len < 0)break;
			size += len;
		}

完整demo实现了录制音频和rtmp推流操作。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值