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

如果将每一个视频帧转换成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. 使用原生Web开发技术为在线客服系统提供网页版配置工具

    升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放.开源.共享.努力打造 .net 社区的一款优秀开源产品. 背景 随着下载私有化部署的用户越来越多 ...

  2. 构建你的.NET Aspire解决方案

    .NET Aspire 是一组功能强大的工具.模板和包,用于构建可观察的生产就绪应用程序..NET Aspire 通过处理特定云原生问题的 NuGet 包集合提供.云原生应用程序通常由小型互连部分或微 ...

  3. vue3 中屏蔽控制台中的警告信息

    main.js中 const app = Vue.createApp({}); // 屏蔽错误信息 app.config.errorHandler = () => null; // 屏蔽警告信息 ...

  4. Linx操作Nginx命令

    在 CentOS 上操作 Nginx 包括安装.启动.停止.重新加载配置等.以下是在 CentOS 上操作 Nginx 的常用命令: 安装 Nginx: sudo yum install nginx ...

  5. 【分块】LibreOJ 6280 数列分块入门4

    题目 https://loj.ac/p/6280 题解 将 \(n\) 个元素的数组 \(a\) 按块长 \(\sqrt{n}\) 进行分块处理.为每个块设置两个懒添加标记 \(add[i], sum ...

  6. 06 IdentityServer4 中支持外部标识提供器

    06. IdentityServer4 External Providers .NET Core 3.1 January 24, 2020| deblokt| in category Tutorial ...

  7. 一个.NET开源、易于使用的屏幕录制工具

    前言 一款高效.易用的屏幕录制工具能够极大地提升我们的工作效率和用户体验,今天大姚给大家分享一个.NET开源.免费.易于使用的屏幕录制工具:Captura. 工具介绍 Captura是一款基于.NET ...

  8. 如何在 Linux 中使用 grep 命令的排除功能

    来自grep 是一种强大的命令行工具,用于在一个或多个输入文件中搜索与正则表达式匹配的行,并将匹配的行标准输出.在本文中介绍如何在使用 grep 搜索时排除一个或多个单词或目录.   排除单词或多个条 ...

  9. mac 安装mysql详细教程(安装包方式)

    一:下载最新的MySQL社区版 为了安装更方便,建议下载dmg安装包.最新的版本是5.7.20.   MySQL 二:安装MySQL 双击 mysql-5.7.20-macos10.12-x86_64 ...

  10. Qt音视频开发45-视频传输TCP版

    一.前言 做音视频开发,会遇到将音视频重新转发出去的需求,当然终极大法是推流转发,还有一些简单的场景是直接自定义协议将视频传出去就行,局域网的话速度还是不错的.很多年前就做过类似的项目,无非就是将本地 ...