QT+ffmpeg 简单视频播放代码及问题记录

[QML开发笔记]-QML+FFmpge制作视频播放器 [QML开发笔记]-QML+FFmpge制作视频播放器 QML结合FFmpge制作视频播放器 环境:QT5.13 ffmpeg-4.2.2-win64 效果: 代码: main.qml import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12 import QtQuick.Dialogs 1.2 import KDMQuick 1.0 /** * @FileName main.qml * @b 阅读详情

开发环境:ubuntu16.04

qt版本:5.6.0

ffmpeg版本:ffmpeg-3.4


第一步:关于开发环境的搭建

对于ffmpeg开发环境的搭建,我就不再这里叙述了,参考下面博客,期间遇到问题一步步解决即可。

http://blog.youkuaiyun.com/haoxu135790/article/details/53171498


第二步:打开qt-creator创建qt项目

直接创建一个widget的窗口项目即可,然后后面再进行添加相应的控件。在此,我说一下本次qt+ffmpeg视频播放的思路:首先按照下面的ffmpeg编程模型,开个线程对视频文件进行解码最终得到一帧一帧的图片数据,然后将其加载到QImage对象上面去,然后通过信号与槽的关系将得到的图像数据传递给主窗口主函数,通过Qpainter实现显示。



具体的思路就是上面所说的,由于本篇文章的目的不是关于qt+ffmpeg播放器如何实现的步骤,因此在这里直接给出代码:

百度云链接:https://pan.baidu.com/s/1bppWreR 密码:yv3u


问题记录1:

如果你遇到下面这个错误,很有可能是你把开辟的内存给错对象了,比如本来给A函数的,你却给了B函数。

[swscaler @ 0x12cb1a0] bad dst image pointers


问题记录2:如果你遇到下面这个问题:

[swscaler @ 0xd9b180] deprecated pixel format used, make sure you did set range correctly

原因是因为你在下面的pixFormat没有设对

img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
            pixFormat, pCodecCtx->width, pCodecCtx->height,
            AV_PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL);

       

以下是其函数原型:

SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat,

int dstW, int dstH, enum AVPixelFormat dstFormat,

int flags, SwsFilter *srcFilter  ,

SwsFilter *dstFilter, const double *param)

成功后返回SwsContext 类型的结构体。

参数1:被转换源的宽

参数2:被转换源的高

参数3:被转换源的格式,eg:YUV、RGB……(枚举格式,也可以直接用枚举的代号表示eg:AV_PIX_FMT_YUV420P这些枚举的格式在libavutil/pixfmt.h中列出)

参数4:转换后指定的宽

参数5:转换后指定的高

参数6:转换后指定的格式同参数3的格式

参数7:转换所使用的算法,

参数8:NULL

参数9:NULL

参数10:NULL

解决方法:

switch (pCodecCtx->pix_fmt) {
case AV_PIX_FMT_YUVJ420P :
pixFormat = AV_PIX_FMT_YUV420P;
break;
case AV_PIX_FMT_YUVJ422P :
pixFormat = AV_PIX_FMT_YUV422P;
break;
case AV_PIX_FMT_YUVJ444P :
pixFormat = AV_PIX_FMT_YUV444P;
break;
case AV_PIX_FMT_YUVJ440P :
pixFormat = AV_PIX_FMT_YUV440P;
break;
default:
pixFormat = pCodecCtx->pix_fmt;
break;
}

img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
pixFormat, pCodecCtx->width, pCodecCtx->height,
AV_PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL);


问题记录3:当你遇到下面这个问题,即segmentfault问题,这说明你的指针或内存操作有问题

段错误 (核心已转储)

解决方法:用gbd调试找到具体问题,如下:

Thread 1 "myplayer" received signal SIGSEGV, Segmentation fault.
__memmove_avx_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S:238
238 ../sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S: 没有那个文件或目录.

这个问题明显就是说可能产生段错误就是访问了错误的内存段,可能你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.

上面这句话很重要,指出了segmentfault的几个错误点,我这边的是,前面已经释放了分配好的内存,然后在最后对象释放的时候,有释放一次内存,所以出现了这个问题。



最后:附加一个挺全的ffmpeg音视频开发的博客

http://blog.youkuaiyun.com/leixiaohua1020/article/details/15811977


over!

【接口自动化测试】cookie绕过验证码自动登录?(保持登录状态) 在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理;再者,每次请求接口前如果都需要先去登录一次,这样不仅效率低,还耗费资源。 有些网站是使用cookie辨别用户身份的,此时我们便可以先登录一次,拿到登录成功后的cookie,后续请求时在请求头中加入该cookie,便可保持登录状态直接请求。 阅读详情

相关推荐

告别第三方应用!用Android原生API搭建Miracast投屏接收器

本文深入探讨如何利用Android原生API开发Miracast接收器,绕过第三方依赖,实现高效的屏幕共享。通过Wi-Fi P2P直连、反射调用隐藏API和RTSP会话协商等核心技术,为开发者提供了一套完整的Miracast接收端解决方案,适用于多屏协同场景。

weixin_29174141的博客 392

sws_scale():bad dst image pointers

int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]); 源码处:检查sws_scale最后两个参数的内存是否分配 //检查 if (!check_image_pointers

asdasfdgdhh的博客 4613

字节跳动高频111道核心前端面试题解析,web开发增强

但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。自定义指令(v-check、v-focus)的方法有哪些?v-model是什么?

2401_84094620的博客 1200

ffmpeg bad src image pointer问题

ffmpeg学习时出现的问题

qq_45905959的博客 5028

从RTL到GDSII:DC综合里那些没人告诉你的时钟约束冷知识(附真实工程示例)

本文深入探讨数字IC设计中DC综合阶段的时钟约束冷知识,包括无毛刺时钟切换、寄存器分频时钟约束、虚拟时钟应用等关键技巧。通过真实工程示例,揭示常见约束误区及解决方案,帮助工程师提升时序收敛效率。特别针对input_delay和output_delay在多时钟域场景下的设置陷阱提供实用指南。

weixin_29306317的博客 429

AI Agent Harness Engineering 开发效率工具:Prompt工程、调试与监控平台

随着AI Agent技术从原型探索走向企业级落地,开发者普遍面临Prompt迭代无版本管控、Agent执行黑盒无法定位错误、上线后无监控导致故障频发、多团队协作效率低下四大核心痛点,据2024年LLMOps行业报告显示,没有配套工具链的Agent开发团队平均迭代周期是有工具链团队的6倍,线上故障率高达23%,平均资源浪费超过60%。

小白菜的博客 426

基于qt和ffmpeg视频播放器开发实战

ffmpeg是世界上应用广的开源视频处理框架,在各个平台(windows,linux,嵌入式、Android、IOS)被广泛应用,可以说是做视频相关项目技能qt是目前跨平台项目界面开发的第一选择,本课程基于这两种框架在加上VC++,给大家讲解延时如何开发出一个视频播放器,各个模块如何结合,如何考虑性能问题,如何设计封装类,如何处理各种异常情况。

RK3588高速接口实战-PCIE

摘要: RK3588的PCIe接口支持PCIe 3.0x4和PCIe 2.1x1/x2,具备Root Complex和Endpoint模式,适用于NVMe SSD、5G模块等高速设备。硬件设计需注意85Ω/100Ω阻抗匹配、220nF AC耦合电容及100MHz参考时钟。设备树需配置控制器节点、PHY模式和IOMMU映射(RC模式用iommu-map,EP模式用iommus)。调试时可通过lspci检查链路状态,dmesg查看训练日志,perf分析性能。常见问题包括设备识别失败(检查复位时序、PHY配置)、

weiyvyy的博客 505

音视频开发遇到的部分问题(个人向)

往往是转化时视频源帧出现的问题,如果通过普通的拷贝可能拷贝不完整导致出现问题。获取帧后 通过API 将解码的帧全部拷贝到vp中。

Rain_ZZX的博客 660

【面试系列】软件架构师 高频面试题及详细解答

本文介绍了软件架构师岗位的初级、中级和高级面试题及详细解答,涵盖了系统设计、面向对象设计、分布式系统、云计算技术、性能优化等关键领域。通过这些问题和解答,候选人可以深入理解软件架构师的核心职责和技能要求。此外,文章总结了在面试中需要掌握的常考知识点,包括架构模式、分布式系统管理、安全性、数据管理和DevOps实践。通过掌握这些知识点,软件架构师能够有效设计和指导复杂系统的结构,确保系统的可扩展性、性能和维护性。

在路上的专栏 850

基于STM32、HAL库的TLV320AIC3204IRHBR音频接口芯片驱动程序设计

* 开启所有数字部分 */#define TLV320AIC3204_REG_LEFT_HEADPHONE_OUT_VOLUME 0x0C /* 左声道耳机输出音量 */#define TLV320AIC3204_REG_DIGITAL_AUDIO_PATH_CONTROL 0x05 /* 数字音频路径控制 */#define TLV320AIC3204_REG_ANALOG_HP_FILTER_CONTROL 0x34 /* 模拟耳机滤波器控制 *//* 最大音量 */

corlin6688的博客 521

异常以及处理

已经有差不多半个多月没有更新博客了,Endeavor都想打自己一顿了,放假回到家惰性自然而然就回来了,改,一定改,再这样下去,只会和自己的梦想渐行渐远,Endeavor,加油吧,时间不多了。 言归正传,今天和大家说一个java中不可避免的一个知识——异常。 一、何为异常:java程序中存在某些不正常的情况,这些不正常的情况我们就统称异常。

一点一滴 662

Autosar诊断实战系列05-Dcm之0x27加解密服务配置开发详解

UDS 0x27服务实战开发介绍,对解锁尝试次数及delay时间进一步解释。

initiallizer的博客 1993

QT、FFmpeg、SDL2视频播放器(一)

之前使用ffmpeg和sdl2制作过一个简单的视频播放器,视频的播放暂停完全是sdl event控制,现在希望将sdl嵌入到QT 窗口中,通过一系列qt按钮实现播放、暂停的控制。 1 核心思想 1 QT多线程 因为视频解码过程消耗资源较多,必须单独开启一个线程来负责视频解码,主线程负责渲染以及控制,否则视频播放的过程中UI会卡住,无法响应用户事件。QT实现多线程有两种方法: 第一种是创建一个线程,类继承QThread,并且重写run方法,主线程中创建线程对象,使用start()方法启动线程,该部分网络上资料

qq_38694388的博客 3619

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Qt tips 之使用 FFmpeg + OpenGL 实现简易视频播放器

Qt + FFmpeg + OpenGL 实现简易视频播放器

qq_41368848的博客 1527

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Qt之FFmpeg播放器设计(十七)

​Qt进行播放器设计,采用自带多媒体模块QMediaPlayer设计时,其底层操作系统提供的解码器有些格式不一定支持,且解码效果有限。这时我们一般采用第三方音视频解码器库进行操作,这里推荐FFmpeg库,用的人比较多采用纯C编写,保证高可移植性和编解码质量,且支持多种音视频格式,提供了录制、转换以及流化音视频的完整解决方案。在Qt平台上开发涉及FFmpeg的应用程序,需要将FFmpeg库集成到你的Qt项目中,利用FFmpeg功能进行音视频处理,本文基于Qt平台,依靠FFmpeg内核库,设计了一款播放器。

weixin_47006346的博客 2073

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

QT + OpenGL + FFmpeg写的一个全景视频播放器

别的就是 camera的移动 以及openglmodel shader相关的代码了。切换到全景模式之后 随着鼠标的拖动 左边的窗口会显示对应的全景的一些坐标信息。对比了下 和insta360的还是不一样 和Detu的播放器效果是一样的。ffmpeg用的是软解 也没有做视频同步之类的 但是播放实时视频没有啥问题。效果如下 左边的窗口用于输入视频源 以及显示一些关于视频的一些信息。我们测试的RTSP是4K的 软解也没啥问题 记录下。网上搜了搜 基于前辈的基础上 写的差不多了。

baoecit的博客 3123

Qt 基于FFmpeg的视频播放器 - 播放、暂停以及拖动滑动条跳转

- 本文基于`FFmpeg`,使用Qt制作了一个极简的视频播放器. 相比之前的版本,加入了`播放`、`暂停`、`拖动滑动条跳转`功能,如上所示 (`左图`): - 使用`AVSEEK_FLAG_ANY`可以精准跳转到某一帧,但会出现花屏 (`左图`). - 使用EV录屏,再使用本软件将其转为gif (`左图`),再`GifCam`截取本软件转gif的过程 (`右图`),`GifCam`无法截取鼠标.

做减求空 1794

Qt+FFmpeg视频播放器开发(三)

音视频基本概念+ffmpeg核心类介绍

2401_82413779的博客 1000

Qt+FFmpeg视频播放器开发(二)

Qt+FFmpeg视频播放器需求及核心问题点

2401_82413779的博客 1170

Qt +FFmpeg+SDL视频播放器

调用ffmpeg库对本地视频文件进行视频流解码,解码后的数据格式为yuv420p,调用sdl库,并传入Qt显示控件句柄给sdl进行渲染显示,代码如下: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QLabel> #include <QDebug> namespace Ui { ...

aqiasi007的博客 1899

linux下QT,FFMPEG, SDL2制作简易播放器

在Ubuntu环境下使用QT做界面,ffmpeg解码视频,SDL播放音乐,制作一个简易的视频播放器。 该视频播放器的主要运行三条线程,需要两条队列: 线程1(音视频数据分离):使用FFMPEG分解视频文件,将视频数据存入到视频队列中,将音频数据存入到音频队列中。 线程2(视频解码):从视频队列中获取一包视频数据,通过FFMPEG解码该包视频数据,解码后再将视频转换为RGB数据,最后通过QT的.....................

Biao 3697

基于QT+ffmpeg+SDL2的流媒体播放器

本人根据已故大神雷霄骅的文章以及一些前辈们的文章,使用QT界面开发,写了一个简单的ffmpeg+SDL2的流媒体播放器。

路虽远,行则将至 2768

FFMPEG4和SDL的视频播放器开发过程

记录ffmpeg、sdl、qt开放视频播放器的过程。

m0_57122083的博客 996

05 FFMPEG Qt视频播放器之音视频同步

开发环境:Windows 10, Qt 5.13.1, ffmpeg 4.2.2 上几篇介绍分别介绍了ffmpeg解码视频显示在界面上,解码音频用SDL播放。 本篇整合两个功能,使用音视频同步。 这里主要讲下声音和视频同步的步骤。 首先刚开始播放的时候通过av_gettime()获取系统主时钟,记录下来。 以后便不断调用av_gettime()获取系统时钟 减去之前记录下的差值,便得到了一个视频播放了多久的实际时间。 对于视频的同步我们这样做: 从视频读取出的数据中包含一个pts的信息(.

chenyijun的专栏 912

从零实现 Qt + FFmpeg 本地视频播放器

本文介绍了基于Qt 6和FFmpeg 8.1开发的本地视频播放器项目,实现了音视频解码、画面渲染、音频输出、播放控制及同步等功能。项目采用Qt Widgets构建界面,利用FFmpeg处理媒体解封装、解码和格式转换,通过QAudioSink输出音频信号。关键实现包括:工程内置FFmpeg的CMake配置、播放线程与界面的信号槽通信、音视频同步机制(以音频时钟为主时钟),以及支持Seek的进度控制。该项目适合作为Qt+FFmpeg播放器开发的入门参考,代码已开源在GitHub。

hanpengye的博客 379
上一篇: 关于QT中 **.cpp:1:1: error: stray '\377' in program 错误解决
下一篇: Linux 下C编程实现文件夹下文件大小和二级文件夹大小统计
Chasing_Chasing
博客等级 码龄10年 233粉丝 87原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值