iOS12网页视频播放点击全屏按钮会导致闪退

本文解决iOS12手机H5视频播放时自动全屏、全屏后状态栏消失及多视频切换致应用崩溃的问题。通过修改video标签属性、调整webview设置和监听全屏变化,有效避免状态栏消失,对于多视频切换崩溃问题,提供解决方案并指出WKWebView下不会出现此问题。

最近在app中有一个h5界面,是一个视频播放的列表,然后在iOS12的手机上发生了如下几个问题:
第一,自动全屏播放,这个问题历来就有,很好解决;
第二,全屏后取消全屏,状态栏消失;
第三,多个视频间来回点全屏按钮导致app崩溃闪退;

以上三个问题,我们下面一一来说明:
1.自动全屏播放,历来如此,想要解决也很简单:

//在video标签中加上下面属性
<video playsinline="true" webkit-playsinline="true"><video>

同时在app中对webview设置一个属性:

    self.webView.allowsInlineMediaPlayback = YES;

这样,视频在开始播放的时候就不会自动全屏了。

2.全屏后退出全屏,状态栏消失
这个问题在iOS12以下的手机中都不存在,推测应该也是iOS12 做出的新改变或者bug,解决办法在webview所在的ViewCOntroller中调用下面的方法:

#pragma mark  --通知
-(void)addObserverNotification
{
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(windowDidBecomeHidden:) name:UIWindowDidBecomeHiddenNotification object:nil];
}

-(void)windowDidBecomeHidden:(NSNotification *)nitice
{
    UIWindow * window = (UIWindow *)nitice.object;
    if(window){
        UIViewController *rootViewController = window.rootViewController;
        NSArray<__kindof UIViewController *> *viewVCArray = rootViewController.childViewControllers;
        if([viewVCArray.firstObject isKindOfClass:NSClassFromString(@"AVPlayerViewController")]){
            [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
        }
    }
}

调用的时候最好这么写:

    if (@available(iOS 12.0, *)){
        [self addObserverNotification];
    }
    //这个方法的作用是在退出全屏时监听到,然后设置状态栏显示,状态栏显示的方法除了上面的代码,plist也要处理,不多说了,老生常谈的问题了,退出全屏瞬间状态栏还是隐藏的,之后才又显示,这是个小缺陷。

调用方法可以写在viewDidLoad中。

3.切换点击几个视频的全屏按钮导致崩溃
这是我们要着重说的一个问题,经试验,iOS12以下手机不会崩溃,很明显,这是一个iOS12的bug,目前无法处理,想了几个方案:
i)不允许多个视频处于播放暂停状态,退出全屏后,恢复初始状态,但是需要h5去监听这个状态来做处理,不知道h5能不能兼听到,如果监听不到,就用上面iOS的兼听通过JS告诉h5来做处理;
ii)禁止全屏,并在播放期间隐藏全屏按钮,音量按钮,进度条,暂定播放这些按钮。前提是你的视频不需要全屏显示处理方法是 video 元素上不能写 controls 特性。

如果你有更好的方法来解决这个崩溃问题,欢迎一起探讨。

更新:发现使用WKWebView的时候不会崩溃。

评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值