2015-12-18 122 views
7

我試圖通過網址加載視頻,但我不斷收到相同的錯誤。我使用的是Unity 5.3以及http://docs.unity3d.com/ScriptReference/WWW-movie.html的示例代碼(因爲當前示例未編譯而進行了大量修改)。無法通過WWW加載電影

using UnityEngine; 
using System.Collections; 

// Make sure we have gui texture and audio source 
[RequireComponent (typeof(GUITexture))] 
[RequireComponent (typeof(AudioSource))] 
public class TestMovie : MonoBehaviour { 

    string url = "http://www.unity3d.com/webplayers/Movie/sample.ogg"; 
    WWW www; 

    void Start() { 
     // Start download 
     www = new WWW(url); 

     StartCoroutine(PlayMovie()); 
    } 

    IEnumerator PlayMovie(){ 
     MovieTexture movieTexture = www.movie; 

     // Make sure the movie is ready to start before we start playing 
     while (!movieTexture.isReadyToPlay){ 
      yield return 0; 
     } 

     GUITexture gt = gameObject.GetComponent<GUITexture>(); 

     // Initialize gui texture to be 1:1 resolution centered on screen 
     gt.texture = movieTexture; 

     transform.localScale = Vector3.zero; 
     transform.position = new Vector3 (0.5f,0.5f,0f); 
//  gt.pixelInset.xMin = -movieTexture.width/2; 
//  gt.pixelInset.xMax = movieTexture.width/2; 
//  gt.pixelInset.yMin = -movieTexture.height/2; 
//  gt.pixelInset.yMax = movieTexture.height/2; 

     // Assign clip to audio source 
     // Sync playback with audio 
     AudioSource aud = gameObject.GetComponent<AudioSource>(); 
     aud.clip = movieTexture.audioClip; 

     // Play both movie & sound 
     movieTexture.Play(); 
     aud.Play(); 

    } 

} 

我說這是一個腳本,在新場景中的主攝像頭,和我得到這個錯誤:

Error: Cannot create FMOD::Sound instance for resource (null), (An invalid parameter was passed to this function.) 
UnityEngine.WWW:get_movie() 
<PlayMovie>c__Iterator4:MoveNext() (at Assets/TestMovie.cs:20) 
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator) 
TestMovie:Start() (at Assets/TestMovie.cs:16) 

(第20行是MovieTexture movieTexture = www.movie;) 我一直工作在本作現在,它發生在很多文件和我的兩個系統上。

+1

我已經能夠使用Unity 5.2和5.1播放視頻。這是這個問題的最新版本。 – Alex

+1

您是否試圖稍等一會?我不知道爲什麼現在出現這個錯誤,可能是Unity bug,但是看起來它不會停止函數執行。如果再等一會兒,電影將正常啓動,並且沒有聲音問題(確保'pixelInset'設置爲屏幕的某個可見部分)。 –

+0

對我來說,它確實停止執行。當它工作在以前的版本時,我有音頻和調整設置以查看視頻。 – Alex

回答

0

我不會提供WWW.movi​​e的解決方案,而是一種可以幫助您或其他人的替代解決方案。 在IPhone,我們沒有找到一個解決方案,以流從服務器的視頻,我們決定閱讀它之前下載的視頻,在這裏是如何:

string docPath = Application.persistentDataPath + "/" + id + ".mp4"; 
if (!System.IO.File.Exists(docPath)) 
{ 
    WWW www = new WWW(videouUrl); 
    while(!www.isDone) 
    { 
    yield return new WaitForSeconds(1); 
    Loading.Instance.Message = "Downloading video : " + (int)(www.progress * 100) + "%"; 
    if (!string.IsNullOrEmpty(www.error)) 
     Debug.Log(www.error); 
    } 
    byte[] data = www.bytes; 
    System.IO.File.WriteAllBytes(docPath, data); 
} 

mediaPlayer.Load(docPath); 
onVideoReady(); 

mediaPlayer.Play(); 

這是用來下載並寫上該視頻的協同程序iPhone的文件系統。一旦完成,您可以加載並播放它。 希望它有幫助。

2

我找到了解決方案!我使用unity 5.2.X和5.3.X來測試代碼。

我不知道爲什麼,但Unity3D需要第一個等待的單元下載完成與isDone == true和複製後紋理等待,直到isReadyToPlay == true

電影文件必須是OGG視頻格式某些MP4文件不起作用。

好吧。檢查代碼:

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class MovieTextureStream : MonoBehaviour { 
    public Text progressGUI; 
    public MeshRenderer targetRender = null; 
    public AudioSource targetAudio = null; 
    public string URLString = "http://unity3d.com/files/docs/sample.ogg"; 
    MovieTexture loadedTexture; 

    IEnumerator Start() { 

     if(targetRender ==null) targetRender = GetComponent<MeshRenderer>(); 
     if(targetAudio ==null) targetAudio = GetComponent<AudioSource>(); 

     WWW www = new WWW (URLString); 
     while (www.isDone == false) { 
      if(progressGUI !=null) progressGUI.text = "Progresso do video: " + (int)(100.0f * www.progress) + "%"; 
      yield return 0; 
     } 

     loadedTexture = www.movie; 
     while (loadedTexture.isReadyToPlay == false) { 
      yield return 0; 
     } 
     targetRender.material.mainTexture = loadedTexture; 
     targetAudio.clip = loadedTexture.audioClip; 
     targetAudio.Play(); 
     loadedTexture.Play(); 
    } 
} 
+0

我嘗試使用你的代碼逐字,並且我仍然得到相同的錯誤出現在線'loadedTexture = www.movi​​e; - 錯誤閱讀:錯誤:無法創建資源的FMOD ::聲音實例(null) ,(將一個無效參數傳遞給此函數。) UnityEngine.WWW:get_movie()。你有沒有任何組件與這個腳本連接到同一個對象,或者我可能會丟失什麼? –

+0

在Unity 5.3.1中這個錯誤實際上是一個警告。如果你編譯你的項目將會很完美。也許這只是一個Unity 3D編輯器錯誤。 –

+0

另一個重要的事情是,您必須將音頻源和網格渲染附加到您附加此代碼的對象。 –