移动端高性能Unity播放器实现方案

news2024/11/15 14:02:27

前情提要:
视听体验再进化——如何在24小时内全面升级你的视频应用
如何打造新时代的终端播放产品?

随着VR、AR、元宇宙等新玩法的出现,Unity平台的视频播放需求逐渐增加,比如下面两个动图就是在百度真实的案例。前者是演唱会场景,后者则是一个演讲会场。

通过这两个案例可以真切地感受到虚实结合给传统视听体验带来的改变。
在这里插入图片描述
在这里插入图片描述
目前的Unity播放器方案有以下两种:

  1. Unity自带的VideoPlayer,但是缺点在于支持的格式少
  2. 海外一些公司推出的Unity播放器插件,比如AVPro,EasyMovieTexture等,格式支持丰富,但是费用不菲,而且海外公司的技术支持也有限

所以在网络上能看到很多文章,介绍如何自己实现Unity播放器SDK,基本都是如下的思路:
从硬件解码器中取出YUV数据 -> 送到Unity上下文中进行渲染。

这个思路非常简单直接,问题也很明显

  1. 在4K高分辨率下,无论是数据拷贝,还是CPU、GPU之间的数据传递,都会带来严重的性能损失。即便是低分辨率,在一些低性能设备上,也有严重的性能问题。
  2. 对于Android MediaCodec,严格来说取出YUV数据的做法并非标准做法,所以有些厂商(比如MTK)的实现会有各种各样的问题。给开发者埋了很隐蔽的坑。

高性能方案

鉴于以上的原因,我们在实际业务场景中寻求更高性能的方案。具体方案思路如下:

  1. 让Unity环境和播放内核共享渲染context
  2. 播放器内核将视频数据绘制到一个/多个纹理id上
  3. Unity拿到纹理id,进行渲染

这样的方式,避免了数据在CPU和GPU之间的拷贝,彻底解决了高分辨率视频渲染卡顿的问题。实测4K分辨率下CPU占用率能降低50%。

更进一步,完全的3D体验

VR、AR、元宇宙场景下,视频具备了3D体验,那为什么不更进一步,让音频也具备3D效果呢?

基于这样的思路,我们引入了6DoF全景声空间音频方案,6DoF中的x,y,z参数对应位移信息,yaw,pitch,roll对应旋转信息,如下图所示
在这里插入图片描述
在Unity场景中,根据观众与视频画面的空间位置,设定具体的6DoF参数,就可以让场景中的声音也具备空间感。

如此,我们就可以为用户带来视觉、听觉上完全的3D体验。

怎么使用

以上技术都已在百度智能云Unity播放器SDK中开放,并且已经在百度业务中等到了实际应用,文章开始的两个例子就是使用我们的SDK来完成的。

欢迎各位开发者接入、测试,共建更完美的VR/AR/元宇宙视听体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT能够知道当下最流行的开发语言,以及各语言哪个开发框架最火吗?

如果你准备成为一名开发人员,但是面对琳琅满目的开发语言,然后每种语言的开发框架却无从下手,张三推荐你学这个,李四推荐你学那个,而你的时间又是有限的,于是我决定问一问这个万事通ChatGPT。 目录 1. 目前…

C语言小项目 -- 扫雷游戏完整代码(递归展开 + 选择标记)

目录 🚀0. 游戏介绍: 🐷 游戏规则 🛸雷诀八条 🚀1. 开发环境及框架: 🚀2. 游戏具体功能分析实现: 🐷2.1 棋盘 🐷2.2 棋盘初始化 init_Board; &#x1…

用Abp实现两步验证(Two-Factor Authentication,2FA)登录(三):免登录验证

文章目录原理修改请求报文配置JwtBearerOptions生成Token校验Token修改认证EndPoint修改前端登录登出最终效果项目地址免登录验证是用户在首次两步验证通过后,在常用的设备(浏览器)中,在一定时间内不需要再次输入验证码直接登录。…

Go 语言 入门 基于 GoLand 2023.1 创建第一个Go程序

文章目录Go 语言 入门go 语言是什么?go 入门 需要 学习 什么?Go 语言有 那些优势?Go 语言 与 Java 语言 对比Go 语言 与Python 语言 对比Go 语言 基于 GoLand 创建第一个程序1. 打开 GoLand2.选择 new3. 选择SDK版本4. 输入项目名称,点击 cteate项目创建完成下一步,创建一个…

SpringBoot-心跳机制+redis实现网站实时在线人数统计

在社交网站中,通常需要实时统计某个网站的在线人数,通过该指标来实时帮助运营人员更好的维护网站业务: 先说一下目前在市面上主流的做法再加上我自己查阅的资料总结: 创建一个session监听器,在用户登录时即创建一个s…

WEB集群之反向代理,动静分离,NFS,mysql,MHA高可用

目录 第一章实验架构 1.1.实验图谱架构 1.2.实验前环境部署 第二章实验步骤 2.1.在ha01,ha02上部署keeplived,lvs-dr 2.2.Slave01,slave02安装nginx 2.3.LVS负载均衡 2.4.搭建动态网页 2.5.nginx反向代理 2.6.部署NFS 2.7.安装mysql 2.8.安装mha 2.9.主…

教你安装 CodeWhisperer: 一款个人免费的类似GitHubCopilot能代码补全的 AI 编程助手

1、官网 AI Code Generator - Amazon CodeWhisperer - AWS 官方扩展安装教程 2、安装VSCode 下载安装VSCode 3、VSCode安装CodeWhisperer插件 安装VSCode插件 - AWS Toolkit主侧栏,点击AWS ,展开CodeWhisperer,点击Start 在下拉菜单中点…

洗浴中心管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址: 更多系统资源库地址:骚戴的博客_CSDN_更多系统资源 更多系统…

煤矿井下人员精准定位系统,煤矿应急救援高效应用

煤矿行业的安全发展,事关数人民群众的生命财产安全。自2020年起,国家连续三年出台煤矿智能化建设及重大风险防控的相关指导政策,其中,2022年出台的《煤矿及重点非煤矿山重大灾害风险防控建设工作总体方案》中提到,要充…

52 openEuler搭建PostgreSQL数据库服务器-管理数据库角色

文章目录52 openEuler搭建PostgreSQL数据库服务器-管理数据库角色52.1 创建角色创建角色示例52.2 查看角色查看角色示例52.3 修改角色52.3.1 修改用户名52.3.2 修改用户示例52.3.3 修改用户密码52.3.4 修改角色密码示例52.4 删除角色删除角色示例52.5 角色授权角色授权示例52.6…

Python旅游好帮手:提前15天准备五一旅游景点详细数据

人生苦短,我用python 虽然还是有15天才放五一的假, 但是我的心早已经在旅游的路上了~ 本文源码:点击此处跳转文末名片获取 趁现在,先来用python做一个旅游攻略 知识点: requests parsel csv 第三方库&#x…

python查看时间序列数据的季节规律matplotlib画时间(10分钟为间隔)序列坐标

目录0 问题描述1. 案例12. 案例2参考资料0 问题描述 将多个时间序列数据,绘制到一张图上,每段时间序列数据一般只有几个月,少则 1 个月左右,想看它们的季节规律,需要去除年份,只看月份。 也就是横轴是1月…

44.CSS Grid布局概述

什么是CSS Grid? ● CSS Grid 是一组用于构建二维布局的 CSS 属性 ● CSS Grid 背后的主要思想是我们将容器元素划分为行和列,这些行和列可以填充是子元素。 ● 在两段式语境中,CSS网格允许我们写出更少的嵌套HTML和更容易阅读的CSS ● CSS …

二分查找原理及使用场景

建议使用左闭右开区间[l, r)查找。二分查找的最后,索引l,r会落到右区间第一个元素位置。因此但凡是能够见数组分成左右两个区间的都能应用二分查找法。 1、普通查值 常见问题方式:寻找含重复值的有序数组 [...,a, tar, tar, tar,.b....]&am…

AI制药 - RCSB PDB 数据集的多维度分析与整理 (1)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130089781 整体: RCSB PDB 数据集是一个收集了蛋白质的三维结构信息的数据库,是世界蛋白质数据库(…

SQL SERVER调Web Service时候权限错误的解决

日期 2023/4/15 18:00:00 日志 作业历史记录 (AIPACS) 步骤 ID 1 服务器 GOOGLE 作业名称 AIPACS 步骤名称 RUNWS 持续时间 00:00:00 SQL 严重性 16 SQL 消息 ID 15281 已通过电子邮件通知的操作员 已通过…

MATLAB 基于空间格网的点云抽稀 (3)

MATLAB 基于空间格网的点云抽稀 (3) 一、实现效果二、原理步骤三、代码实现四、重点函数与对象的解释说明4.1 indices= pcbin(incloud,[rowNum colNum LayerNum]);4.2 occupancyGrid = cellfun(@(c) ~isempty(c), indices);4.3 outpointIndex = [];4.4 outpointIndex(end+1) …

基于ubuntu18.04上搭建OpenWRT-rtd1619环境

下载OpwnWRT的源码 下载路径:https://gitee.com/yangquan3_admin/rtd1619 您需要以下工具来编译 OpenWrt,包名称因发行版而异。 在 Build System Setup 文档中可以找到包含特定于发行版的软件包的完整列表。 binutils bzip2 diff find flex gawk gcc-6…

【Linux进阶篇】系统网络附加存储

目录 🍁NFS 🍂软件安装 🍂服务端配置 🍂客户端配置 🍂访问浏览器测试 🍁iscsi 🍂服务器端安装软件 🍂服务器端配置iscsi 🍂客户端软件安装配置 🍁常用的端口号…

这6个免费去水印工具,一定要码住!

现在很多平台会在用户保存图片/视频的时候自动给视频添加一个平台的水印,这在一定程度上影响了它的美观和使用。 下面我来分享几个图片/视频一键去水印方法,操作简单还不会损坏画质哦! 1. Magic Eraser 这是一个魔术橡皮擦在线网站&#x…