博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移动端播放视频文件
阅读量:6168 次
发布时间:2019-06-21

本文共 2371 字,大约阅读时间需要 7 分钟。

移动端

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

(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);
话不投机,两句多,还是果断第三方插件, 就是很不错的东西,利用开源视频编解码库进行视频解码,然后通过Unity Texture实现显示。下图为多视频显示效果:

 
应用中的一些问题: (1)因为视频编解码库是使用 ,所以只能支持OGG、OGV格式的视频和音频,如果要使用其他格式则需要转换一下,可以工具进行转换。 (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

本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/6873089.html如需转载请自行联系原作者

jiahuafu

你可能感兴趣的文章
ZFPlayer 源码解读
查看>>
QT全局宏变量的实现
查看>>
传智168期JavaEE就业班 day01-html
查看>>
[Todo]对于thrift和protobuf比较好的描述
查看>>
分布式协调服务ZooKeeper工作原理
查看>>
对象序列化(三):控制序列化过程
查看>>
HeadFirst设计模式笔记:(六)命令模式 —— 封装调用
查看>>
SQL Server 2008 游标使用实例
查看>>
eclipse 如何忽略js文件报错
查看>>
OpenSSL命令---pkcs12
查看>>
ViewPager,实现真正的无限循环(定时+手动)
查看>>
FineUI(专业版)v2.6.0即将支持的两个新特性!
查看>>
Leetcode: H-Index
查看>>
从国与国到人与人
查看>>
生成freeswitch事件的几种方式
查看>>
不再平庸
查看>>
oracle循环语句
查看>>
嵌入式开发之hi3519---i2c MDIO PHY uboot phy调试总结
查看>>
『参考』.net CF组件编程(1)——基础之后
查看>>
asp.net真的是并行处理request的吗?
查看>>