-
Notifications
You must be signed in to change notification settings - Fork 0
/
videoStartScreen.cs
141 lines (92 loc) · 2.89 KB
/
videoStartScreen.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
using UnityEngine.UI;
public class videoStartScreen : MonoBehaviour
{
private VideoClip videoToPlay;
private Color targetColor;
private VideoPlayer videoPlayer;
private VideoSource videoSource;
private Renderer rend;
[SerializeField]
private Texture tex;
private AudioSource audioSource;
private Texture2D videoFrame;
private bool bCallMatCreationOnce = false;
private bool bRecordingMode = false;
void Start()
{
initVideo ();
}
public void initVideo(){
videoFrame = new Texture2D(2, 2);
Application.runInBackground = true;
StartCoroutine(playVideo());
}
IEnumerator playVideo()
{
//rend = GetComponent<Renderer>();
videoPlayer = gameObject.GetComponent<VideoPlayer>();
audioSource = gameObject.AddComponent<AudioSource>();
//videoPlayer.Stop ();
//Disable Play on Awake for both Video and Audio
videoPlayer.playOnAwake = false;
audioSource.playOnAwake = false;
//videoPlayer.source = VideoSource.VideoClip;
videoPlayer.source = VideoSource.Url;
videoPlayer.url = Application.dataPath + "/StreamingAssets/logo.mp4";//VideoSource.Url;
videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
videoPlayer.EnableAudioTrack(0, true);
videoPlayer.SetTargetAudioSource(0, audioSource);
//Set video To Play then prepare Audio to prevent Buffering
videoPlayer.clip = videoToPlay;
videoPlayer.Prepare();
//Wait until video is prepared
while (!videoPlayer.isPrepared)
{
Debug.Log("Preparing Video");
yield return null;
}
Debug.Log("Done Preparing Video");
//Assign the Texture from Video to Material texture
tex = videoPlayer.texture;
//rend.material.mainTexture = tex;
//force vidoe player to not skip frames
videoPlayer.skipOnDrop = false;
//Enable new frame Event
videoPlayer.sendFrameReadyEvents = true;
//Subscribe to the new frame Event
videoPlayer.frameReady += OnNewFrame;
//Subscribe to the new frame Event
videoPlayer.loopPointReached += OnLoop;
//Play Video
videoPlayer.Play();
//Play Sound
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");
}
void OnLoop(VideoPlayer source){
}
//Initialize in the Start function
void OnNewFrame(VideoPlayer source, long frameIdx)
{
RenderTexture renderTexture = source.texture as RenderTexture;
if (videoFrame.width != renderTexture.width || videoFrame.height != renderTexture.height)
{
videoFrame.Resize(renderTexture.width, renderTexture.height);
}
RenderTexture.active = renderTexture;
videoFrame.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
videoFrame.Apply();
RenderTexture.active = null;
tex = renderTexture;
}
}