ios - xcode - webView 加载中的“自动播放”导致播放器通过应用程序加载
Posted
技术标签:
【中文标题】ios - xcode - webView 加载中的“自动播放”导致播放器通过应用程序加载【英文标题】:ios - xcode - 'autoplay' within webView load causes player to load over app 【发布时间】:2018-03-05 13:32:17 【问题描述】:请原谅我对 xcode/ios 开发的知识有限。我正在选择一个项目并跟踪在 webView 中加载的 URL 的更改,当内容加载 URL(其中包含在加载时自动播放的实时流媒体链接)时,在页面的 html 中如下所示:
<video id='video_tag' width='1000' height='41' controls="" autoplay="">
<source src='http://domain:ip/;stream.mp3/playlist.m3u8' type='video/mp4'>
<a href='http://domain:ip/;stream.mp3' id='android_firefox' style='display:none;'>Watch this stream over RTSP for Android Mozilla</a><script>if (navigator.userAgent.match(/Android/i) && navigator.userAgent.match(/Firefox/i))
document.getElementById('android_firefox').style.display='';document.getElementById('video_tag').style.display = 'none';
jwplayer.key='xxxxxxxxxxx=';
jwplayer('primcast.com').setup(
playlist: [sources:[file:'http://domain:ip/;stream.mp3',
file:'http://domain:ip/;stream.mp3/playlist.m3u8']],
logo: file: '',width:1000,height:41,stretching:'undefined',autostart:true,fallback:false,primary:'HTML5',repeat:true);
</script></source></video>
当应用程序在 webView 中加载此内容时,屏幕变为空白,但如果您触摸屏幕,它会尝试在应用程序上方播放音频。屏幕右上角有一个“x”,如果按下它,会在调试器中正确返回到 webView App:
[34780:2737829] WF: _WebFilterIsActive returning: NO
[34780:2737715] [] <<<< AVOutputDeviceDiscoverySession (FigRouteDiscoverer) >>>> -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: Setting device discovery mode to DiscoveryMode_Presence (client: My App)
[34780:2737715] [framework] CUICatalog: Invalid asset name supplied: '(null)'
[34780:2737715] [framework] CUICatalog: Invalid asset name supplied: '(null)'
[34780:2737715] [] <<<< AVOutputDeviceDiscoverySession (FigRouteDiscoverer) >>>> -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: Setting device discovery mode to DiscoveryMode_None (client: My App)
[34780:2737715] [] <<<< AVOutputDeviceDiscoverySession (FigRouteDiscoverer) >>>> -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: Setting device discovery mode to DiscoveryMode_None (client: My App)
[34780:2737715] [framework] CUICatalog: Invalid asset name supplied: '(null)'
[34780:2737715] [framework] CUICatalog: Invalid asset name supplied: '(null)'
[34780:2737715] [] <<<< AVOutputDeviceDiscoverySession (FigRouteDiscoverer) >>>> -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: Setting device discovery mode to DiscoveryMode_Presence (client: My App)
[34780:2737715] [] <<<< AVOutputDeviceDiscoverySession (FigRouteDiscoverer) >>>> -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: Setting device discovery mode to DiscoveryMode_None (client: My App)
据我了解,是自动播放和<video>
标签导致了这种行为?
我想,我的问题是,我是否有可能通过绕过使应用程序尝试加载播放器的那部分代码来从应用程序内完全停止这种行为,如果是,如何?
用户不想取消网站上的自动播放功能,因此理想的解决方案是在应用内停止。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:我能够通过添加这些行来解决这个问题
Webview.mediaPlaybackRequiresUserAction=TRUE;
Webview.mediaPlaybackRequiresUserAction = true;
Webview.allowsInlineMediaPlayback = false;
【讨论】:
以上是关于ios - xcode - webView 加载中的“自动播放”导致播放器通过应用程序加载的主要内容,如果未能解决你的问题,请参考以下文章
xcode 解析来自 webview 的 html id 数据