邯山专业做网站,网络项目发布网,深圳市做网站,网站开发文件夹组织结构在进行使用ffmpeg进行编写程序时#xff0c;首先要记得进行注册设备#xff08;avdevice_register_all #xff09;#xff0c;程序运行时#xff0c;只需要注册一次就可以 avdevice_register_all 是 FFmpeg 多媒体处理库中的一个函数#xff0c;其作用是注册所有可用的音…在进行使用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------------);//cstd::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输出格式自己带回车