首页| 论坛| 消息

标题:Qt音视频开发22-音频播放QAudioOutput
作者:liudianwu
日期:2023-03-10 08:33
内容:

## 一、前言
以前一直以为只有Qt5以后才有QAudioOutput播放音频,其实从Qt4.6开始就有,在Qt6中变成了QAudioSink,功能一样。用QAudioOutput播放音频pcm数据极其方便,只需要指定音频播放设备(可能电脑上有多个音频输出设备),设置音频数据格式(采样率、通道数量、比特率等)。当ffmpeg采集到音频数据后,就是原始的pcm格式数据,直接发给QAudioOutput播放就行,这样就不需要sdl,sdl可以很方便的用来播放音视频,但是和Qt结合显示不大方便,嵌入到Qt界面中比较繁琐,所以最后采用的策略是视频用qopenglwidget或者painter绘制,音频用qaudiooutput播放,这样就只需要依赖ffmpeg即可,打完收工完美。
## 二、效果图


## 三、体验地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 体验地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:bin_video_demo/bin_linux_video。
## 四、相关代码
```cpp
void AudioPlayer::openAudioInput(int sampleRate, int channelCount, int sampleSize)
{
this->openAudioInput("", sampleRate, channelCount, sampleSize);
}
void AudioPlayer::openAudioInput(const QString &deviceName, int sampleRate, int channelCount, int sampleSize)
{
#ifdef multimedia
//先关闭设备
this->closeAudioInput();
//初始化音频格式
QAudioFormat format;
AudioHelper::initAudioFormat(format, sampleRate, channelCount, sampleSize);
//找到指定设备并实例化音频类(为空则采用默认设备)
if (deviceName.isEmpty()) {
audioInput = new QAudioInputx(format, this);
&nbs ..

回复 发表
主题 版块