WKWebview非全屏自动播放h5视频的实现方法(Swift、OC)

前言

WKWebview加载一个视频播放的h5页面时,默认是需要用户点击一下才能播放视频,且视频播放时会全屏播放。如果想要h5页面视频非全屏自动播放该怎么做呢?

Swift实现

这个时候就需要设置WKWebview的configuration参数,我们先来看一下Swift的实现,代码如下:

let configuration = WKWebViewConfiguration()
configuration.allowsInlineMediaPlayback = true
if #available(iOS 10.0, *) {
    configuration.mediaTypesRequiringUserActionForPlayback = .all
} else if #available(iOS 9.0, *){
    configuration.requiresUserActionForMediaPlayback = false
}else{
    configuration.mediaPlaybackRequiresUserAction = false
}
h5WebView = WKWebView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height, configuration: configuration)

非全屏播放比较简单,设置configuration的allowsInlineMediaPlayback 属性为true就可以了。当然h5端同样也要支持非全屏播放,否则客户端设置此属性没有任何作用。关于h5非全屏设置我们放最后单独说。

要想实现自动播放视频,在iOS8.0需要设置configuration的mediaPlaybackRequiresUserAction 属性为false,但是从iOS 9.0开始此属性被废弃。改为了requiresUserActionForMediaPlayback ,所以iOS9.0 需要设置requiresUserActionForMediaPlayback 为false,即可实现H5视频自动播放。但是此属性在10.0之后又被废弃了。系统api说明:

extension WKWebViewConfiguration {
//ios 9.0被废弃
    @available(iOS, introduced: 8.0, deprecated: 9.0)
    open var mediaPlaybackRequiresUserAction: Bool
//ios 10.0被废
    @available(iOS, introduced: 9.0, deprecated: 10.0)
    open var requiresUserActionForMediaPlayback: Bool
}

在iOS 10.0及之后系统版本苹果又引入了mediaTypesRequiringUserActionForPlayback 属性。在Swift中,此属性是一个WKAudiovisualMediaTypes结构体。此结构体为我们提供了三个静态值,分别为audio、video、all。audio则代表自动播放音频,video代表自动播放视频,all则代表音视频都可以自动播放。WKAudiovisualMediaTypes结构体系统代码如下:

@available(iOS 10.0, *)
public struct WKAudiovisualMediaTypes : OptionSet {

    public init(rawValue: UInt)

    public static var audio: WKAudiovisualMediaTypes { get }

    public static var video: WKAudiovisualMediaTypes { get }

    public static var all: WKAudiovisualMediaTypes { get }
}

OC实现

讲完了Swift,我们来讲objective-c。

oc与Swift的参数区别不大,iOS 8.0需要设置configuration的mediaPlaybackRequiresUserAction属性,iOS 9.0需要设置configuration的requiresUserActionForMediaPlayback属性。

iOS 10.0版本以后也是同swift一样,需要设置mediaTypesRequiringUserActionForPlayback属性,以上三个属性名字与Swift中完全一样。

但是与swift不同的是,在objective-c中,mediaTypesRequiringUserActionForPlayback的属性是一个枚举。且比Swift中多一个值,如下系统代码:

typedef NS_OPTIONS(NSUInteger, WKAudiovisualMediaTypes) {
    WKAudiovisualMediaTypeNone = 0,
    WKAudiovisualMediaTypeAudio = 1 << 0,
    WKAudiovisualMediaTypeVideo = 1 << 1,
    WKAudiovisualMediaTypeAll = NSUIntegerMax
} API_AVAILABLE(macos(10.12), ios(10.0));

在此枚举中,WKAudiovisualMediaTypeAudio、WKAudiovisualMediaTypeVideo、WKAudiovisualMediaTypeAll三个枚举值分别对应swift中的audio、video、all。且与Swift中功能完全一致。只是此枚举比Swift中的WKAudiovisualMediaTypes结构体多了一个值:WKAudiovisualMediaTypeNone。在oc中如果mediaTypesRequiringUserActionForPlayback的值设置为WKAudiovisualMediaTypeNone,则代表在h5中无论音视频都需要用户点击才能播放。

oc中设置非全屏自动播放代码如下:

WKWebViewConfiguration * configuration = [[WKWebViewConfiguration alloc] init];
//设置非全屏播放
configuration.allowsInlineMediaPlayback = YES;
//不同系统版本适配可自行判断
configuration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAll;
_webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) configuration:configuration];

H5非全屏播放

如果想要在App端的WKWebView中支持非全屏播放,h5端和app端都必须做相应的设置。上面我们讲了App端非全屏播放的方法,最后我们来讲一下在h5端怎么设置。

在h5中非全屏播放被称之为内联播放。如果要支持内联播放,需要在video标签设置playsinline属性为true。但是playsinline仅支持iOS 10版本以上的系统。iOS 10以前版本则需要设置webkit-playsinline属性。代码:

<video playsinline="true" webkit-playsinline="true" controls="controls">
    <source src="http://xxx.mp4" type="video/mp4">
  </video>

总结

到此这篇关于WKWebview非全屏自动播放h5视频的文章就介绍到这了,更多相关WKWebview自动播放h5视频内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • WKWebview非全屏自动播放h5视频的实现方法(Swift、OC)

    前言 WKWebview加载一个视频播放的h5页面时,默认是需要用户点击一下才能播放视频,且视频播放时会全屏播放.如果想要h5页面视频非全屏自动播放该怎么做呢? Swift实现 这个时候就需要设置WKWebview的configuration参数,我们先来看一下Swift的实现,代码如下: let configuration = WKWebViewConfiguration() configuration.allowsInlineMediaPlayback = true if #availabl

  • Android使用WebView实现全屏切换播放网页视频功能

    首先写布局文件activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="fill_parent" and

  • Android开发之全屏与非全屏的切换设置方法小结

    本文实例讲述了Android开发之全屏与非全屏的切换设置方法.分享给大家供大家参考,具体如下: 静态方法 1. 代码方式 在Activity类OnCreate方法中设置,代码如下 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().se

  • Android 应用的全屏和非全屏实现代码

    Android 应用的全屏和非全屏实现代码 全屏显示操作: /** * 全屏显示 */ private void setFullSreen() { WindowManager.LayoutParams params = getWindow().getAttributes(); params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setAttributes(params); getWindow().addF

  • Android 全屏无标题栏的三种实现方法

    一.通过Java代码 在setContentView之前执行: requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//隐藏状态栏 二.调用Android自带的Theme 直接在AndroidManifest.xml中需要全屏显

  • android 全屏去掉底部虚拟导航栏的方法

    如下所示: @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATIO

  • Android提高之MediaPlayer播放网络视频的实现方法

    前面讲解了MediaPlayer播放网络音频,主要介绍了MediaPlayer关于网络音频的缓冲和进度条控制的方法,本文再来讲解一下MediaPlayer播放网络视频的方法.播放网络视频比播放网络音频需要多一个SurfaceView而已,在已经熟悉了MediaPlayer播放网络音频之后,相信大家对本文所述的播放网络视频也能很快地掌握. 先来看看本文程序运行截图,如下所示: 本文程序的视频来自http://daily3gp.com,大家可以替换程序中的视频链接,试试其他影片. main.xml的

  • android全屏去掉title栏的多种实现方法

    1.实现应用中的所有activity都全屏 在manifest中直接加入 复制代码 代码如下: android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 2.实现单个activity全屏 复制代码 代码如下: requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.TYPE_STATUS_BAR

  • js全屏显示显示代码的三种方法

    第一种:       在已经打开的一个普通网页上,点击"全屏显示",然后进入该网页对应的全屏模式.方法为:在网页的<body>与</body>之间加入以下代码: 复制代码 代码如下: <form><input type="BUTTON" name="FullScreen" value="全屏显示" onClick="window.open(document.location,

  • Android中通过样式来去除app的头及界面全屏(备忘)的实现方法

    在style中如下面那样定义: <style name="mystyle"> <item name="android.windowNoTitle">true</item><!--没标题--> <item name="android.windowFullscreen">true</item><!--全屏显示,如果想值随着某个值改变而改变,可以用?的方式来引用-->

随机推荐