Lecteurs vidéo
VideoPlayer est le lecteur vidéo du jeu du joueur : il ouvre une adresse (un fichier vidéo, un direct, ou la page d'un site de vidéos, que le jeu transforme en sa vidéo), dessine l'image dans un matériau de ton monde et joue le son par tes Audio Sources. Le jeu de chaque joueur lit la vidéo pour lui-même ; ton script les garde ensemble. Le serveur n'a pas de lecteur vidéo : marque ces scripts [ClientOnly].
using NodeWorld.Flux;
namespace MonMonde
{
[ClientOnly]
public class Ecran : FluxScript
{
public Material ecran; // le matériau de l'écran
public AudioSource enceinte;
public string adresse = "https://example.com/film.mp4";
private VideoPlayer _lecteur;
protected override void Start()
{
_lecteur = VideoPlayer.Create();
_lecteur.SetMaterialTarget(ecran, "_BaseMap");
_lecteur.SetAudioOutputs(new[] { enceinte });
_lecteur.Load(adresse);
}
protected override void OnDestroy() => _lecteur.Release();
}
}Le lecteur
VideoPlayer.Create() | Un nouveau lecteur. Dans un jeu sans vidéo (le lecteur vidéo est fourni pour Windows x64, Linux x64 et Android), son error vaut Unavailable et le journal le dit. |
Load(url, startTime, play) | Ouvre l'adresse à startTime secondes ; la lit dès qu'elle est chargée si play (par défaut). |
Play(), Pause(), Stop() | Stop décharge la vidéo. |
state | VideoState.Idle, Loading, Ready, Playing, Paused, Ended, Error ; isPlaying. |
error | Pourquoi elle a échoué : VideoError.InvalidUrl (pas une vidéo), PlayerError (réseau, format), AccessDenied (privée, région, connexion), RateLimited (le site refuse pour l'instant), Unavailable (pas de lecteur vidéo), Refused (le joueur a refusé le site, ou l'adresse est sur son réseau local). |
time, duration, rate | Position en secondes (la changer fait un saut), durée (0 tant qu'elle est inconnue et pour un direct), vitesse (1 normale). |
isLive, width, height | Un direct (pas de durée, pas de saut), et la taille de l'image. |
SetMaterialTarget(material, textureProperty, show) | Le matériau affiche l'image dans cette propriété de texture (_BaseMap pour le Lit d'URP) ; plusieurs matériaux le peuvent. show à false la retire. |
SetAudioOutputs(sources, gainsDb) | Ces Audio Sources jouent le son, chacune avec un gain en dB (−60 à 24) avant son propre volume ; leur volume, leur mute et leurs réglages 3D s'appliquent. Aucune : muet. |
Release() | Libère le lecteur. Il l'est aussi avec le monde. |
Les adresses
Toutes les adresses réseau du lecteur vidéo marchent (http, https, rtmp, rtsp, udp, srt…) ; un fichier, un écran ou un périphérique de capture, non. Dans le jeu de chaque joueur, l'adresse passe d'abord par la porte réseau : la première vidéo d'un site demande l'accord du joueur, sauf sur les grands sites de vidéos (les sites qu'un monde contacte). Pendant ce temps, l'état est Loading ; un site refusé donne VideoError.Refused.
Tout le monde au même moment
Chaque jeu lit sa propre copie de la vidéo. Partage ce qui passe avec l'état synchronisé : l'adresse, en lecture ou en pause, et où en était la vidéo à un instant de l'horloge du serveur. Chaque jeu calcule où elle en est maintenant, la charge à cet endroit, et revient en arrière quand il dérive. Le script Television du monde d'exemple le fait pour un écran que tout le monde commande, joueurs arrivés plus tard compris : pars de lui.
Un composant Video Player de Unity dans ta scène ne lit qu'un clip inclus dans le monde (ce qu'un monde peut contenir).
