Why video texture missing after playing video for the second time? and only play the audio
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Video;
public class StreamVideo : MonoBehaviour {
public RawImage image;
public VideoClip videoToPlay;
private VideoPlayer videoPlayer;
private VideoSource videoSource;
private AudioSource audioSource;
void Start () {
Application.runInBackground = true;
StartCoroutine(playVideo());
}
IEnumerator playVideo()
{
videoPlayer = gameObject.AddComponent<VideoPlayer>();
audioSource = gameObject.AddComponent<AudioSource>();
videoPlayer.playOnAwake = true;
audioSource.playOnAwake = true;
audioSource.Pause();
videoPlayer.source = VideoSource.VideoClip;
videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
videoPlayer.EnableAudioTrack(0, true);
videoPlayer.SetTargetAudioSource(0, audioSource);
videoPlayer.clip = videoToPlay;
videoPlayer.Prepare();
WaitForSeconds waitTime = new WaitForSeconds(1);
while (!videoPlayer.isPrepared)
{
Debug.Log("Preparing Video");
yield return waitTime;
break;
}
Debug.Log("Done Preparing Video");
image.texture = videoPlayer.texture;
videoPlayer.Play();
audioSource.Play();
Debug.Log("Playing Video");
while (videoPlayer.isPlaying)
{
Debug.LogWarning("Video Time: " + Mathf.FloorToInt((float)videoPlayer.time));
yield return null;
}
Debug.Log("Done Playing Video");
}
}
when i play video for the first time
and this when i back and touch the button for the second time to play video
How do you play the video the second time? If you're calling playVideo() coroutine again, it might be a problem. I'm not sure. Last night I wrote a similar script that assigns url, prepares and lastly, assigns the rawimage. I then used Play() and Pause() as a seperate function. If I want to replay the video I do not redo the process of adding new components, assigning properties and preparing. And it works so far.
Answer by Fer9897 · Nov 08, 2018 at 11:22 PM
I had a similar issue; for me this works void FixedUpdate () { StartCoroutine(PlayVideo()); }
Use StartCoroutine in FixedUpdate instead Start
Answer by stc664 · May 14, 2020 at 08:07 AM
For anyone that comes after myself, I had the same issue but I managed to fix it by setting the 'Play On Awake' of the Video Player component to checked.
I am not sure how this fixed it, but I hope it is the solution for anyone else!
Your answer
Follow this Question
Related Questions
Null Reference Exception anytime scene is reloaded? 1 Answer
How do I set value ScriptableObject list element property in script? 1 Answer
Array of dictionaries: "Object reference not set to an instance of an object" 0 Answers
Object reference not set to an instance of an object 1 Answer
Random Chance NullReferenceException: Object reference not set to an instance of an object 2 Answers