Я вижу эту проблему только о iPad. То же самое работает как ожидалось над iPhone.
Я открытие URL из своего приложения в UIWebView. Если URL является нормальной веб-страницей, он хорошо работает как ожидалось. Но если URL является URL удаленного видео/звукового файла, UIWebView открывает плеер по умолчанию, который снова хорош.
Теперь то, когда я распускаю UIWebView (путем нажатия на кнопку Done на плеере), потоковая передача не останавливается, и аудио/видео продолжает играть в фоновом режиме (я не вижу его, но это действительно продолжает играть в фоновом режиме, может услышать его). UIViewController, в котором был создан webview, также dealloced (я вставил оператор журнала в dealloc методе), но потоковая передача не останавливается.
Кто-то может выручить меня на том, почему это могло происходить? И как я могу остановить аудио/потоковую передачу видео, когда UIWebView закрывается?
Спасибо.
У меня та же проблема, о которой говорилось, но в этом случае видео, которое не перестает воспроизводиться, является видео Youtube, встроенным с помощью метода object / embed.
Я долго пытался понять, как остановить воспроизведение видео, и единственным решением, которое я нашел, было указать UIWebView загрузить пустую страницу перед закрытием просмотра:
[self.webContent loadRequest:NSURLRequestFromString(@"about:blank")];
Изменить (2015-05- 12): Как упоминается ниже @chibimai, этот ответ от alloc_iNit работает по тем же принципам , но поскольку мой ответ дан 5 лет назад - а его всего 4 года - связанный ответ может быть более применимым. Я больше не занимаюсь разработкой iPhone, поэтому не могу определить, что лучше.
Я работаю над той же проблемой. Я обнаружил, что если вы определите что-то подобное в своем теге скрипта:
function stopVideo(){ video.pause(); }
window.onunload = stopVideo;
Затем в вашем UIViewController добавьте:
-(void)viewWillDisappear:(BOOL)animated{
[webView stringByEvaluatingJavaScriptFromString:@"window.onunload();"];
[super viewWillDisappear:animated];
}
Кажется, что вы пытаетесь приостановить / остановить видео на несколько секунд, но затем вы слышите звук продолжай играть!
Обновить!
Это общая ошибка медиаплеера. Вы должны установить время воспроизведения на -1, чтобы оно действительно остановилось.
Благодаря вашей теме по этой проблеме мне удалось найти решение, которое полностью устраняет проблему, и я протестировал его на своем IPad, а не только симулятор. Это также решает проблему с воспроизведением звука. Это не постоянное решение, а эффективный обходной путь.
Обзор подхода:
В основном все, что нужно, - это отправить короткий аудиофайл в webView. Я сделал копию файла IMac submarine.m4v, вызвал ping.m4v и добавил его в свой проект xcode в папке ресурсов.
Затем, когда я хочу, чтобы видео / аудио остановилось, я делаю следующие шаги:
webView.hidden = TRUE;
NSString *mimeType = [[NSString alloc] initWithString:@"video/x-m4v"];
NSData *PingData = [NSData alloc];
PingData = [NSData dataWithContentsOfFile:PingFilePath];
[webView loadData:PingData MIMEType:mimeType textEncodingName:nil baseURL:[NSURL URLWithString:PingFilePath]];
Теперь вам также нужно обработать ошибку «204». Ошибка 204 кажется просто предупреждением о том, что webView будет обрабатывать этот аудиофайл. Чтобы обработать ошибку, я добавил эту единственную строку (см. >>>) в didFailLoadWithError
(void)webView:(UIWebView *)BHwebView didFailLoadWithError:(NSError *)error
{
NSLog(@"Error %i", error.code);
if (error.code == NSURLErrorCancelled) return; // this is Error -999
if (error.code == 204) return; // this is Error 204 - for audio player in webview.
Наконец, я переворачиваю webView.hidden = FALSE
прямо перед отображением моего следующего аудио / видео. Таким образом, небольшая полоса воспроизведения звукового файла не будет отображаться на дисплее. Раздается тихий пинг ... подойдет любой аудиофайл ...
Надеюсь, это поможет ...