2015-12-18 3 views
7

Я пытаюсь загрузить видео по URL-адресу, но я все равно получаю ту же ошибку. Я использую 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, но выглядит так, что она не останавливает выполнение функции. Если вы подождете немного дольше, фильм начнет нормально и без проблем звука (убедитесь, что 'pixelInset' установлен на какую-то видимую часть экрана). –

+0

Для меня это прекращает выполнение. Когда он работал над предыдущими версиями, у меня были аудио и настройки, чтобы увидеть видео. – Alex

ответ

0

Я не буду предлагать решение с WWW.movie, но это альтернативное решение, которое может помочь вам или кому-либо еще. на 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

Я нашел решение! Я тестировал код с единством 5.2.X и 5.3.X.

Я не знаю, почему, но Unity 3d требует первого ожидания unitl, загрузка выполняется с помощью isDone == true, а после копии текстуры подождать до isReadyToPlay == true.

Файл фильма должен быть форматом OGG Video, некоторые файлы 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.movie;' - ошибка чтения: Ошибка: не удается создать экземпляр FMOD :: Sound для ресурса (null) , (Неверный параметр был передан этой функции.) UnityEngine.WWW: get_movie(). У вас есть какие-либо компоненты, прикрепленные к тому же объекту, что и этот скрипт, или что-то еще, что я могу пропустить? –

+0

В Unity 5.3.1 Эта ошибка на самом деле является ПРЕДУПРЕЖДЕНИЕМ. Если вы скомпилируете свой проект, он будет работать отлично. Возможно, это всего лишь ошибки Unity 3D EDITOR. –

+0

Еще одна важная вещь: вы должны подключить Audio Source и Mesh Render к объекту, к которому вы прикрепляете этот код. –

Смежные вопросы