代码之家  ›  专栏  ›  技术社区  ›  lostInTransit

即使UIWebView关闭,视频/音频流也不会停止-iPad

  •  33
  • lostInTransit  · 技术社区  · 16 年前

    我正在UIWebView中打开应用程序的URL。如果URL是一个普通的web页面,那么它可以正常工作。但是,如果URL是远程视频/音频文件的URL,UIWebView将打开默认播放器,这也是好的。

    现在,当我关闭UIWebView(通过单击播放器上的Done按钮)时,流媒体不会停止,音频/视频仍在后台播放(我看不到它,但它仍在后台播放,可以听到它)。在其中创建webview的UIViewController也被释放(我在dealloc方法中放入了一个log语句),但是流并没有停止。

    有人能帮我解释一下为什么会这样吗?当UIWebView关闭时,如何停止音频/视频流?

    谢谢。

    11 回复  |  直到 16 年前
        1
  •  53
  •   Community Mohan Dere    9 年前

        [self.webContent loadRequest:NSURLRequestFromString(@"about:blank")];
    

    编辑(2015-05-12):如以下@chibimai所述, this answer by alloc_iNit works along the same lines

        2
  •  4
  •   ianjoyner    14 年前

        3
  •  4
  •   Dan McClain    14 年前

    我的场景是:我使用splitcontroller,媒体列表在master上,播放器在detailcontroller部分

    我最终发现问题很简单,我在我的主控器中保存了细节控制器的引用,并且没有释放早期的细节控制器。一个简单的释放在主人在正确的地方解决了这个问题。

        4
  •  2
  •   tolar    16 年前

    我也在研究同样的问题。我发现如果在脚本标记中定义这样的内容:

    function stopVideo(){ video.pause(); }
    window.onunload = stopVideo;
    

    -(void)viewWillDisappear:(BOOL)animated{
        [webView stringByEvaluatingJavaScriptFromString:@"window.onunload();"];
        [super viewWillDisappear:animated];
    }
    

    它似乎试图暂停/停止视频几秒钟,但你听到的音频继续播放!


    这是媒体播放器的常见错误。必须将播放时间设置为-1才能使其真正停止。

        5
  •  1
  •   Kostiantyn Sokolinskyi    15 年前

    帮助我的解决方法是在单独的媒体播放器中打开视频文件。

    打开MP4文件时出错

    - (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest: (NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType
    {
        NSRange range = [request.URL.absoluteString rangeOfString: @".mp4" options: NSCaseInsensitiveSearch];
    
        if ( range.location != NSNotFound ) //opening MP4 video file
        {           
            [self showFullscreenMediaWithURL: request.URL];
    
            return NO;
        }
    
        return YES;
    } 
    

    哪里

    - (void) showFullscreenMediaWithURL: (NSURL *) mediaURL
    {
        MPMoviePlayerViewController *ctrl = [[MPMoviePlayerViewController alloc] initWithContentURL: mediaURL];
    
        ctrl.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentModalViewController: ctrl animated: YES];
    
        [ctrl release];
    }
    

    在模型视图的媒体播放器中打开带有URL的视频

    别忘了将MediaPlayer.framework添加到项目并导入

    #import <MediaPlayer/MediaPlayer.h>
    

    对于要建设的项目

    PS.非常感谢Viktor Gubrienko的解决方案

        6
  •  1
  •   Mi-Creativity    10 年前

    事实上,我更喜欢使用空链接来解决这个问题。 这样地:

    [self.webView loadRequest:NSURLRequestFromString(@"about:blank")];
    
        7
  •  0
  •   Aziz Shaikh    14 年前

    方法概述:

    基本上所有需要的是发送一个简短的音频文件到webView。我复制了IMac subside.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]];
    

    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 就在我显示下一个音频/视频之前。这样,声音文件的小播放条就不会显示在显示器上。只有一声轻轻的叮当声。。。任何音频文件都可以。。。

    我希望这有助于。。。

        8
  •  0
  •   K1w1Geek    10 年前

    这就是我用的。它会记录此错误“停用已运行I/O的音频会话。在停用音频会话之前,应停止或暂停所有I/O。”但确实会停止播放(淡出)音频文件并记住播放位置。

    AVAudioSession *s = [AVAudioSession sharedInstance];
    if (s != nil)
        [s setActive:NO error:nil];
    
        9
  •  0
  •   Gaurav Manani    9 年前

    由于web视图还没有发布,视频一直在后台的web视图上播放。

    所以你需要通过使用下面的代码来发布web视图,这对我来说很好。

    - (void)viewDidDisappear:(BOOL)animated 
    {
        [super viewDidDisappear:(BOOL)animated];
        [self.wvwebview removeFromSuperview];
    }
    

    我希望这有助于。。。

        10
  •  0
  •   user1105951    7 年前

    就我而言,使用 加载HtmlString 不能用@加载请求about:blank,修复macOS上的问题

     [self.wkWebView loadHTMLString:@"about:blank" baseURL:nil];
    
        11
  •  0
  •   Sateesh Pasala    7 年前

    我也有同样的问题 其中“表视图”单元有一个加载音频文件的webview。一旦播放并返回到另一个屏幕,音频仍会播放。

    解决方案:在视图中重新加载表格视图将消失(u2;:)的表格视图控制器,并且一旦导航到另一个屏幕,音频将停止播放。