Comment couper / activer le son lors de la lecture d'une vidéo à l'aide de MPMoviePlayerController?
J'ai créé mes propres contrôles personnalisés pour une utilisation avec le MPMoviePlayerController
. Jusqu'à présent, tout fonctionne sauf le bouton de mise en sourdine de contrôle.
J'ai configuré le AVAudioSession
en utilisant le code suivant avant de créer ma instance de la MPMoviePlayerController
.
NSError *modeError = nil;
[self.audioSession setMode:AVAudioSessionModeMoviePlayback error:&modeError];
if (modeError != nil) {
NSLog(@"Error setting mode for AVAudioSession: %@", modeError);
}
NSError *categoryError = nil;
[self.audioSession setCategory:AVAudioSessionCategoryPlayback error:&categoryError];
if (categoryError != nil) {
NSLog(@"Error setting category for AVAudioSession: %@", categoryError);
}
Ensuite dans mon bouton de mise en sourdine de la méthode de rappel, j'ai le code suivant:
NSError *activeError = nil;
[self.audioSession setActive:NO error:&activeError];
if (activeError != nil) {
NSLog(@"Error setting inactive state for AVAudioSession: %@", activeError);
}
En cliquant sur le bouton Mute, j'ai le inutile d'erreur:
Error Domain=NSOSStatusErrorDomain Code=560030580 "The operation couldn’t be completed. (OSStatus error 560030580.)"
Je suis un lien vers la AVFoundation
cadre.
Cela commence vraiment à me gonfler car je ne peux pas pour la vie de moi un moyen de réduire ou couper le son de la lecture audio de ma demande.
Je ne veux pas changer le système mondial, le volume de la demande au niveau du volume défini par le AVAudioSession
AVAudioSessionCategoryPlayback
catégorie.
Il semble que vous pouvez régler le volume de la AVAudioPlayer
mais pas le MPMoviePlayerController
. J'ai vu d'autres posts ici sur de SORTE que dire il suffit de créer une instance de AVAudioPlayer
et de régler le volume, mais ce juste à cause de mon appli crash et j'attends qu'il a quelque chose à voir avec le fait que je ne suis pas en utilisant la initWithContentsOfURL:error:
ou initWithData:error:
et au lieu d'utiliser "init".
Toute aide serait appréciée.
source d'informationauteur Camsoft
Vous devez vous connecter pour publier un commentaire.
Après avoir parlé à un technicien Apple, il s'avère qu'il n'est pas possible de contrôler ou désactiver l'audio à l'aide de
MPMoviePlayerController
.Au lieu de cela, vous devez créer votre propre contrôleur à l'aide d'AVFoundations
AVPlayer
classe.Une fois que vous l'utilisez, c'est une question de créer un mixage audio et réglage du volume. Il fonctionne très bien.
Exemple de code:
J'ai écrit un
MPMoviePlayerController
remplacement de la classe qui ajoute le support de niveau de volume. Je vais télécharger le github peu et ajouter le lien dans ce post.Je sais que c'est un vieux post, mais j'ai réussi à trouver un moyen de réussir à contrôler le volume de la MPMoviePlayerController de contrôle dans iOS6 & iOS7, à l'aide d'un MPVolumeView. Une chasse aux sorcières, c'est qu'il ne fonctionne PAS dans le simulateur, uniquement sur le périphérique physique. Juste pour contrôler le volume, l'ajout d'un caché MPVolumeView fonctionnera très bien. Toutefois, si vous utilisez un caché, le système d'exploitation natif de volume affichage qui apparaît lorsque vous modifiez le volume à l'aide du périphérique physique boutons de volume s'affiche toujours centre de l'écran. Si vous voulez éviter cela, assurez-vous que votre MPVolumeView n'est pas caché. Au lieu de cela, vous pouvez lui donner un très faible transparence alpha et de le placer derrière les autres points de vue, de sorte que l'utilisateur ne peut pas les voir.
Voici le code que j'ai utilisé:
Cela vous permet de contrôler le volume en appelant:
[[MPMusicPlayerController applicationMusicPlayer] setVolume:0.0];
Mais j'étais encore en train de le système d'exploitation natif de volume s'affiche la première fois que je voudrais essayer de changer le volume sur les charges qu'il ne montre pas cet écran, donc, pensant qu'il avait quelque chose à voir avec la scène dans le viewcontroller du cycle de vie, j'ai déménagé de ma méthode viewDidLoad à la viewDidAppear méthode - il a travaillé - le volume en sourdine et le natif de volume l'affichage ne s'affiche pas, mais maintenant, je pus entendre une fraction de seconde de l'audio avant la vidéo a commencé à jouer. J'ai donc accroché à la lecture de l'état a entraîné le changement de délégué de la MPMoviePlayerController. Dans le viewDidload j'ai ajouté:
Et le délégué de la méthode de rappel:
Ce coupé le son de la vidéo avant de commencer à jouer, mais après le viewDidLoad dans le cycle de vie, donc pas de système d'exploitation natif de volume en sourdine de l'affichage.
Dans mon application, j'ai récupéré et stocké le niveau de volume actuel avant d'inhibition (à l'aide de [MPMusicPlayerController applicationMusicPlayer].le volume de la propriété), et ensuite restauré le volume à ce niveau lorsque le contrôleur a été fermé, le sens, l'utilisateur sera pas au courant que leur appareil de niveau de volume a été modifié et restauré.
Aussi, si votre MPMoviePlayerController est non standard audio itinéraire dans iOS7, l'appel à [[MPMusicPlayerController applicationMusicPlayer] setVolume:0.0] peut ne pas fonctionner pour vous, dans ce cas vous pouvez faire une boucle à travers les sous-vues de votre MPVolumeView de contrôle jusqu'à ce que vous trouver un point de vue qui sous-classes UISlider. Vous pouvez ensuite appeler [sliderView setValue:0 animé:NON] qui devrait fonctionner pour vous. Cette méthode n'utilise pas privé de Pomme d'Api et donc ne devrait pas obtenir votre application rejeté - après tout, il ya tellement de nombreux des raisons légitimes pour lesquelles vous offre cette fonctionnalité, et il a été possible dans iOS6 sans avoir à aller à ces longueurs! En fait, j'ai été dupés à découvrir qu'Apple avait retiré la fonctionnalité pour régler le volume sur MPMoviePlayerController dans iOS7, en premier lieu.. les migrations forcées à AVPlayer?
Mise à jour: Mon iPad app a été approuvé à l'aide de cette méthode et est en direct sur l'app store.