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

如果将每一个视频帧转换成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. 从0搭建一个FIFO模块-02(系统架构)

    一.异步FIFO需要注意的问题 所谓异步FIFO,指的是写时钟与读时钟可以不同步,读时钟可以比写时钟快,反之亦然.思考一下,这样会直接地造成两个问题: 由于异步FIFO的基本存储单元是双端口RAM,因 ...

  2. java——棋牌类游戏五子棋(webwzq1.0)之三(Msg)

    package msg; import java.io.ObjectInputStream; import java.net.DatagramSocket; /******************** ...

  3. MySQL之根据经纬度计算距离

    可以在MySQL层面使用自定义计算函数来使用 CREATE DEFINER=`xxx`@`%` FUNCTION `get_distance`( lat1 float,lon1 float,lat2 ...

  4. 【返回值】定义泛型JSON

    /** * 定义统一的Json结构 * 由于封装的Json数据的类型不确定,所以在定义统一的json结构时,我们需要用到泛型. * 统一的json结构中属性包括:数据.状态码.提示信息即可. * 构造 ...

  5. Modbus新手教程

    REDISANT 提供互联网与物联网开发测试套件 # 互联网与中间件: Redis Assistant ZooKeeper Assistant Kafka Assistant RocketMQ Ass ...

  6. 【Amadeus原创】本地安装gitlab,初始化管理员密码

    注册还是无法登录,最后发现,需要初始化root密码. docker exec进去,然后执行gitLab-rails,修改密码, 然后登录即可. [root@ecs-9684 ~]# docker ex ...

  7. Qt/C++音视频开发48-推流到rtsp服务器

    一.前言 之前已经打通了rtmp的推流,理论上按照同样的代码,只要将rtmp推流地址换成rtsp推流地址,然后格式将flv换成rtsp就行,无奈直接遇到协议不支持的错误提示,网上说要换成rtp,换了也 ...

  8. Qt编写物联网管理平台(支持win/linux/mac/嵌入式linux/modbus等)

    一.前言 这个物联网综合管理平台前后迭代了五年,一点一滴慢慢积累起来,从最开始的只有modbus串口协议解析以及简单的表格显示数据,慢慢的逐渐增加了tcp_rtu支持,用户管理模块,地图监控模块,而后 ...

  9. Qt开发经验小技巧206-210

    有时候需要对文本进行分散对齐显示,相当于无论文字多少,尽可能占满整个空间平摊占位宽度,但是在对支持对齐方式的控件比如QLabel调用 setAlignment(Qt::AlignJustify | Q ...

  10. Qt项目架构经验总结

    (一)通用规则 除了极小的微型demo级别项目外,其余项目建议用pri分门别类不同文件夹存放代码文件,方便统一管理和查找. 同类型功能的类建议统一放在一起,如果该目录下代码文件数量过多,也建议拆分多个 ...