美文网首页iOS实用知识点
iOS 系统下H5页面video标签和系统App出现混播

iOS 系统下H5页面video标签和系统App出现混播

作者: 10m每秒滑行 | 来源:发表于2018-01-03 18:14 被阅读0次

    当手机原生app后来播放音频时,手机前台的app内有webview控件正在播放有声视频,此时就会出现两种声音同时播放(webview内的音频音量和手机是否静音无关)。此时可能需要暂停后台播放的音乐app,当前台的app播放完视频后,再恢复后台的音乐播放,但H5开发的小伙伴无法获取当前设备是否有后台音视频在播放。

    解决:
    原生书写js干预webview对音视频的播放。

    <video controls="controls" src="http://www.w3school.com.cn/i/movie.ogg"></video>
    <script type="text/javascript">
        addEventListener = function (medias) {
            for (var i = medias.length - 1; i >= 0; i--) {
                var media = medias[i];
                var volume = media.volume;
                media.addEventListener('onplay',function(){if(volume>0){alert("不好,开工")};});
            }
        }
    
        vedioListen = function(){
            var videos = document.getElementsByTagName('video');
            var audios = document.getElementsByTagName('audio');
            addEventListener(videos);
            addEventListener(audios);
        }
        vedioListen();
    </script>
    

    往webview内注入js

     WKUserScript *mediaScript = [[WKUserScript alloc] initWithSource:addEventListenerForJsMedia injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:NO];
     [webView.configuration.userContentController addUserScript:mediaScript];
    

    最后,webview播放完成时( 可使用addEventListener 监听Media.ended属性变化,判断音视频是否播放完成。)恢复其他App Session的激活状态

    - (BOOL)setActive:(BOOL)active 
             withOptions:(AVAudioSessionSetActiveOptions)options 
                  error:(NSError * _Nullable *)outError;
    

    这里的options传入AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation 即可

    还可使用这种监听的思路达到控制当前webview内视频资源静默播放,当耳机插入时,设置webview播放的media资源的音量,耳机拔出是恢复静默播放。
    耳机拔出通知

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(routeChange:) name:AVAudioSessionRouteChangeNotification object:nil];
    

    相关文章

      网友评论

        本文标题:iOS 系统下H5页面video标签和系统App出现混播

        本文链接:https://www.haomeiwen.com/subject/fzcknxtx.html