Dans Chrome et Firefox, nous pouvons utiliser HTMLMediaElement.captureMediaStream() pour capturer le flux. Mais Safari ne prend pas en charge HTMLMediaElement.captureMediaStream().
La source de la balise vidéo sont les données hls reçues en segments.
Existe-t-il un autre moyen de capturer des données multimédias sous forme de MediaStream dans Safari ?
Safari ne prend pas en charge la méthode captureMediaStream directe, du moins pour l'instant, comme vous pouvez le voir, mais une façon d'y parvenir est d'utiliser la méthode basée sur ffmpeg du navigateur.
Dans le passé, exécuter ffmpeg dans le navigateur n'était pas pratique pour la plupart des tâches car il était trop volumineux et trop lent, mais les récentes implémentations de ffmpeg basées sur WASM (Web Assembly) l'ont rendu plus accessible.
Vous pouvez créer votre propre solution basée sur ffmpeg en utilisant les bibliothèques suivantes :
Vous devez vraiment être conscient de la nécessité du support de SharedArrayBuffer :
Le lien mentionné ci-dessus est ici : https://caniuse.com/sharedarraybuffer
J'ai trouvé que cela fonctionne bien pour de nombreuses tâches ffmpeg courantes, mais il est sensible aux fichiers vidéo plus volumineux - je n'ai pas essayé la conversion HLS en fichier, vous devrez donc expérimenter pour voir si cela fonctionne pour vos besoins. Voici une démo où vous pouvez tester votre cas d'utilisation : https://ffmpegwasm.netlify. applications/#démo
La commande ffmpeg que vous souhaitez utiliser dépend de l'audio, mais très probablement :
(Voir cette question et réponse pour plus de détails : Convertir HLS (m3u8) en MP4)
Il existe également des solutions open source prêtes à l'emploi que vous pouvez découvrir - par exemple :