播放视频是一个常规需求。

如果将每一个视频帧转换成rgb格式,再使用gdi贴图,效率会很低,只能适合分辨率很低的视频,1080P全屏软渲染一般的电脑都撑不住。

因此渲染视频通常需要启用硬件渲染。开启硬件渲染需要一个视频窗口对象,该窗口专门用来渲染视频,因此该窗口和DUI界面元素很难融合。

业务上一般会有在视频窗口上显示控制视频的UI,由于这些UI元素和不方便融合到视频窗口中,常规的做法就是在视频窗口上面再浮动一个popup窗口。

使用一个popup窗口除了实现起来更复杂,效果也很难做到理想,比如在移动视频窗口的时候,要控制这些附属UI同步移动就不容易。

为了解决这个问题,SOUI4提出一种将SOUI元素和视频一起渲染的方案。

实现其实很简单,SOUI元素渲染后会保存到一个内存位图里,常规的渲染情况下,会将这个内存位图使用GDI贴图接口帖到SOUI的宿主窗口上。

在渲染视频时,不直接贴图,而是通过这个内存位图创建硬件渲染需要的Texture,然后再提交到硬件渲染接口中。

每当内存位图数据发生变化,就同步更新这个Texture即可。

demo代码:soui4-demo/SdlPlayer (github.com)

注意该demo依赖最新的soui4代码:soui4/soui (github.com

通过这种方式可以轻松实现高效的全屏视频播放。

使用SOUI播放视频的更多相关文章

  1. AVAssetReader+AVAssetReaderTrackOutput播放视频

    该文章引用自:http://www.jianshu.com/p/3d5ccbde0de1 IOS 微信聊天发送小视频的秘密(AVAssetReader+AVAssetReaderTrackOutput ...

  2. Android实现播放视频

    转载:http://www.bdqn.cn/news/201311/12100.shtml 使用VideoView播放视频 VideoView,用于播放一段视频媒体,它继承了SurfaceView,位 ...

  3. Android使用TextureView播放视频

    1.引言 如果你想显示一段在线视频或者任意的数据流比如视频或者OpenGL 场景,你可以用android中的TextureView做到. 1).TextureView的兄弟SurfaceView 应用 ...

  4. WPF播放视频

    在现在的项目中需要使用到播放视频的功能,本来打算使用VLC来做的.后来发现WPF 4.0之后新增了MediaElement类,可以实现视频播放. <Grid> <Grid.RowDe ...

  5. Cocos2dx3.11.1Android播放视频,后台 黑屏,无法记忆播放bug修改

    /* * Copyright (C) 2006 The Android Open Source Project * Copyright (c) 2014 Chukong Technologies In ...

  6. 不完全解决Android微信HTML5 播放视频的问题(不显示控制条,可交互)

    首先你需要知道以下内容: http://ad.weixin.qq.com/learn/2-3-3--%E9%80%9A%E7%94%A8%E5%BA%93 这是微信为广告商开放的API,我一直认为只有 ...

  7. Bootstrap 3 模态框播放视频

    Bootstrap 3 模态框播放视频 I'm trying to use the Modal feature from Bootstrap 3 to show my Youtube video. I ...

  8. android SurfaceView中播放视频 按视频的原始比例播放

    OnPreparedListener mediaPlayerOnPreparedListener = new OnPreparedListener() { @Override public void ...

  9. Android WebView 总结 —— 使用HTML5播放视频及全屏方案

    在APP开发的过程中,会碰到需要在WebView中播放视频的需求,下面讲解一下如何在WebView中使用html5播放视频. 1.让视频在各个Android版本能够正常播放 在AndroidManif ...

  10. Android三种播放视频的方式

    在Android中,我们有三种方式来实现视频的播放: 1.使用其自带的播放器.指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型. 2.使用VideoView来播放. ...

随机推荐

  1. 如何正确使用 RMQ

    序列分块.设块长为 \(B\).每块预处理出最大值.对于询问 \([l, r]\),答案就是整块最大值和散块最大值拼起来.答案显然是 \(O(n) \sim O(\dfrac{n}{B} + B)\) ...

  2. 【docker-compose】ElasticSearch安装教程

    仅供学习参考 ,请勿轻易在生产环境使用 0. 目录树 1. 创建目录 mkdir -p /docker/elasticsearch/conf /docker/elasticsearch/data /d ...

  3. RocketMQ系列1:基础介绍

    ★消息队列16篇 1 认识RocketMQ RocketMQ是一款基于Java开发的分布式消息中间件,它以其高性能.高可靠性.高实时性以及分布式特性而广受好评. 它支持事务消息.顺序消息.批量消息.定 ...

  4. BUU get_started_3dsctf_2016

    先checksec一下 32位程序,没开PIE,再观察一下主函数 gets函数有可能是栈溢出,再观察一下后门函数 方法一: 考虑栈溢出后直接跳转到if判断后面的语句,进而跳过if条件判断 from p ...

  5. 【Android】谷歌应用关机闹钟 PowerOffAlarm 源码分析,并实现定时开、关机

    前言 RTC RTC 即实时时钟(Real-Time Clock),主要是功能有: 时间保持:RTC可以在断电的时候,仍然保持计时功能,保证时间的连续性 时间显示与设置:RTC可以向系统提供年.月.日 ...

  6. 【Amadeus原创】wordpress批量更新图片路径的方法

    连上wordpress数据库,怼一句: UPDATE wp_posts SET post_content = REPLACE( post_content, '旧域名', '新域名' );

  7. [Java]多个参数的非空判断,不要再使用多个if挨个判断了!(多参数非空判断技巧)

    先上示例代码: if (StringUtils.isAnyBlank(form, to, subject, content)) { log.error("发送人,接收人,主题,内容均不可为空 ...

  8. Qt编写地图综合应用21-路径规划

    一.前言 近期重新将这个地图综合应用进行大幅度的改进更新升级,包括使用示例也做了非常多的改进和调整,其中就包括路径规划功能,之前只是调用了百度地图的JS交互接口,根据起始点坐标经纬度和结束点坐标经纬度 ...

  9. Qt开源作品18-无边框背景透明窗体

    一.前言 用Qt来做无边框北京透明窗体非常简单,根本不需要用什么系统层的API来实现透明什么的,Qt本身提供了很多种设置窗体透明的方法,除了可以设置窗体的属性为透明以外,还可以设置透明度函数,以及qs ...

  10. UdpClient.BeginReceive(AsyncCallback, Object) 方法

    命名空间: System.Net.Sockets 程序集: System.Net.Sockets.dll 从远程主机异步接收数据报. public IAsyncResult BeginReceive ...