【问题标题】:Videos unavailable when trying to play embedded youtube url (Xamrin.Android)尝试播放嵌入式 youtube url (Xamarin.Android) 时视频不可用
【发布时间】:2020-07-22 10:35:07
【问题描述】:

我正在使用 Xamarin Android 开发一个用于歌曲建议的应用程序,并且我正在使用嵌入的 youtube url,我想要理解的是为什么有些视频播放正常而其他视频显示错误并且根本不播放.错误是“视频不可用”。 我找到了一个解决方案,将html上传到服务器,但我无法上传,因为我动态更改了视频

谢谢。

    protected async override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        Window.RequestFeature(Android.Views.WindowFeatures.NoTitle);
        SetContentView(Resource.Layout.songSuggestion_layout);
        SetViews();
        categories = new Categories();
        songs = new Songs();
        songSuggsted = new Songs();
        playlist = new Playlist();

        await SetListSongsOfSuggestion();



        var metrics = Resources.DisplayMetrics;
        //fix video screen height and width
        //intDisplayWidth = (FnConvertPixelsToDp(metrics.WidthPixels) + 200);
        //intDisplayHeight = (FnConvertPixelsToDp(metrics.HeightPixels)) / (2);

        intDisplayHeight = 500;
        intDisplayWidth = 1000;
        PlayInWebView();



    }



    public void PlayInWebView()
    {
         string strUrl = songSuggsted[position].UrlSong;

      //  string strUrl= "https://www.youtube.com/watch?v=u_VsvZmIWxY";
        string id = FnGetVideoID(strUrl);
        if (!string.IsNullOrEmpty(id))
        {
            strUrl = string.Format("http://youtube.com/embed/{0}", id);
        }
        else
        {
            Toast.MakeText(this, "Video url is not in correct format", ToastLength.Long).Show();
            return;
        }
        string html = @"<html><body><iframe width=""videoWidth"" height=""videoHeight"" src=""strUrl""></iframe></body></html>";
        var myWebView = (WebView)FindViewById(Resource.Id.videoView);
        var settings = myWebView.Settings;
        settings.JavaScriptEnabled = true;
        settings.UseWideViewPort = true;
        settings.LoadWithOverviewMode = true;
        settings.JavaScriptCanOpenWindowsAutomatically = true;
        settings.DomStorageEnabled = true;
        settings.SetRenderPriority(WebSettings.RenderPriority.High);
        settings.BuiltInZoomControls = false;

        settings.JavaScriptCanOpenWindowsAutomatically = true;
        myWebView.SetWebChromeClient(new WebChromeClient());
        settings.AllowFileAccess = true;
        settings.SetPluginState(WebSettings.PluginState.On);
        string strYouTubeURL = html.Replace("videoWidth", intDisplayWidth.ToString()).Replace("videoHeight", intDisplayHeight.ToString()).Replace("strUrl", strUrl);

        myWebView.LoadDataWithBaseURL(null, strYouTubeURL, "text/html", "UTF-8", null);

    }


    static string FnGetVideoID(string strVideoURL)
    {
        const string regExpPattern = @"youtu(?:\.be|be\.com)/(?:.*v(?:/|=)|(?:.*/)?)([a-zA-Z0-9-_]+)";
        //for Vimeo: vimeo\.com/(?:.*#|.*/videos/)?([0-9]+)
        var regEx = new Regex(regExpPattern);
        var match = regEx.Match(strVideoURL);
        return match.Success ? match.Groups[1].Value : null;
    }



    int FnConvertPixelsToDp(float pixelValue)
    {
        var dp = (int)((pixelValue) / Resources.DisplayMetrics.Density);
        return dp;
    }

【问题讨论】:

标签: c# android xamarin.android youtube embed


【解决方案1】:

你可以试试下面的代码:

在 android 布局中创建一个 webview。

Xaml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.webkit.WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

代码背后:

 var myWebView = FindViewById<WebView>(Resource.Id.webView1);
        WebSettings setting = myWebView.Settings;
        setting.JavaScriptEnabled = true;
        myWebView.SetWebChromeClient(new WebChromeClient());
        myWebView.LoadUrl("https://www.youtube.com/watch?v=6hzrDeceEKc");

【讨论】:

  • 您可以与我们分享并接受作为答案。谢谢~
  • 所以,有一种更简单的方法可以做到这一点,您可以使用 Xamrin.Youtube.Player,它工作正常。我从这个网站了解到 - sitepoint.com/…
  • 这不能回答问题。 OP 询问嵌入式 YouTube 视频,而不仅仅是 YouTube 网站视频的网址。嵌入的 Youtube 视频使用 iFrame 和“嵌入”API 参数,这在 WebView 中存在问题。
猜你喜欢
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 2012-11-29
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多