使用QT5.7 + VS2015做的试验,视频渲染使用D3D9。发现的规律是:

顶层窗口(指父窗口为NULL的窗口)如果设置了

 this->setWindowFlags( Qt::FramelessWindowHint);this->setAttribute(Qt::WA_TranslucentBackground,true);

那么不管是用该顶层窗口本身的窗口句柄,还是使用子窗口的句柄作为D3D的渲染窗口,都渲染不出来。如果顶层窗口没有同时设置以上的属性/标志,子窗口不管设置还是没有设置以上两个属性/标志,视频都可以渲染出来。

调试了下,D3D的初始化、渲染接口都能成功执行,找了不少论坛,后来在一个页面上看到有类似的说明:

OpenGL_and_translucent_background_do_not_work_together_due_to_a_limitation

里面提到:

Due to a limitation in window managers, it is not possible to combine OpenGL with a translucent background window (set with WA_TranslucentBackground). The reason for this is because OpenGL is rendered directly onto the screen and the compositor used to enable the translucent background cannot ensure that the OpenGL is rendered correctly.

There is nothing that can be done in Qt to fix this as it needs to be done on the side of the window manager.

To work around this issue you can either just use Qt to render everything and not OpenGL, or you can render the OpenGL into a pixmap and draw that onto your widget instead.

大意是OpenGL是直接渲染在屏幕的,而透明背景的compositor不能保证OpenGL可以正确地渲染,我想D3D也是一样的原理,直接访问显卡,所以D3D在这种情况下不能渲染视频,估计也是这个原因,它里面还提到了对于这个问题Qt做不了什么,因为这需要窗口管理器那边来解决这个问题。

我又尝试了使用Dib来贴图,仍然失败。看来目前还未有解决办法。

Qt WA_TranslucentBackground 导致视频渲染不了的问题相关推荐

  1. Qt渲染视频常见问题(视频渲染窗口上子窗口设置透明出现阴影问题、主窗口缩放导致视频渲染窗口部分出现视频闪烁问题)

    开发环境 Qt5.9.6+VS2015 1.视频渲染窗口上子窗口设置透明出现阴影问题 平时为了方便代码管理,一般窗口上设置窗口或者控件,都会设置Parent(setParent),这样对主窗口进行某种 ...

  2. 在iOS端使用AVSampleBufferDisplayLayer进行视频渲染

    原文在这里:http://blog.csdn.net/fernandowei/article/details/52179631 目前大多数iOS端的视频渲染都使用OpenGLES,但如果仅仅为了渲染而 ...

  3. 音视频进阶教程|实现直播间的自定义视频渲染

    1 自定义视频渲染的功能简介 自定义视频渲染指的是 SDK 向外部提供本地预览及远端拉流的视频帧数据,供用户自行渲染. 当开发者业务中出现以下情况时,推荐使用 即构实时音视频SDK 的自定义视频渲染功 ...

  4. 【Qt 开源音视频框架模块QtAV】03:QTAV主要接口展示以及播放器源码分享

    介绍 QtAV 是一个基于 Qt 和 FFmpeg 的跨平台.高性能多媒体播放框架,能够帮助你轻而易举地编写出一个播放器. [Qt 开源音视频框架模块QtAV]01:介绍.编译以及简单使用 因为网上使 ...

  5. FFmpeg学习之二 (yuv视频渲染)

    FFmpeg学习之二 (yuv视频渲染) yuv简介 1.yuv是什么 2.yuv采集方式 3.yuv存储方式 4.yuv格式 yuv视频渲染 1. iOS YUV视频渲染 1.1 IOS利用open ...

  6. VLC预览高分辨率视频导致视频花屏分析笔记

    根据vlc调试打印,是由于解码过慢导致视频画面过慢显示,程序丢弃未解码缓存帧:进而导致画面丢帧且由于丢帧破坏了视频流解码的参考机制使得解码异常即表征为花屏. 因为,vlc底层依赖于开源库ffmpeg的 ...

  7. Qt / 窗体设置 Qt::WA_TranslucentBackground 为全黑的原因

    经过验证,通过代码: this->setAttribute(Qt::WA_TranslucentBackground, true); 在 UOS 上,可以实现窗口透明: 在 Windows 上, ...

  8. Qt+OpenCV打开视频文件并在窗口界面上显示

    Qt+OpenCV打开视频文件并在窗口界面上显示 1.新建一个Qt Widgets Application,工程配置文件(.pro文件)内容如下: #------------------------- ...

  9. 在QT中CXDVA视频组件的例子

    在QT中CXDVA视频组件的例子 在windows 平台下,cxdva视频组件可以在Qt.MFC等等框架中嵌入视频播放画面.cxdva视频组件使用起来很简单,只用简单的的调用三四个函数就可以实现播放视 ...

最新文章

  1. 监控web站点目录下所有文件是否被恶意篡改
  2. java延迟函数_Java 8:延迟计算
  3. 公司的实战Replica Sets+Sharding方案
  4. Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功
  5. at指令返回值检验c语言,学渣求指教,如何识别字符串中的AT命令并逐个输出,求程序!!!...
  6. 做嵌入式的必须学Android吗
  7. 读懂这本书,才算读懂阿里大数据
  8. 2019 年总结 | 31岁,不过是另一个开始
  9. 数据库报12516linux,ORA-12516故障解决
  10. 12-Python3 元组
  11. 递归算法JAVA实现
  12. python面试通关_Python面试通关宝典
  13. 微信小程序公众平台如何生成小程序码
  14. 不知名程序员金山云大米云主机体验日志
  15. 计算机多媒体简历,计算机多媒体简历
  16. 批量生成MySQL不重复手机号大表
  17. x是小于9的非负数的matlab,x是小于10的非负数”,用MATLAB表达式可写为
  18. html没有注册类,电脑中ie浏览器提示没有注册类别的三种解决方法
  19. Switch新机发布引全球吐槽,老任给牙膏厂上了一课,这波是等等党输了
  20. 计算机双屏竖屏桌面背景6,科技:使用这些双显示屏壁纸让你的桌面变得更加美观...

热门文章

  1. 支付宝小程序uni-app的map多边形polygons不显示问题解决
  2. 大数值金额大写转换(C语言)
  3. redis之禁用保护模式以及修改监听IP
  4. Latex带序号的项目符号列表
  5. 使用Python实现微信发送文本消息、图片以及附件
  6. 小米4 第三方re奇兔_小米推送测试
  7. sapi 实现语音朗读
  8. Redis 实现热度统计和已读未读功能
  9. android卡刷教程,卡刷是什么意思?安卓系统卡刷教程详解
  10. kasp技术原理_SNP检测Massarray法怎么样?中高通量大样本适用吗?