iOS实用知识点

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

2018-01-03  本文已影响0人  10m每秒滑行

当手机原生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];
上一篇下一篇

猜你喜欢

热点阅读