iOS: воспроизведение видео, которое требует аутентификации, работает в QuickLook, но не в MPMoviePlayerViewController - PullRequest
8 голосов
/ 20 марта 2012

Я захожу на свой сервер, используя SOAP web service. После входа в систему многие файлы, которые я просматриваю, доступны только зарегистрированному пользователю, поэтому iOS должна создать сеанс в NSURL или в другом месте.

При попытке просмотра видеофайла с помощью MPMoviePlayerViewController он не будет работать, он просто загружает viewController, а затем закрывает его.

Если я использую QuickLook, это работает, возможно потому, что сначала я загружаю видео локально, а затем просматриваю его.

Но я не хочу делать это таким образом, я хочу транслировать видео, используя MPMoviePlayerViewController, потому что я не хочу, чтобы пользователю приходилось загружать весь видеофайл. Я видел сообщения об использовании NSURLCredential, но это не работает для меня. Я использовал (добавил свою личную информацию, очевидно):

/**
 * 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

Поскольку это видео доступно для просмотра только вошедшему в систему пользователю, если к URL-адресу видео обращается общедоступный пользователь, ему предоставляется форма HTML для входа в систему. NSURLCredential не работает в этом случае?

Почему все звонки на NSURLConnection работают, используя мои учетные данные (например, загрузку видео), но MPMoviePlayerViewController, похоже, не использует те же учетные данные и отказывается воспроизводить видео (возможно, потому что оно получает страницу входа)?

Есть ли решение для этого?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2014

Недавно у меня была похожая проблема, связанная с невозможностью передачи файлов cookie в MPMoviePlayerController.Я обнаружил из переполнения стека, что решение заключается в использовании NSURLProtocol.Тем не менее, было сложно понять, как это сделать, поэтому я решил сэкономить время, поделившись кодовым решением: https://stackoverflow.com/a/23261001/3547099

0 голосов
/ 20 марта 2013

Установите флажок AuthName в конфигурации Apache, если он установлен, используйте его в конструкторе NSURLProtectionSpace в качестве значения атрибута realm

РЕДАКТИРОВАТЬ: Извините, не видел ваш комментарий о FORM Аутентификация. надеюсь, это поможет кому-то с Бейсиком Аутентификация

...