Получить уведомление, когда видео начинается или останавливается в UIWebView - PullRequest
6 голосов
/ 24 ноября 2011

Здравствуйте, я новичок в цели - c

У меня проблема с UIWebView и MPMoviePlayerController: у моего UIWebView есть фильм внутри html (это локальный файл html)Я использую HTML5 и тег видео для видео.

Я хочу получить уведомление, когда видео начинается или останавливается в UIWebView ....

Я пытался использовать MPMoviePlayerPlaybackDidFinishNotification, но он не запускается ...

Я также попытался сделать мой основной вид UIViewController своим собственным и перехватить -didAddSubview: и -willRemoveSubview:.но без успеха ...

Кто-нибудь знает, как получить уведомление от uiwebview ??

Ответы [ 2 ]

19 голосов
/ 24 ноября 2011

Вы можете наблюдать @"MPAVControllerPlaybackStateChangedNotification" (используйте nil для объекта).Это уведомление не задокументировано, поэтому я не знаю, утвердит ли App Store ваше приложение.

[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(playbackStateDidChange:)
    name:@"MPAVControllerPlaybackStateChangedNotification"
    object:nil];

Уведомление содержит ключ MPAVControllerNewStateParameter в userInfo.Значение кажется равным 0 до начала воспроизведения, 1 при его приостановке, 2 при воспроизведении и 3 (на мгновение) при перетаскивании ползунка воспроизведения.

- (void)playbackStateDidChange:(NSNotification *)note
{
    NSLog(@"note.name=%@ state=%d", note.name, [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue]);
}
1 голос
/ 22 августа 2013

Я много об этом искал .. Вот решение, которое я нашел для получения вызова с уведомлением о завершении воспроизведения. Протестированный код на iOS6.0 и выше . Все благодаря @Morten.

В viewDidLoad добавить наблюдателя

[[NSNotificationCenter defaultCenter] addObserver:self
 selector:@selector(playbackDidEnd:)
name:@"MPAVControllerItemPlaybackDidEndNotification"//@"MPAVControllerPlaybackStateChangedNotification"
object:nil];

Затем просто добавьте следующий код JavaScript webViewDidFinishLoad делегат, как показано ниже

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    //http://stackoverflow.com/a/12504918/860488
    [videoView stringByEvaluatingJavaScriptFromString:@"\
                                    var intervalId = setInterval(function() { \
                                        var vph5 = document.getElementById(\"video-player\");\
                                        if (vph5) {\
                                            vph5.playVideo();\
                                            clearInterval(intervalId);\
                                        } \
                                    }, 100);"];
}

- (void)playbackDidEnd:(NSNotification *)note
{
//do your stuff here
    [videoView removeFromSuperview];
    videoView.delegate = nil;
    videoView = nil;
}

Вы получите завершение вызова PlayDid в выбранном выше и можете делать все, что вам нужно. Удачного кодирования !!

...