首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xamarin表单:用于播放视频的Webview不适用于iPhone?

Xamarin表单:用于播放视频的Webview不适用于iPhone?
EN

Stack Overflow用户
提问于 2019-12-09 09:29:06
回答 1查看 909关注 0票数 0

我使用Webview播放视频和音频,它在安卓和iPhone模拟器上运行得很好。但在真正的iPhone上,视频播放并不是很好。

为了在iPhone上播放视频,我需要多次点击视频播放按钮。在那之后,播放视频也需要很长时间。另一件重要的事情是我的视频链接没有视频格式(.mp4,.mkv)。

XAML

代码语言:javascript
运行
复制
<WebView 
    x:Name="web_view"
    HeightRequest="200"
    WidthRequest="200"
    HorizontalOptions="FillAndExpand"
    VerticalOptions="FillAndExpand"/>

XAML.cs

代码语言:javascript
运行
复制
web_view.Source = "https://player.vimeo.com/video/303543322";

我尝试了Plugin.MediaManager.Forms,但是它需要链接中的视频格式(.mp4,.mkv),否则它将无法工作。那么,是否有任何方法来解决webview本身的这个问题,或者我是否应该选择任何其他的播放器(视频和音频)来支持播放没有视频格式的视频?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-16 08:55:23

首先,在您的PCL中创建一个从WebView继承的新类。并定义一个可绑定的属性,指出应该在iOS上加载什么url。

代码语言:javascript
运行
复制
public class MyWebView : WebView
{
    public static readonly BindableProperty UrlProperty = BindableProperty.Create(
        propertyName: "Url",
        returnType: typeof(string),
        declaringType: typeof(MyWebView),
        defaultValue: default(string));

    public string Url
    {
        get { return (string)GetValue(UrlProperty); }
        set { SetValue(UrlProperty, value); }
    }
}

此类在iOS上的自定义呈现程序:

代码语言:javascript
运行
复制
[assembly: ExportRenderer(typeof(MyWebView), typeof(MyWebViewRenderer))]
namespace xxx.iOS
{
    public class MyWebViewRenderer : ViewRenderer<MyWebView, WKWebView>
    {
        WKWebView _wkWebView;
        protected override void OnElementChanged(ElementChangedEventArgs<MyWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                var config = new WKWebViewConfiguration();
                _wkWebView = new WKWebView(Frame, config);
                SetNativeControl(_wkWebView);
            }
            if (e.NewElement != null)
            {
                Control.LoadRequest(new NSUrlRequest(new NSUrl(Element.Url)));
            }
        }
    }
}

适用于Android

代码语言:javascript
运行
复制
[assembly: ExportRenderer(typeof(MyWebView), typeof(MyWebViewRenderer))]
namespace xxx.Droid
{
    public class MyWebViewRenderer : WebViewRenderer
    {
        public MyWebViewRenderer(Context context) : base(context)
        {

        }

        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                var customWebView = Element as MyWebView;
                Control.Settings.AllowUniversalAccessFromFileURLs = true;

                Control.Settings.JavaScriptEnabled = true;    
                Control.LoadUrl(customWebView.Url);          
            }

        }
    }
}

最后,您可以在PCL的页面中使用这个自定义控件,下面是用法:

代码语言:javascript
运行
复制
<StackLayout>
    <local:MyWebView Url="https://www.microsoft.com" VerticalOptions="FillAndExpand"/>
</StackLayout>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59245923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档