iphone - descargar - avplayer windows
¿Es posible reproducir video usando Avplayer en fondo? (8)
Además de la respuesta de fattomhk, esto es lo que puede hacer para lograr el reenvío de video hasta el momento en que debería ser después de que su aplicación aparezca en primer plano:
- Obtenga
currentPlaybackTime
de reproducción de video cuando vaya al fondo y guárdelo enlastPlayBackTime
- Almacena el tiempo cuando la aplicación pasa al fondo (probablemente en
userDefault
) - De nuevo consigue el momento en que la aplicación entra en primer plano.
- Calcular la
duration
entre el fondo y el tiempo de primer plano - Establezca el tiempo de reproducción actual del video en
lastPlayBackTime
+duration
Estoy usando Avplayer para mostrar clips de video y cuando vuelvo (aplicación en segundo plano) el video se detiene. ¿Cómo puedo seguir reproduciendo el video?
He buscado sobre la tarea de fondo y el subproceso de fondo, IOS solo admite música de fondo (no video) http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html
Aquí hay una discusión sobre el video de reproducción en el fondo
1) https://discussions.apple.com/thread/2799090?start=0&tstart=0
2) http://www.cocoawithlove.com/2011/04/background-audio-through-ios-movie.html
Pero hay muchas aplicaciones en AppStore, que reproducen videos en fondo como
Swift Player: https://itunes.apple.com/us/app/swift-player-speed-up-video/id545216639?mt=8&ign-mpt=uo%3D2
SpeedUpTV: https://itunes.apple.com/ua/app/speeduptv/id386986953?mt=8
Este método soporta todas las posibilidades:
- Pantalla bloqueada por el usuario;
- Elemento de lista
- Botón de inicio presionado;
Siempre que tenga una instancia de AVPlayer ejecutando iOS, evitará el bloqueo automático del dispositivo.
Primero debe configurar la aplicación para que sea compatible con el fondo de audio del archivo Info.plist que agrega en la matriz UIBackgroundModes el elemento de audio.
Luego ponga en su AppDelegate.m en
- Aplicación (BOOL): (UIApplication *) aplicación didFinishLaunchingWithOptions: (NSDictionary *) launchOptions:
estos métodos
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
y #import <AVFoundation / AVFoundation.h>
Luego en tu vista el controlador que controla AVPlayer
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
y
- (void)viewWillDisappear:(BOOL)animated
{
[mPlayer pause];
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
entonces responde a la
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
if([mPlayer rate] == 0){
[mPlayer play];
} else {
[mPlayer pause];
}
break;
case UIEventSubtypeRemoteControlPlay:
[mPlayer play];
break;
case UIEventSubtypeRemoteControlPause:
[mPlayer pause];
break;
default:
break;
}
}
Se necesita otro truco para reanudar la reproducción si el usuario presiona el botón de inicio (en cuyo caso la reproducción se suspende con un desvanecimiento).
Cuando controlas la reproducción del video (tengo métodos de reproducción) establecido
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
y el método correspondiente a ser invocado que lanzará un temporizador y reanudará la reproducción.
- (void)applicationDidEnterBackground:(NSNotification *)notification
{
[mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01];
}
Su trabajo para mí para reproducir vídeo en Backgorund. Gracias a todos.
Me gustaría agregar algo que por alguna razón terminó siendo el culpable para mí. Había usado AVPlayer y el juego de fondo durante mucho tiempo sin problemas, pero esta vez simplemente no pude hacerlo funcionar.
Descubrí que cuando pasa a segundo plano, la propiedad de rate
de AVPlayer
veces parece AVPlayer
a 0.0 (es decir, en pausa), y por esa razón simplemente necesitamos verificar la propiedad de tasa en KVO en todo momento, o al menos cuando vamos a fondo. Si la tasa cae por debajo de 0.0 y podemos suponer que el usuario quiere jugar (es decir, el usuario no .play()
deliberadamente la pausa en los controles remotos, la película finalizó, etc.) debemos volver a llamar a .play()
en el AVPlayer.
AFAIK no hay ninguna otra opción en AVPlayer para evitar que se detenga automáticamente cuando la aplicación pasa al fondo.
No es posible reproducir música / video de fondo usando Avplayer. Pero es posible usar
MPMoviePlayerViewController. He hecho esto en una de mis aplicaciones usando este reproductor y esta aplicación
se ejecuta con éxito a appstore.
Prueba con este fragmento de código, ya lo he integrado con mi aplicación y me está resultando útil ... ¡espero que esto te funcione!
Siga los pasos que se indican a continuación:
- Agregue UIBackgroundModes en la APPNAME-Info.plist, con la aplicación de selección reproduce audio
- Luego agregue el marco AudioToolBox a los marcos de carpetas.
En el APPNAMEAppDelegate.h agregue:
-
#import < AVFoundation/AVFoundation.h>
-
#import < AudioToolbox/AudioToolbox.h>
En el APPNAMEAppDelegate.m agregue lo siguiente:
// Set AudioSession
NSError *sessionError = nil; [[AVAudioSession sharedInstance] setDelegate:self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
/ * Elige cualquiera de ellos * /
- // 1. Anulando la ruta de salida de audio
// UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; // AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof (audioRouteOverride), & audioRouteOverride);
================================================== ======================
// 2. Cambiando la ruta de salida de audio por defecto
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);
en el
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
Pero antes de las dos líneas:
[self.window addSubview: viewController.view];
[self.window makeKeyAndVisible];
Disfruta de la programación !!
Si está reproduciendo video usando WebView, puede manejar el uso de javascript para reproducir video en el fondo.
strVideoHTML = @"<html><head><style>body.........</style></head> <body><div id=/"overlay/"><div id=/"youtubelogo1/"></div></div><div id=/"player/"></div> <script> var tag = document.createElement(''script''); tag.src = /"http://www.youtube.com/player_api/"; var firstScriptTag = document.getElementsByTagName(''script'')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; events: { ''onReady'': onPlayerReady, } }); } function onPlayerReady(event) { event.target.playVideo(); } function changeBG(url){ document.getElementById(''overlay'').style.backgroundImage=url;} function manualPlay() { player.playVideo(); } function manualPause() { player.pauseVideo(); } </script></body> </html>";
NSString *html = [NSString stringWithFormat:strVideoHTML,url, width, height,videoid;
webvideoView.delegate = self;
[webvideoView loadHTMLString:html baseURL:[NSURL URLWithString:@"http://www.your-url.com"]];
En vista diappear llamada
strscript = @"manualPlay();
[webvideoView stringByEvaluatingJavaScriptFromString:strscript];
Si intenta cambiar el modo de fondo: Lo sentimos, la tienda de aplicaciones no lo aprobará. Reproducción de video MPMoviePlayerViewController después de ir al fondo para youtube
En mi investigación, alguien tomaría la pista de sonido para reproducirla en el fondo cuando pase a segundo plano, ya que el video se detendría y obtendría el tiempo de reproducción para reanudar la reproducción cuando pase al primer plano.
Versión rápida para la respuesta aceptada.
En el delegado:
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
En el controlador de vista que controla AVPlayer.
override func viewDidAppear(animated: Bool) {
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
self.becomeFirstResponder()
}
override func viewWillDisappear(animated: Bool) {
mPlayer.pause()
UIApplication.sharedApplication().endReceivingRemoteControlEvents()
self.resignFirstResponder()
}
No te olvides de "importar AVFoundation"