8

Ingreso a mi servidor usando un SOAP web service. Una vez que haya iniciado sesión, muchos de los archivos que estoy viendo solo están disponibles para el usuario que inició sesión, por lo que iOS debe crear una sesión en NSURL o algo así.iOS: Reproducción de video que necesita autenticación funciona en QuickLook pero no en MPMoviePlayerViewController

Al intentar obtener una vista previa de un archivo de video usando MPMoviePlayerViewController, no funcionará, solo carga el control de vista, luego lo descarta.

Si uso QuickLook funciona, probablemente porque primero descargo el video localmente, luego lo veo.

Pero, no quiero hacerlo de esta manera, quiero transmitir el video usando MPMoviePlayerViewController porque no quiero que el usuario tenga que descargar un archivo de video completo. He visto publicaciones sobre el uso de NSURLCredential, pero eso no parece funcionar para mí. Solía ​​(añadido mi propia información personal obviamente):

/** 
* Play media session 
* 
* @version $Revision: 0.1 
*/ 
- (void)playMediaWithURL:(NSString *)mediaURL { 

    // Authenticate 
    NSURLCredential *credential = [NSURLCredential credentialWithUser:@"myusername" 
                  password:@"mypassword" 
                  persistence:NSURLCredentialPersistenceForSession]; 

    NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] 
              initWithHost:@"mysite.com" 
              port:80 
              protocol:@"http" 
              realm:nil 
              authenticationMethod:NSURLAuthenticationMethodDefault]; 

    [[NSURLCredentialStorage sharedCredentialStorage] setDefaultCredential:credential forProtectionSpace:protectionSpace]; 

    // The movie player 
    NSURL *movieURL = [NSURL URLWithString:[mediaURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
    MPMoviePlayerViewController *tempPlayer = [[MPMoviePlayerViewController alloc]initWithContentURL:movieURL]; 

    // Add observer 
    [[NSNotificationCenter defaultCenter] 
     addObserver:self 
     selector:@selector(moviePlayBackDidFinish:) 
     name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

    // Properties 
    tempPlayer.moviePlayer.allowsAirPlay = YES; 
    tempPlayer.moviePlayer.shouldAutoplay = YES; 
    tempPlayer.moviePlayer.useApplicationAudioSession = NO; 
    [self presentMoviePlayerViewControllerAnimated:tempPlayer]; 
    [tempPlayer.moviePlayer play]; 

}//end 

Dado que el vídeo es sólo visible para un usuario conectado, si la URL de vídeo se accede por un usuario público, se les presenta un formulario HTML para iniciar sesión . ¿No funciona NSURLCredential en este caso?

¿Por qué todas las llamadas a NSURLConnection trabajo, usando mi registran en las credenciales (como descargar el video), pero no parece MPMoviePlayerViewController utilizar esas mismas credenciales, y se niega a reproducir el vídeo (probablemente porque se pone el inicio de sesión página)?

¿Hay alguna solución a esto?

+0

+1 para una buena pregunta - curioso sobre las respuestas. En términos generales, MPMoviePlayerController (como AVPlayer en el que el primero se basa) no parece hacer mucho uso de tales funcionalidades de redes compartidas de alto nivel. – Till

+0

Estoy usando uno de mis tickets de soporte técnico para desarrolladores de iOS y envié esta pregunta a Apple. Veremos lo que dicen .. –

+0

¿Alguna noticia sobre esto? – Till

Respuesta

0

Comprobar AuthName en su configuración de Apache, si está configurado usarlo en su NSURLProtectionSpace constructor como un valor para el atributo realm

EDIT: Lo siento, no vi tu comentario sobre FORMA autenticación. Espero que ayude a alguien con BASIC Autenticación

0

Recientemente, tuve un problema similar al no poder pasar las cookies a MPMoviePlayerController. Descubrí por desbordamiento de pila que la solución es usar NSURLProtocol. Aún así, fue doloroso descubrir cómo hacerlo, así que pensé que iba a ahorrarle algo de tiempo compartiendo la solución codificada: https://stackoverflow.com/a/23261001/3547099

Cuestiones relacionadas