第一个ffmpeg程序
在进行使用ffmpeg进行编写程序时,首先要记得进行注册设备(avdevice_register_all ),程序运行时,只需要注册一次就可以
avdevice_register_all 是 FFmpeg 多媒体处理库中的一个函数,其作用是注册所有可用的音视频设备。具体来说,它会将系统中找到的所有音视频输入和输出设备(如摄像头、麦克风等)注册到 FFmpeg 中,以便后续可以通过 FFmpeg 的 API 接口对这些设备进行访问和操作。
在使用 FFmpeg 进行音视频处理时,有时需要读取或者写入来自外部设备(如摄像头、音频接口)的数据,这时就可以使用 avdevice_register_all 来初始化并注册这些设备,以便后续可以通过 FFmpeg 的统一接口来进行数据的读取和写入。
总结来说,avdevice_register_all 的作用就是在 FFmpeg 应用程序中,初始化并注册所有可用的音视频设备,使得这些设备可以被 FFmpeg 使用。
本程序主要实现了使用ffmpeg来实现一个录音功能,其界面如图所示

当我们进行点击按钮时,会触发按钮信号并进行调用ffmpeg的一些方法进行录音操作。其主要代码如下所示:
void MainWindow::on_pushButton_clicked()
{//获取输入格式对象
#ifdef Q_OS_WINconst char* fmtName = "dshow";//“dshow”代表windows输入格式
#elseconst char* fmtName = "avfoundation";//“avfoundation”代表mac输入格式
#endifconst AVInputFormat *fmt = av_find_input_format(fmtName);//获取输入格式对象if(!fmt){qDebug() << "获取输入格式对象失败" << fmtName;return;}//格式上下文(将来可以利用上下文操作设备)AVFormatContext *ctx = nullptr;//设备名称const char* deviceName = "audio=麦克风 (Realtek(R) Audio)";//打开设备int ret = avformat_open_input(&ctx,deviceName,fmt,nullptr);if(ret < 0){char errbuf[1024];av_strerror(ret,errbuf,sizeof(errbuf));qDebug() << "打开设备失败"<< errbuf;}qDebug() << ctx;//文件名const char *filename = "D:/ffmpeg/ffm.pcm";QFile file(filename);//打开文件//WriteOnly:只写模式。如果文件不存在,就创建文件;如果文件存在就会清空文件if(!file.open(QFile::WriteOnly)){qDebug()<<"文件打开失败"<< filename;//关闭设备avformat_close_input(&ctx);return;}//数据包AVPacket pkt;//采集包av_read_frame(ctx,&pkt);qDebug()<< pkt.size;//采集的次数int count = 10;//不断采集数据while(count-- > 0 && av_read_frame(ctx,&pkt) == 0){//将数据写入文件file.write((const char *) pkt.data,pkt.size);}//释放资源//关闭资源file.size();//关闭设备avformat_close_input(&ctx);
}
在进行操作时,切记要先进行配置如下的库:

ffmpeg还有他自己的io语法,如下所示:
//输出格式对比(在进行输出时,会存在缓存区的概念,如果没有换行符的存在,那么当输出内容时会先存储到缓冲区)//cprintf("printf------------");//c++std::cout << "std::cout -------" << endl;//ffmpegav_log_set_level(AV_LOG_DEBUG);//设置错误输出等级,等于或者超过这个等级就会进行输出//ffmpeg的输出格式不带回车av_log(nullptr, AV_LOG_FATAL,"av-----log");av_log(nullptr,AV_LOG_DEBUG,"av_log_debug");//刷新缓存区,直接进行输出fflush(stdout);//刷新普通输出fflush(stderr);//刷新错误输出qDebug() << "1111111";//QT输出格式自己带回车

相关文章:
第一个ffmpeg程序
在进行使用ffmpeg进行编写程序时,首先要记得进行注册设备(avdevice_register_all ),程序运行时,只需要注册一次就可以 avdevice_register_all 是 FFmpeg 多媒体处理库中的一个函数,其作用是注册所有可用的音…...
论文翻译:Large Language Models for Education: A Survey and Outlook
https://arxiv.org/abs/2403.18105 目录 教育领域的大型语言模型:一项调查和展望摘要1. 引言2. 教育应用中的LLM2.1 概述2.2 学习辅助2.2.1 问题解决(QS) 2.2.2 错误纠正(EC)2.2.3 困惑助手(CH)…...
python为什么慢?(自用)
《Cython系列》1. Cython 是什么?为什么要有 Cython?为什么我们要用 Cython? - 古明地盆 - 博客园 (cnblogs.com) 古明地盆的主页 - 博客园 (cnblogs.com) 我原本认为,python慢的原因是“逐行解释程序并执行”,那么我…...
压缩感知3——重构算法正交匹配追踪算法
算法流程 问题的实质是:AX Y 求解(A是M维,Y是N维且N>>M并且稀疏度K<M)明显X有无穷多解,重构过程是M次采样得到的采样值升维的过程。OMP算法的具体步骤:(1)用X表示信号,初始化残差e0 …...
“好物”推荐+Xshell连接实例+使用Conda创建独立的Python环境
目录 主题:好易智算平台推荐RTX 4090DGPU实例租用演示安装配置torch1.9.1cuda11.1.1环境引言:算力的新时代平台介绍:技术与信任的结晶使用案例:实际使用展示创建实例开始使用连接实例(下文演示使用Xshell连接ÿ…...
浪潮天启防火墙TQ2000远程配置方法SSL-V偏、L2xx 配置方法
前言 本次设置只针对配置V偏,其他防火墙配置不涉及。建议把防火墙内外网都调通后再进行V偏配置。 其他配置可参考:浪潮天启防火墙配置手册 配置SSLVxx 在外网端口开启SSLVxx信息 开启SSLVxx功能 1、勾选 “启用SSL-Vxx” 2、设置登录端口号࿰…...
java八股文面试题
Java八股文面试题通常涵盖了Java语言的基础知识、高级特性、框架应用、数据库操作等多个方面。以下是一些常见的Java面试题及其详细回答,按照不同的主题进行分类: 一、Java基础 面向对象的特征有哪些? 抽象:忽略与当前目标无关的…...
【服务器】在Linux查看运行的Python程序,并找到特定的Python程序
在Linux查看运行的Python程序并找到特定的Python程序 写在最前面1. 使用ps命令查看所有Python进程查看详细信息 2. 使用pgrep命令查找Python进程ID 3. 使用top或htop命令使用top命令使用htop命令 4. 使用lsof命令查找Python进程打开的文件 5. 使用nvidia-smi命令查看GPU使用情况…...
安全防御---防火墙实验1
安全防御—防火墙实验1 一、实验拓扑与要求 要求: 1、DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 2、生产区不允许访问互联网,办公区和游客区允许访问互联网 …...
SpringBoot配置Swagger开启页面访问限制
在Spring Boot项目中配置Swagger时,开启页面访问限制通常意味着你希望控制哪些用户或角色可以访问Swagger UI文档页面。由于Swagger UI是一个静态资源,它本身并不直接支持基于角色的访问控制(RBAC)。但是,你可以通过Sp…...
前端代码基本逻辑-vue3
前端vue建立过程 安装nodejs 官网下载安装,并且记住安装路径,记得配置系统变量Path 安装VUE/CLI npm install -g vue/cli --全局安装vue 使用VUE/CLI生成代码框架 vue create your-project-name --我的your-project-name为web 运行项目 cd your-…...
怎么用PPT录制微课?详细步骤解析!
随着信息技术的不断发展,微课作为一种新型的教学形式,因其短小精悍、针对性强等特点,在教育领域得到了广泛的应用。而PPT作为一款常用的演示工具,不仅可以用来制作课件,还可以利用其内置的录屏功能或结合专业的录屏软件…...
Git使用方法
Git是一种分布式版本控制系统,它可以记录和管理软件开发过程中的变更。 Git的基本概念包括以下几个部分: 仓库(Repository):Git用仓库来存储项目的代码和历史记录。一个仓库可以包含多个分支。 分支(Bran…...
HTTP的请求报文和响应报文是怎样的,有哪些常见字段?
http报文分为请求报文和响应报文 请求报文包含:请求行、请求头、空行、、请求体 请求行包含: 方法:即要执行的操作,如get,post、put、delet 资源路径:请求的资源的URL HTTP版本:使用的http协议…...
自注意力简介
在注意力机制中,每个查询都会关注所有的键值对并生成一个注意力输出。如果查询q,键k和值v都来自于同一组输入,那么这个注意力就被称为是自注意力(self-attention)。自注意力这部分理论,我觉得台大李宏毅老师…...
【GameFramework框架】7-2、GameFramework框架是否“过度设计”?
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q764424567/article/details/1…...
RISC-V异常处理流程概述(2):异常处理机制
RISC-V异常处理流程概述(2):异常处理机制 一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册一、异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先需要执…...
Unity3D中如何降低游戏的Drawcall详解
在Unity3D游戏开发中,Drawcall是一个至关重要的性能指标,它指的是CPU通知GPU绘制一个物体的命令次数。过多的Drawcall会导致游戏性能下降,因此优化Drawcall的数量是提高游戏性能的关键。本文将详细介绍Unity3D中降低Drawcall的几种主要方法&a…...
小程序-设置环境变量
在实际开发中,不同的开发环境,调用的接口地址是不一样的 例如:开发环境需要调用开发版的接口地址,生产环境需要正式版的接口地址 这时候,我们就可以使用小程序提供了 wx.getAccountInfoSync() 接口,用来获取…...
【RabbitMQ】一文详解消息可靠性
目录: 1.前言 2.生产者 3.数据持久化 4.消费者 5.死信队列 1.前言 RabbitMQ 是一款高性能、高可靠性的消息中间件,广泛应用于分布式系统中。它允许系统中的各个模块进行异步通信,提供了高度的灵活性和可伸缩性。然而,这种通…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...
EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...
