当前位置: 首页 > news >正文

移动端播放视频文件

移动端

在移动端,unity并不提供MovieTexture,AVPro QuickTime也用不了,其最基本的显示方案使用通过PlayFullScreenMovie()函数进行全屏播放,根据其官网解释,主要有以下方面:

(1)视频流直接从设备存储器中获得,所以文件只能是单独提供,视频文件放置在StreamingAssets 文件夹中
(2) 视频播放过陈中,Unity将会停止;播放结束后unity自动恢复;播放过程中屏幕中的颜色会变为播放器的背景颜色,播放之后恢复。
(3)在IOS中,内部实际上是调用MPMoviePlayerController的方法
(4)能够支持的格式: .mov, .mp4, .mpv, and .3gp ,H.264,MPEG-4 Part 2 video

 Handheld.PlayFullScreenMovie ("StarWars.mp4", Color.black, FullScreenMovieControlMode.CancelOnInput);

话不投机,两句多,还是果断第三方插件,Mobile movie texture for android 就是很不错的东西,利用开源视频编解码库Theora进行视频解码,然后通过Unity Texture实现显示。下图为多视频显示效果:



应用中的一些问题:
(1)因为视频编解码库是使用Theora ,所以只能支持OGG、OGV格式的视频和音频,如果要使用其他格式则需要转换一下,可以Theora Converter .NET工具进行转换。
(2)视频seek功能不是很精确,虽然能用
(3)多视频播放问题,如果想要多少视频同时播放,需要理解内部代码的实现,修改后可以凑合着使用。多视频播放的另外一个问题是效率问题,如果是N个视频,可能就会有N个后台线程在进行解码操作,相应的也会有N个渲染管道进行渲染,我在RK3188上进行三个不同视频的播放,就会有卡顿。多视频播放中间理解的关键代码在下面,Texture2D.CreateExternalTexture 函数从视频中获得贴图资源,SetTextures()进行绘制,如果使用多个视频,需要多个材质(也就是多个渲染管道)。
复制代码
        private void AllocateTexures()
        {
            m_ChannelTextures[0] = Texture2D.CreateExternalTexture(m_yStride, m_yHeight, TextureFormat.BGRA32, false, false, GetNativeYHandle(m_nativeContext));
            m_ChannelTextures[1] = Texture2D.CreateExternalTexture(m_uvStride, m_uvHeight, TextureFormat.RGBA32, false, false, GetNativeCrHandle(m_nativeContext));
            m_ChannelTextures[2] = Texture2D.CreateExternalTexture(m_uvStride, m_uvHeight, TextureFormat.RGBA32, false, false, GetNativeCbHandle(m_nativeContext));

            if (m_movieMaterials != null)
            {
                for (int i = 0; i < m_movieMaterials.Length; ++i)
                {
                    var mat = m_movieMaterials[i];

                    if (mat != null)
                    {
                        SetTextures(mat);
                    }
                }
            }
            
        }

        public void SetTextures(Material material)
        {
            material.SetTexture("_YTex", m_ChannelTextures[0]);
            material.SetTexture("_CrTex", m_ChannelTextures[1]);
            material.SetTexture("_CbTex", m_ChannelTextures[2]);

            material.SetTextureScale("_YTex", m_uvYScale);
            material.SetTextureOffset("_YTex", m_uvYOffset);

            material.SetTextureScale("_CbTex", m_uvCrCbScale);
            material.SetTextureOffset("_CbTex", m_uvCrCbOffset);
        }
复制代码




http://www.cnblogs.com/zsb517/p/4060814.html

相关文章:

  • 《Spring 5官方文档》翻译邀请
  • 树莓派玩耍笔记1 -- 开箱 amp; 安装系统以及简单配置
  • Bzoj4161 Shlw loves matrixI
  • 《Spring Data 官方文档翻译》3. 其他帮助资源
  • rdiff-backup:一个 Linux 中的远程增量备份工具
  • 虚拟内存映射 段分割 vm_area_struct
  • springcloud-07-eureka HA的高可用配置
  • Mysql5.7 基目录没有data文件夹 解决方法
  • iOS开发 - 不进入待机(屏幕保持唤醒)---UIApplication学习
  • 利用OpenStreetMap(OSM)数据搭建一个地图服务
  • 定时备份文件下的文件包括子文件和父文件到指定目
  • 《Java特种兵》1.5 功底补充
  • 【老鸟分享】Linux命令行终端提示符多种实用技巧!
  • android studio 无法真机调试
  • 第二百六十九节,Tornado框架-Session登录判断
  • JavaScript-如何实现克隆(clone)函数
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 30秒的PHP代码片段(1)数组 - Array
  • create-react-app做的留言板
  • jquery ajax学习笔记
  • Next.js之基础概念(二)
  • ReactNative开发常用的三方模块
  • webpack4 一点通
  • 给第三方使用接口的 URL 签名实现
  • 基于HAProxy的高性能缓存服务器nuster
  • 事件委托的小应用
  • 王永庆:技术创新改变教育未来
  • 我的业余项目总结
  • 小李飞刀:SQL题目刷起来!
  • gunicorn工作原理
  • Java性能优化之JVM GC(垃圾回收机制)
  • # 飞书APP集成平台-数字化落地
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (007)XHTML文档之标题——h1~h6
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (pojstep1.1.2)2654(直叙式模拟)
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (九十四)函数和二维数组
  • (六)vue-router+UI组件库
  • (六)激光线扫描-三维重建
  • (一)认识微服务
  • ./configure、make、make install 命令
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net 高效开发之不可错过的实用工具
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET4.0并行计算技术基础(1)
  • .NET分布式缓存Memcached从入门到实战
  • /etc/sudoer文件配置简析
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [@Controller]4 详解@ModelAttribute
  • [2021 蓝帽杯] One Pointer PHP