Потоковое видео / аудио не останавливается, даже если UIWebView закрыт - iPad - PullRequest
33 голосов
/ 27 апреля 2010

Я вижу эту проблему только на iPad. На iPhone работает то же, что и ожидалось.

Я открываю URL из своего приложения в UIWebView. Если URL-адрес является обычной веб-страницей, он работает нормально, как и ожидалось. Но если URL-адрес удаленного видео / аудио файла, UIWebView открывает проигрыватель по умолчанию, который снова хорош.

Теперь, когда я закрываю UIWebView (нажав кнопку «Готово» на проигрывателе), потоковая передача не прекращается, и аудио / видео продолжает воспроизводиться в фоновом режиме (я не вижу его, но оно продолжает воспроизводиться в фоновом режиме). , слышу это). UIViewController, в котором было создано веб-представление, также освобождается (я вставил оператор log в метод dealloc), но потоковая передача не останавливается.

Может кто-нибудь, пожалуйста, помогите мне понять, почему это может происходить? И как я могу остановить потоковое аудио / видео, когда UIWebView закрыт?

Спасибо.

Ответы [ 11 ]

0 голосов
/ 11 мая 2010

, благодаря вашей теме по этой проблеме, я смог найти решение, которое полностью решает проблему, и я протестировал его на своем IPad, а не только на симуляторе.Это также решает проблему с воспроизведением аудио.Это не постоянное разрешение, а эффективный обходной путь.

Обзор подхода:

По сути, все, что нужно, - это отправить короткий веб-файл в веб-представление.Я сделал копию файла 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 прямо перед тем, как отобразить мое следующее аудио / видео.Таким образом, небольшая полоса воспроизведения для звукового файла не отображается на дисплее.Звучит просто тихий звук ... любой аудиофайл подойдет ...

Надеюсь, это поможет ...

...