Sous-titres pour AVPlayer/MPMoviePlayerController
Je suis en utilisant m3u8 format vidéo pour le streaming de la vidéo et maintenant j'ai besoin d'afficher des sous-titres pour le même.
J'ai cherché dans la Documentation d'Apple et vu que l'on peut obtenir à l'aide de la closedCaptionDisplayEnabled
propriété de AVPlayer
.
Je suis curieux de savoir quel doit être le format de sous-titres? Allons le .format srt faire?
Aussi puis-je obtenir le même à l'aide de MPMoviePlayerController
?
Toute aide est appréciée.
- Voir stackoverflow.com/questions/11312118/... et stackoverflow.com/questions/5662635/...
- La documentation d'Apple souffre d'libellé exact sur ce point. Il dit seulement que
closedCaptionDisplayEnabled
“[i]ndicates si le joueur utilise le sous-titrage”. Il ne dit rien sur les sous-titres. Lors de mes tests (sous OS X), cette propriété n'a aucun effet sur les sous-titres; il ne fonctionne que sur le sous-titrage. (Vous pouvez le tester par vous-même en enregistrement-titres à la télévision à l'aide de EyeTV, puis de l'exporter vers les iPhone et MPEG-2 multiplexé formats, la conversion de ce dernier avec le Frein à main. L'EyeTV-pour-iPhone exportation ont une CC de la piste; le Frein à main rip aura une piste de sous-titres.)
Vous devez vous connecter pour publier un commentaire.
Mise à jour 10/30/2018: Il vaut la peine de vérifier cette réponse par un ingénieur d'Apple (Grâce à @allenlini pour pointant hors). Il propose une solution impliquant
AVAssetResourceLoaderDelegate
. Je n'ai pas essayé moi-même, mais il pourrait être une meilleure solution que la mienne ci-dessous.Réponse Originale À Cette Question:
Il me semble que si le référencement de votre WebVTT fichiers dans votre m3u8 streaming description est officiellement prises en charge. L'ajout de "après le fait" n'est pas officiellement pris en charge (Voir cette déclaration par une Pomme ingénieur (en bas de la page)).
Qui toutefois ne signifie pas que vous ne pouvez pas le faire fonctionner ;-).
Avec l'aide de cette grande présentation et exemple de projet (ZIP) par Chris Adamson, ce post sur les Forums des Développeurs Apple et ce Rayon Wenderlich tutoriel par Abdul Azeem, j'ai été en mesure de l'obtenir pour fonctionner. Ceci est une version modifiée de Abdul Azeem un exemple de code et de Chris exemple de projet.
Notez comment vous devez utiliser
AVMediaTypeText
au lieu deAVMediaTypeSubtitle
. Cela semble être un bug dans iOS.AVComposition
ne fonctionne pas avec tout le streaming HTTP actifs, de sorte que cette solution ne fonctionnera pas.AVMediaTypeText
au lieu deAVMediaTypeSubtitle
, vous n'avez pas à activer les sous-titres sur et en dehors, ou de choisir entre plusieurs langues dans AVPlayerViewController. Quelqu'un a des solution de contournement pour qui?AVMediaTypeSubtitle
fonctionne maintenant. Si non, l'autre, plus impliqués solution pourrait être d'exécuter un serveur http à l'intérieur de votre application dans le but de fournir unem3u8
fichier. Il pourrait être assez fou pour travailler 🙂C'est le Swift version de @JohannesFahrenkrug répondre. Espérons que cela est utile pour quelqu'un:
Les deux AVPlayer et MPMoviePlayerController pouvez afficher les sous-titres.
La différence semble être que, avec AVPlayer, vous contrôler si oui ou non les sous-titres sont affichés à l'aide de la closedCaptionDisplayEnabled propriété.
Avec MPMoviePlayerController, l'utilisateur contrôle si oui ou non les sous-titres sont affichés à l'aide d'un interrupteur dans la mise en application. Vous n'obtenez pas de programatic le contrôle de cette dans l'application.
closedCaptionDisplayEnabled
bascule sous-titrage, pas de sous-titres. Ils sont deux choses différentes, et que la propriété n'a aucun effet sur sous-titres. (Une mise en garde: je ne l'ai essayé ce sur OS X, pas iOS.)La WWDC 2013 iOS app utilise WebVTT fichiers pour ses sous-titres (crédit à Nicolas Riley pour la découverte de ce). Pour quelque raison que ce soit, il y a environ 50 (nombre exact varie) pour chaque session.
Je n'ai aucune idée si WebVTT est pris en charge à l'AVFoundation ou MPMoviePlayer niveau, ou si l'application télécharge et analyse les sous-titres des fichiers lui-même.
Une rapide recherche pour “webvtt m3u8” tourné une référence à ce HTTP Live Streaming Projet, ce qui suggère que vous peut être en mesure de faire ce travail par se contente de renvoyer la WebVTT fichiers dans votre m3u8 liste de lecture. Je n'ai pas un exemple pour vous, mais depuis je n'ai pas pu trivialement deviner le m3u8 URL pour une session de la WWDC.