QT 6.6.0 中基于FFmpeg + SDL2 + SDL2_mixer实现音频录音(过程详解)

B站视频讲解

GitHub源码地址

目录

前置知识点

查看电脑可用的视频和音频设备: 

PCM音频格式转换为mp3或者wav格式:

AVCodecContext编码上下文参数设置:

av_read_frame(AVFormatContext *s, AVPacket *pkt);


QT初学案例教程
QT6.6.0实现打开电脑摄像头或其他的外接摄像头(实现拍照功能)
QT6.6.0实现简单的录音器
QT6.6.0实现一个简单的视频和音频播放器
QT6.6.0实现简单的视频录制(包含语音录制)器
QT6.6.0关于QMediaMetaData功能以及列子说明使用方法
QT6.6.0实现QtCamera功能(拍照,录像以及图像和视频的相关配置)
T6.6.0实现更好的视频播放器(前期改进)
QT6.6.0实现图表如饼图,柱状图,散点图以及盒图等的基本使用
QT6.6.0实现客户端Socket编程以及socket测试软件通信
QT6.6.0 实现服务端Server和多个客户端Client通信以及socket测试软件通信
QT6.6.0 实现QNetworkAccessManager的基本应用以及其拓展使用
QT6.6.0 实现服务端Server和多个客户端Client互相发送文件信息
QT6.6.0和QT6.0以下的版本实现FTP文件上传和下载(过程详解)
QT6.6.0实现QNetworkInterface网络接口,QHostAddress网络地址IP以及域名解析等相关信息查询。
QT6.6.0基于QTcpSocket和QTcpServer实现多个客户端群聊
QT6.6.0实现基于UDP协议的简单通信(过程详解)
QT 6.6.0基于UDP协议实现广播和多播机制(过程详解)
QT 6.6.0基于UDP协议实现群聊功能(过程详解)
QT 6.6.0中OpenCV两种环境的配置方法以及基本使用例子
QT 6.6.0 中基于OpenCV的图像变换以及基于鼠标点击移动事件的图像绘制
QT 6.6.0 基于OpenCV对图像进行旋转,缩放和裁剪等操作
QT 6.6.0 基于OpenCV实现图像风格的改变(add和subtract)
PyTorch 训练之后的网络模型.pth转.onnx文件并对图像进行预测
QT 6.6.0 基于OpenCV加载.pth模型文件转换之后的ONNX模型文件,并且实现图像分类
QT 6.6.0 基于OpenCV中的cv::dnn::ClassificationModel实现图像分类
yolov5目标检测和QT 6.6.0 基于OpenCV加载yolov5.onnx模型文件实现目标检测
FCN图像分割和QT 6.6.0 加载分割FCN_Resnet50.ONNX模型文件进行图像分割(过程详解)
QT 6.6.0 中基于SDL2库实现WAV音频格式的播放(过程详解)
QT 6.6.0 中SDL2库的基本使用以及利用SDL2库创建的界面实现音频播放(过程详解)
QT 6.6.0 中基于SDL2,SDL2_ttf,SDL2_image,SDL2_mixer实现音频播放器(改进版)
QT 6.6.0 + SDL2 + SDL2_mixer实现音频播放器(改进)

        前面几篇博文实现了音频播放器,因此本文主要是QT 6.6.0  + FFmpeg + SDL2实现音频录音,建议读者先去看前面几篇篇博文的内容,然后来看本文也需要会更好一点。

        从最初使用QT中mediamulti的模块实现了一个简单的音频录音,到现在使用相关的FFmpeg + SDL库实现音频录音,整个过程都是清晰和比较完整的,我相信坚持到这里的小伙伴一定有了不少的收获。

        现在来绘制一下已经实现了的音频播放器以及音频录音案例的学习路线(后期的学习计算未给出):
 

   

功能介绍 

  • 显示设备信息以及录音,播放录音等信息的编辑框;
  • 录音文件显示列表,点击列表中的录音即可进行录音转换以及录音播放;
  • save打开要保存录音的文件目录;
  • start开始录音;
  • Stop Recode停止录音;
  • PCM2WAV根据选择列表中的录音文件PCM转换为WAV文件格式,然后将转换之后的录音文件用于播放;
  • Open打开PCM文件或者WAV文件;
  • Player播放当前选中列表中的WAV格式录音文件;
  • Pause Player停止录音;
  • Close关闭录音程序。

前置知识点

查看电脑可用的视频和音频设备: 

1.列出所有可用的视频和音频捕获设备的名称命令: 
ffmpeg -list_devices true -f dshow -i dummy
针对 Windows 平台的,使用了 dshow(DirectShow)方式来列出可用的设备
(如摄像头和麦克风)。其中 dummy 是一个占位符,通常不会实际捕获任何数据。

2.播放PCM文件命令: 
ffplay -f s16le -ar 44100 -i output.pcm

注:关于进入cmd命令行使用上面语句,需要配置ffmpeg系统环境变量:D:\SoftwareFamily\QT\ffmpeg-7.0.2-full_build-shared\bin

PCM音频格式转换为mp3或者wav格式:

ffmpeg -f s16le -ar 44100 -ac 2 -i input.pcm output.wav

-f s16le: 指定输入格式为 PCM 16 位小端(16-bit signed little-endian)。
-ar 44100:指定音频采样率为 44100 Hz。这应该与你录制 PCM 时使用的采样率一致。
-ac 2:    指定声道数为 2(立体声)。如果录制的是单声道 PCM,请将 2 改为 1。
-i input.pcm:指定输入文件名。
output.wav:  指定输出文件名。

AVCodecContext编码上下文参数设置:

codec_id:  指定使用的编解码器的 ID,如 AV_CODEC_ID_H264、AV_CODEC_ID_AAC 等。
codec_type:指定类型,可以是 AVMEDIA_TYPE_AUDIO、AVMEDIA_TYPE_VIDEO、AVMEDIA_TYPE_SUBTITLE 等。
bit_rate:  指定编码的比特率,单位为 bps(比特每秒)。例如,128000 表示 128 kbps。
         width 和 height:对于视频编码,指定视频帧的宽度和高度。
sample_rate:音频采样率,例如 44100、48000 等。
pix_fmt:   对于视频编码,指定像素格式,例如 AV_PIX_FMT_YUV420P、AV_PIX_FMT_RGB24 等。
profile:   指定编码器的配置文件。例如,对于 H.264,可以设置为 FF_PROFILE_H264_BASELINE。
level:     指定编码器的级别,通常与视频的复杂度和质量相关。
gop_size:  表示 GOP(Group of Pictures)大小,影响视频编码的关键帧和非关键帧之间的间隔。
max_b_frames:指定最大 B 帧数量,用于提高视频压缩效率。
preset:    可选的速度/质量预设。例如,ultrafast、superfast、veryfast、faster、fast、medium、 
           slow、veryslow。

av_read_frame(AVFormatContext *s, AVPacket *pkt);

int av_read_frame(AVFormatContext *s, AVPacket *pkt);
主要用于从媒体文件中读取压缩的音频或视频帧。它通常用于解码过程中,提取输入流中的数据。
AVFormatContext *s:指向输入文件的格式上下文的指针,它包含了关于输入格式的信息和状态。
AVPacket *pkt:     指向 AVPacket 的指针,用于存储读取到的封包信息。调用此函数后,您应该
                    处理并释放该封包。
如果返回0,表示成功读取一帧的数据,否则读取为空。

录音核心代码

QT6.6.0+FFmpeg+SDL2+SDL2_mixer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值