Получить уведомление, когда видео начинается или останавливается в UIWebView
Здравствуйте, я новичок в цели - с
У меня проблема с UIWebView
а также MPMoviePlayerController
: Мой UIWebView
есть фильм внутри HTML (это локальный файл HTML), я использую HTML5 и тег видео для видео.
Я хочу получить уведомление, когда видео начинается или останавливается в UIWebView
....
Я пытался использовать MPMoviePlayerPlaybackDidFinishNotification
, но это не стреляет...
Я также пытался сделать мой главный UIViewController
Это мой собственный вид и перехват -didAddSubview:
а также -willRemoveSubview:
, но без успеха...
Любой орган знает, как получить уведомление от uiwebview
??
2 ответа
Вы можете наблюдать @"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]);
}
Я много об этом искал.. Вот решение, которое я нашел для получения вызова уведомления о завершении воспроизведения. Протестированный код на iOS6.0 и выше. Все благодаря @Morten.
В viewDidLoad добавить наблюдателя
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playbackDidEnd:)
name:@"MPAVControllerItemPlaybackDidEndNotification"//@"MPAVControllerPlaybackStateChangedNotification"
object:nil];
Затем просто добавьте следующий код JavaScript webViewDidFinishLoad
делегировать, как показано ниже
- (void)webViewDidFinishLoad:(UIWebView *)webView {
//http://stackru.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 в выбранном выше и можете сделать все, что вам нужно. Удачного кодирования!