千家信息网

Qt ffmpeg播放器怎么使用

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容主要讲解"Qt ffmpeg播放器怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Qt ffmpeg播放器怎么使用"吧!一、前言用ffmpe
千家信息网最后更新 2025年12月03日Qt ffmpeg播放器怎么使用

本篇内容主要讲解"Qt ffmpeg播放器怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Qt ffmpeg播放器怎么使用"吧!

一、前言

用ffmpeg来实现自己的播放器,这是一直以来的一个目标,之前的难点卡在音视频同步以及如何播放声音这两点(尽管之前已经进行过不少的尝试和探索,但是问题还是挺多,比如音视频同步不完美,有些文件正常而有些文件不准,声音播放采用的sdl总感觉多了个依赖怪怪的,而且很多初学者也反映希望采用Qt自身的类来播放),近期正好把这两个难点一一攻破了,音视频同步采用的外部时钟同步,声音播放采用的Qt自带的QAudioOutput(并没有采用sdl,省去学习sdl开源库的成本),播放器的demo如期进行。有时候做项目,如果将各个难点击破以后,接下来都是顺理成章水到渠成的事情,速度会非常快,这也是我经常用的策略。

最简单基本播放器具备的功能:

  1. 播放、关闭、暂停、继续。

  2. 音量调节、静音设置。

  3. 进度调节、定位播放。

  4. 总时长、已播放时长。

  5. 音频、视频、本地文件、视频流。

前面几篇文章写了音视频同步、音频播放、音量设置、静音设置,这里就差一个进度调节、定位播放的处理了,ffmpeg内置了av_seek_frame函数负责定位播放帧,总共4个参数,含义分别如下:

  1. 参数1 AVFormatContext *s 表示处理媒体对象的上下文。

  2. 参数2 int stream_index 表示流的索引,填-1表示自动默认流索引。

  3. 参数3 int64_t timestamp 表示要定位的时间,单位是微妙,如果传入的是秒则需要 * AV_TIME_BASE。

  4. 参数4 int flags 表示如何定位和查找使用的策略,建议选择AVSEEK_FLAG_BACKWARD,其余参数容易花屏。

  5. 返回值 >= 0 表示成功。

二、功能特点

  1. 多线程实时播放视频流+本地视频+USB摄像头等。

  2. 支持windows+linux+mac,支持ffmpeg3和ffmpeg4,支持32位和64位。

  3. 多线程显示图像,不卡主界面。

  4. 自动重连网络摄像头。

  5. 可设置边框大小即偏移量和边框颜色。

  6. 可设置是否绘制OSD标签即标签文本或图片和标签位置。

  7. 可设置两种OSD位置和风格。

  8. 可设置是否保存到文件以及文件名。

  9. 可直接拖曳文件到ffmpegwidget控件播放。

  10. 支持h365视频流+rtmp等常见视频流。

  11. 可暂停播放和继续播放。

  12. 支持存储单个视频文件和定时存储视频文件。

  13. 自定义顶部悬浮条,发送单击信号通知,可设置是否启用。

  14. 可设置画面拉伸填充或者等比例填充。

  15. 可设置解码是速度优先、质量优先、均衡处理。

  16. 可对视频进行截图(原始图片)和截屏。

  17. 录像文件存储支持裸流和MP4文件。

  18. 音视频完美同步,采用外部时钟同步策略。

  19. 支持seek定位播放位置。

  20. 支持qsv、dxva2、d3d11va等硬解码。

  21. 支持opengl绘制视频数据,极低CPU占用。

  22. 支持安卓和嵌入式linux,交叉编译即可。

三、效果图

五、核心代码

uint FFmpegThread::getLength(){    return duration * 1000;}uint FFmpegThread::getPosition(){    return 0;}void FFmpegThread::setPosition(int position){    if (this->isRunning() && !isRtsp && !isUsbCamera) {        pause();        QThread::msleep(100);        videoSync->clear();        audioSync->clear();        int64_t timestamp = ((double)position / 1000.0) * AV_TIME_BASE;        av_seek_frame(formatCtx, -1, timestamp, AVSEEK_FLAG_BACKWARD);        next();    }}void FFmpegThread::play(){    //通过标志位让线程执行初始化    isPlay = true;    isPause = false;}void FFmpegThread::pause(){    //只对本地文件起作用    playAudio = false;    if (!isRtsp && !isUsbCamera && !isPause) {        isPause = true;    }}void FFmpegThread::next(){    //只对本地文件起作用    playAudio = true;    if (!isRtsp && !isUsbCamera && isPause) {        isPause = false;        videoSync->reset();        audioSync->reset();    }}void FFmpegThread::stop(){    //通过标志位让线程停止    stopped = true;}void FFmpegThread::snap(){    //通过标志位来截图 句柄模式才需要    if (!callback) {        isSnap = true;    }}

到此,相信大家对"Qt ffmpeg播放器怎么使用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文件 视频 支持 可设 同步 播放器 参数 定位 音视 线程 位置 声音 标志 标签 策略 视频流 难点 处理 存储 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 郑州小程序软件开发哪家好 易语言查询修改数据库连接 全球前十大科技互联网公司 对接数据库需要知道哪些信息 网络安全法61条 青岛科技大学互联网入口 网络安全风险主要包括哪些 背包服务器不跟打印机开关机 翼校通连接服务器超时登录不上 游戏软件开发项目培训 施工进度计划表软件开发 上海海事大学校园网服务器地址 数据库逻辑坏块 数据库表规则 邮件服务器方案 计算机网络安全最大的威胁是什么 荒野行动哪个服务器最多 郑州财经学院计算机网络技术 web用什么软件开发 代理服务器拒绝运行怎么办 河南经贸网络技术中心 vb程序中怎么读出数据库中 网络技术爬虫 对网络安全构成的主要因素 作品数据库 徐汇区正规软件开发价格查询 数据库系统课程设计报告找人做 测试仪器软件开发平台 保存数据库性能下降原因 山东泰州网络安全知识竞赛
0