【探索】探究暴风影音视频截图黑屏原因

Preface

   话说,在用暴风影音进行视频播放的时候,利用其它的软件对视频进行截图的时候,并不能截取到视频的画面,我这里用QQ五笔的截图功能截图,效果如下

   好了,我们现在知道,暴风也是采用了DDraw写的,而且使用了一种叫做Overlay的表面来加速,并且这种表面是纯硬件支持的,位于所有surface的最前端。



软件截图


   但是暴风软件自带的截图功能就可以截图,那截图黑屏就还有截图软件的原因了。

   由上面Overlay的分析知道,它是位于所有surface的最前端,而我们看到的屏幕上的数据,都是通过Primary Surface送至显示器的,会不会是Overlay把Primary Surface给挡住了,所以软件截不到图span>

   如题,我们常用的截屏函数都是截取普通的primary surface中的数据,无法截取Overlay surface中的数据,而微软又没有提供公共的API来获取Overlay surface中的数据所以,当我们打开一个播放器来播放视频,截图的时候发现播放器窗口是黑的。原因就是这块区域正好对应着Overlay,然后当然就是截取不到的了,黑屏就不足为奇了。


   终上所述:黑屏是由于DDraw加速引起的!



解决截图黑屏


   既然Overlay是纯硬件支持的,那么我们是不是可以关掉DDraw加速呢是可以的。

大多数软件除了DDraw的渲染模式之外,还提供了一种Software renderer模式,也就是软件模式,这种模式在DDraw加速不可用的时候才会使用,所以一个避免截图黑屏的办法就是关闭DDraw加速,强迫软件使用Software renderer模式,这样,Overlay surface就不存在了,也就不会黑屏了。


   我们在DirectX的控制面板可以关闭DDraw加速,如果安装了DirectX SDK,那么直接在运行栏里面输入dxdiag即可打开DirectX控制面板


获取Overlay中的数据span>

   据说使用Hook技术可能会办到,但是这个技术,向来是被杀软列入黑名单的,搞出来也得不偿失,有兴趣的童鞋去关注吧。。。



小结

   在查阅资料之前,我对这个也是一点也不懂,然后通过各种百度谷歌微软+实践,对这个东西的原理也算是了解了。

   所以,生活中到处都是知识,关键是需要一双发现知识的眼睛,然后验证它,突破它,创新它,最后代替它,哈哈

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年10月5日
下一篇 2017年10月5日

相关推荐