MovieTexture est finalement déprécié après la sortie de la version 5.6.0b1 d'Unity et une nouvelle API qui lit les vidéos sur les appareils de bureau et mobiles est maintenant disponible.
VideoPlayer y VideoClip peut être utilisé pour lire une vidéo et récupérer la texture pour chaque image si nécessaire.
J'ai réussi à faire fonctionner la vidéo mais je n'ai pas réussi à faire fonctionner l'audio à partir de l'éditeur sur Windows 10. Quelqu'un sait-il pourquoi l'audio ne fonctionne pas ?
//Raw Image to Show Video Images [Assign from the Editor]
public RawImage image;
//Video To Play [Assign from the Editor]
public VideoClip videoToPlay;
private VideoPlayer videoPlayer;
private VideoSource videoSource;
//Audio
private AudioSource audioSource;
// Use this for initialization
void Start()
{
Application.runInBackground = true;
StartCoroutine(playVideo());
}
IEnumerator playVideo()
{
//Add VideoPlayer to the GameObject
videoPlayer = gameObject.AddComponent<VideoPlayer>();
//Add AudioSource
audioSource = gameObject.AddComponent<AudioSource>();
//Disable Play on Awake for both Video and Audio
videoPlayer.playOnAwake = false;
audioSource.playOnAwake = false;
//We want to play from video clip not from url
videoPlayer.source = VideoSource.VideoClip;
//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");
//Set Audio Output to AudioSource
videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
//Assign the Audio from Video to AudioSource to be played
videoPlayer.EnableAudioTrack(0, true);
videoPlayer.SetTargetAudioSource(0, audioSource);
//Assign the Texture from Video to RawImage to be displayed
image.texture = videoPlayer.texture;
//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");
}
0 votes
Avez-vous converti vous-même le poste à la communauté ?
0 votes
@Lestat Je ne l'ai pas fait mais je l'aurais fait si j'avais pu. Il semble que Martijn Pieters a fait puisque cette question était abusée par de nouveaux utilisateurs qui ne postaient que des questions comme réponse. Il a dû supprimer plusieurs de ces réponses/questions.
0 votes
J'ai créé un tutoriel vidéo sur l'utilisation de VideoPlayer. Voici le lien. youtu.be/nGA3jMBDjHk .
0 votes
Si vous chargez plusieurs vidéos et que vous êtes confronté à un décalage dans l'application, cela peut vous aider. stackoverflow.com/questions/42801468/
0 votes
Il semble que VideoPlayer.prepare() fonctionne sur le fil principal ! Surtout sur Android. Le résultat est une application qui se bloque pendant que prepare() fonctionne ! Ce qui rend cette nouvelle interface presque inutilisable. Et vous ne pouvez pas non plus l'exécuter sur le thread bckd. Quelqu'un a trouvé une solution ?
0 votes
Non. Il fonctionne en arrière-plan et ne bloque pas le fil de discussion principal. Veuillez poster votre code sur pastebin puis le lier ici et je jetterai un coup d'œil. Mentionnez également votre version d'Unity.
0 votes
J'ai un exemple de code ici github.com/tati-nacmedia/testvplayer/blob/master/Assets/ j'ai mis un paquet d'unité ici aussi github.com/tati-nacmedia/testvplayer/blob/master/ il fonctionne bien sur Windows, iOS, mais est très lent sur Android. J'ai lu quelque part un développeur d'unity disant qu'il ne supporte pas l'asynchronisme sur Android. Je ne me souviens plus où. J'ai ajouté un délai de préparation pour démontrer le décalage en utilisant la coroutine.