Open qht1003077897 opened 4 years ago
我说的意思是一次性播放4个视频,实例化4个player对象。为了解决这个问题我使用了一种方法,是将render对象的父widget缓存起来,建立了一个qwidget缓存池。
@wang-bin 我发现了内存泄漏的地方:初始化绑定了纹理之后,但是没有delete。
首先aboutToBeDestroyed触发了resetgl(0,然后在resetgl里面去delete纹理,但是因为没有调用makecurrent()导致下面的代码被return: 因此就没有执行下面的glDeleteTextures
期待修复,谢谢
MDK现在稳定不 😏
还是挺稳的,有老外在商用了
👍好的,但是我现在有个需求是需要自定义顶点数据来实现渲染画面的分割效果,mdk能支持吗? 还有mdk是不是没有开源?
最近会支持。没开源
那如果我要商用是要申请许可吗? 怎么操作呢?
对。告诉我主程序可执行文件信息我会生成个密钥。qtav贡献者、捐赠者等免费,readme最后写着
你可以参考下这个方法 https://github.com/wang-bin/mdk-examples/blob/master/Qt/QMDKWidget.cpp#L103
👍我用这个方法OK了,没有了内存泄漏。
还有我算半个贡献者吗 😏 我后面估计也要商用 windows、linux、android
你把你这个bug的修复让我合并就算了:)
哈哈哈,我还发现个问题,play方法中打开解码器和stop方法wait停止线程的时候都会阻塞UI,打开解码器大概在150ms左右,stop方法不一定,最长见过阻塞400ms左右,这对需要循环播放的需求来说还是个比较严重的问题
我测试了一下,最好像下面这样:加上Qt::DirectConnection属性
QObject::connect(ctx, &QOpenGLContext::aboutToBeDestroyed, this,[this,ctx] {
qDebug("QHT aboutToBeDestroyed resetGL begin");
QOffscreenSurface s;
s.create();
ctx->makeCurrent(&s);
d_func().resetGL();
resetGL();// it's better to cleanup gl renderer resources
ctx->doneCurrent();
qDebug("QHT aboutToBeDestroyed resetGL end");
}, Qt::DirectConnection);
实测某些情况下执行resetGL会崩溃
最近会支持。没开源
@wang-bin 大佬我想问下这个功能大概啥时候能支持呢? 如果可以的话我准备迁移mdk了,我们后面想商用
最快下周
好的,QTAV我先用着,目前能满足我们的需求,avcodec_open2函数子线程泄漏是视频解码器初始化才会泄漏,而主要的卡顿又是因为avcodec_open2音频解码器引起的,因此我把初始化音频解码器部分放到子线程中,这样可以减轻4/5的卡顿现象。
QtAV 1.13.0, Qt version 5.12 and win10 x64
发现一个bug:VideoRendererId_OpenGLWidget类型循环播放多个(4个)1080P视频时,会有内存泄漏
1、当窗口隐藏时候没有内存泄漏,窗口显示的时候存在内存泄漏 2、当render对象的父类qwidget有父亲qwidget时,析构父亲qwidget的时候存在内存泄漏 3、当render对象的父类qwidget没有父亲qwidget时,析构父亲qwidget的时候不会存在内存泄漏 4、VideoRendererId_Direct2D 类型不存在上述问题