fix cast
All checks were successful
Publier l'image Docker / test (push) Successful in 20s
Publier l'image Docker / publish (push) Successful in 8s

This commit is contained in:
Nicolas 2026-09-15 19:31:30 +02:00
parent e61b302f6e
commit 80c6065dfd

View file

@ -132,22 +132,44 @@ export function onCastSessionEnded(listener: () => void): () => void {
* 'play'/'pause'/'seeked' events, to know when to re-broadcast as host.
*/
export async function startCast(contentUrl: string, title: string, onRemoteStateChanged: () => void): Promise<PlaybackDriver> {
console.info(`Trying to cast ${title} from ${contentUrl}`);
const framework = window.cast!.framework;
const chromeCast = (window.chrome as any)?.cast;
const context = framework.CastContext.getInstance();
await context.requestSession();
const session = context.getCurrentSession();
if (!session) throw new Error('Aucune session Cast active après requestSession().');
if (!session) {
throw new Error('Aucune session Cast active après requestSession().');
}
const mediaInfo = new window.chrome!.cast!.media.MediaInfo(contentUrl, 'application/vnd.apple.mpegurl');
// 1. Initialisation de MediaInfo avec le MIME HLS universel
const mediaInfo = new chromeCast.media.MediaInfo(contentUrl, 'application/x-mpegurl');
if (chromeCast.media.StreamType) {
mediaInfo.streamType = chromeCast.media.StreamType.BUFFERED;
}
// 2. Structuration des metadonnées
if (chromeCast.media.GenericMediaMetadata) {
const metadata = new chromeCast.media.GenericMediaMetadata();
metadata.title = title;
mediaInfo.metadata = metadata;
} else {
mediaInfo.metadata = { title };
await session.loadMedia(new window.chrome!.cast!.media.LoadRequest(mediaInfo));
}
// 3. Préparation et envoi de la requête de chargement
const request = new chromeCast.media.LoadRequest(mediaInfo);
request.autoplay = true;
await session.loadMedia(request as any);
const player = new framework.RemotePlayer();
const controller = new framework.RemotePlayerController(player);
controller.addEventListener(framework.RemotePlayerEventType.IS_PAUSED_CHANGED, onRemoteStateChanged);
controller.addEventListener(framework.RemotePlayerEventType.CURRENT_TIME_CHANGED, onRemoteStateChanged);
console.info(`Casting ${title} from ${contentUrl}`);
return {
get currentTime() { return player.currentTime; },
set currentTime(seconds: number) { player.currentTime = seconds; controller.seek(); },