Unity3D播放视频

Posted alps_01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D播放视频相关的知识,希望对你有一定的参考价值。

http://blog.csdn.net/awnuxcvbn/article/details/17618919

 

点击这里下载视频转换器,该转换器会把其他格式转化为ogv格式,直接被unity识别,不需要安装quicktime不需要重启,更为重要的是比把mov导入unity的要清晰。

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

 

[csharp] view plain copy
 
 技术分享技术分享
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class MovieTest : MonoBehaviour  
  5. {  
  6.     //电影纹理  
  7.     public MovieTexture movTexture;  
  8.   
  9.     void Start()  
  10.     {  
  11.         //设置当前对象的主纹理为电影纹理  
  12.         renderer.material.mainTexture = movTexture;  
  13.         //设置电影纹理播放模式为循环  
  14.         movTexture.loop = true;  
  15.         //StartCoroutine(DownLoadMovie());  
  16.     }  
  17.   
  18.     void OnGUI()  
  19.     {  
  20.         if (GUILayout.Button("播放/继续"))  
  21.         {  
  22.             //播放/继续播放视频  
  23.             if (!movTexture.isPlaying)  
  24.             {  
  25.                 movTexture.Play();  
  26.             }  
  27.         }  
  28.   
  29.         if (GUILayout.Button("暂停播放"))  
  30.         {  
  31.             //暂停播放  
  32.             movTexture.Pause();  
  33.         }  
  34.   
  35.         if (GUILayout.Button("停止播放"))  
  36.         {  
  37.             //停止播放  
  38.             movTexture.Stop();  
  39.         }  
  40.     }  
  41.   
  42.     IEnumerator DownLoadMovie()  
  43.     {  
  44.         WWW www = new WWW("http://127.0.0.1/Head.ogv");  
  45.         yield return www;  
  46.         Debug.Log(Time.time);  
  47.         movTexture = www.movie;  
  48.         //设置当前对象的主纹理为电影纹理  
  49.         renderer.material.mainTexture = movTexture;  
  50.         movTexture.loop = true;  
  51.     }  
  52.   
  53. }  

 

加声音

 

[csharp] view plain copy
 
 技术分享技术分享
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class MovieTest : MonoBehaviour  
  5. {  
  6.     //电影纹理  
  7.     public MovieTexture movTexture;  
  8.     //声音  
  9.     public Audiosource movAudio;  
  10.   
  11.     void Start()  
  12.     {  
  13.         //设置当前对象的主纹理为电影纹理  
  14.         renderer.material.mainTexture = movTexture;  
  15.         //设置电影纹理播放模式为循环  
  16.         movTexture.loop = true;  
  17.         //StartCoroutine(DownLoadMovie());  
  18.     }  
  19.   
  20.     void OnGUI()  
  21.     {  
  22.         if (GUILayout.Button("播放/继续"))  
  23.         {  
  24.             //播放/继续播放视频  
  25.             if (!movTexture.isPlaying)  
  26.             {  
  27.                 movTexture.Play();  
  28.                 movAudio.Play();  
  29.             }  
  30.         }  
  31.   
  32.         if (GUILayout.Button("暂停播放"))  
  33.         {  
  34.             //暂停播放  
  35.             movTexture.Pause();  
  36.             movAudio.Pause();  
  37.         }  
  38.   
  39.         if (GUILayout.Button("停止播放"))  
  40.         {  
  41.             //停止播放  
  42.             movTexture.Stop();  
  43.             movAudio.Stop();  
  44.         }  
  45.     }  
  46.   
  47.     IEnumerator DownLoadMovie()  
  48.     {  
  49.         WWW www = new WWW("http://127.0.0.1/Head.ogv");  
  50.         yield return www;  
  51.         Debug.Log(Time.time);  
  52.         movTexture = www.movie;  
  53.         //设置当前对象的主纹理为电影纹理  
  54.         renderer.material.mainTexture = movTexture;  
  55.         movTexture.loop = true;  
  56.     }  
  57.   
  58. }  


技术分享

 

 

注:1280*720分辨率的视频以此方法播放不会产生黑边。

 

以前只是测试,没有实际使用,发现多次点击播放后会有内存泄露。如下方法解决

 

 

[csharp] view plain copy
 
 技术分享技术分享
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class WebMovie : MonoBehaviour {  
  5.   
  6.     //电影纹理  
  7.     public MovieTexture movTexture;  
  8.     WWW www;  
  9.     void Start()  
  10.     {  
  11.           
  12.     }  
  13.   
  14.     void OnGUI()  
  15.     {  
  16.         if (GUILayout.Button("加载视频"))  
  17.         {  
  18.             StartCoroutine(DownLoadMovie());  
  19.         }  
  20.         if (GUILayout.Button("播放/继续"))  
  21.         {  
  22.             //播放/继续播放视频  
  23.             if (!movTexture.isPlaying)  
  24.             {  
  25.                 movTexture.Play();  
  26.             }  
  27.         }  
  28.   
  29.         if (GUILayout.Button("暂停播放"))  
  30.         {  
  31.             //暂停播放  
  32.             movTexture.Pause();  
  33.         }  
  34.   
  35.         if (GUILayout.Button("停止播放"))  
  36.         {  
  37.             //停止播放  
  38.             movTexture.Stop();  
  39.         }  
  40.   
  41.         if (GUILayout.Button("卸载内存"))  
  42.         {  
  43.             renderer.material.mainTexture = null;  
  44.             movTexture = null;  
  45.             www = null;  
  46.             Resources.UnloadUnusedAssets();  
  47.         }  
  48.     }  
  49.   
  50.     IEnumerator DownLoadMovie()  
  51.     {  
  52.          www = new WWW("http://127.0.0.1/mumaren.ogv");  
  53.         yield return www;  
  54.         Debug.Log(Time.time);  
  55.         movTexture = www.movie;  
  56.         //设置当前对象的主纹理为电影纹理  
  57.         renderer.material.mainTexture = movTexture;  
  58.         movTexture.loop = true;  
  59.     }  
  60.   
  61. }  


就是销毁www对象,但是在这之前,要去掉别的对象对www的引用,比如材质球的主贴图、声明的movTexture,或许还有audioClip。

以上是关于Unity3D播放视频的主要内容,如果未能解决你的问题,请参考以下文章

csharp 从Unity3D中的CoherentUI浏览器获取PCM音频数据,并通过Unity音频过滤器播放。

Unity3D两种方式播放视频

Unity3D 怎样在安卓手机上播放视频

Unity3d 播放高质量视频解决方案

Unity3D两种方式实现游戏视频播放

Unity3D播放视频