使用SOUI播放视频
播放视频是一个常规需求。
如果将每一个视频帧转换成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播放视频的更多相关文章
- AVAssetReader+AVAssetReaderTrackOutput播放视频
该文章引用自:http://www.jianshu.com/p/3d5ccbde0de1 IOS 微信聊天发送小视频的秘密(AVAssetReader+AVAssetReaderTrackOutput ...
- Android实现播放视频
转载:http://www.bdqn.cn/news/201311/12100.shtml 使用VideoView播放视频 VideoView,用于播放一段视频媒体,它继承了SurfaceView,位 ...
- Android使用TextureView播放视频
1.引言 如果你想显示一段在线视频或者任意的数据流比如视频或者OpenGL 场景,你可以用android中的TextureView做到. 1).TextureView的兄弟SurfaceView 应用 ...
- WPF播放视频
在现在的项目中需要使用到播放视频的功能,本来打算使用VLC来做的.后来发现WPF 4.0之后新增了MediaElement类,可以实现视频播放. <Grid> <Grid.RowDe ...
- Cocos2dx3.11.1Android播放视频,后台 黑屏,无法记忆播放bug修改
/* * Copyright (C) 2006 The Android Open Source Project * Copyright (c) 2014 Chukong Technologies In ...
- 不完全解决Android微信HTML5 播放视频的问题(不显示控制条,可交互)
首先你需要知道以下内容: http://ad.weixin.qq.com/learn/2-3-3--%E9%80%9A%E7%94%A8%E5%BA%93 这是微信为广告商开放的API,我一直认为只有 ...
- Bootstrap 3 模态框播放视频
Bootstrap 3 模态框播放视频 I'm trying to use the Modal feature from Bootstrap 3 to show my Youtube video. I ...
- android SurfaceView中播放视频 按视频的原始比例播放
OnPreparedListener mediaPlayerOnPreparedListener = new OnPreparedListener() { @Override public void ...
- Android WebView 总结 —— 使用HTML5播放视频及全屏方案
在APP开发的过程中,会碰到需要在WebView中播放视频的需求,下面讲解一下如何在WebView中使用html5播放视频. 1.让视频在各个Android版本能够正常播放 在AndroidManif ...
- Android三种播放视频的方式
在Android中,我们有三种方式来实现视频的播放: 1.使用其自带的播放器.指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型. 2.使用VideoView来播放. ...
随机推荐
- .NET周刊【11月第3期 2024-11-17】
国内文章 .NET 9使用Scalar替代Swagger https://www.cnblogs.com/netry/p/18543378/scalar-an-alternative-to-swagg ...
- 我们有40%代码是 AI 写的
- 数据抽取平台pydatax使用案例---11个库项目使用
数据抽取平台pydatax,前期项目做过介绍: 1,数据抽取平台pydatax介绍--实现和项目使用 项目2: 客户有9个分公司,用的ERP有9套,有9个库,不同版本,抽取的同一个表字段长度有不一样, ...
- 二、STM32F103C8T6-定时器
STM32F103C8T6 定时器概述 STM32F103C8T6 作为一款广泛使用的微控制器,内置多个定时器,能够支持多种计时和控制功能,如精确延时.脉冲宽度调制(PWM).捕获比较(Capture ...
- ClickHouse之物化MySQL
Creates ClickHouse database with all the tables existing in MySQL, and all the data in those tables. ...
- Django之添加prometheus监控
1.首先需要在prometheus.yml配置文件中配置targets: - job_name: "test-server-191" static_configs: - targe ...
- redis教程(Mac)
1.首先,检查是否已经安装Homebrew,如果没有安装Homebrew,请先安装 2.使用Homebrew安装命令,在终端输入以下命令 brew install redis 当前默认安装5.0.8版 ...
- Vue.js 数据绑定
1.标签内容绑定 双括号语法:使用 {{}} 将变量包裹起来,vue会将变量的值解析为普通文本,而非 HTML 代码 <div>{{msg}}</div> <div> ...
- CLZ银行问题
CLZ银行问题 题目描述 CLZ 银行只有两个接待窗口,VIP 窗口和普通窗口,VIP用户进入 VIP 窗口排队,剩下的进入普通窗口排队.现有M 次操作,操作有四种类型,如下: IN name V:表 ...
- python雪花算法
雪花算法(Snowflake Algorithm)是一种用于生成唯一的ID的算法,它由Twitter开发.其生成的ID在全局范围内是唯一的,适合高并发场景.雪花算法生成的ID通常是一个64位的整数,包 ...