将 Youtube 视频嵌入到 WebView(Appcelerator)不显示(黑屏)

Posted

技术标签:

【中文标题】将 Youtube 视频嵌入到 WebView(Appcelerator)不显示(黑屏)【英文标题】:Embeded Youtube video to WebView (Appcelerator) doesn't show (black screen) 【发布时间】:2016-04-26 13:37:48 【问题描述】:

我尝试在我的应用程序(Appcelerator、android)中显示 YT 视频。我发现最好的方法是在 WebView 中显示嵌入视频,所以我用这样的代码来做:

var webView = Ti.UI.createWebView(
   url: 'https://www.youtube.com/embed/LTRfmqc0KBg',
   enableZoomControls: false,
   scalesPageToFit: true,
   scrollsToTop: false,
   showScrollbars: false
);

但视频无法加载(我只看到黑屏 - 而不是 webview 的白色)。 WebView 可以正常工作,因为它会显示其他页面。

【问题讨论】:

我们发现这种方法存在许多问题并最终放弃了它。我们回到使用 Appcelerator 原生的视频播放器。我想您可能会发现您使用的 URL 不正确。虽然您在自己观看视频时会使用它,但它不适合嵌入到应用程序中。我们最终使用 Youtube api 来获取嵌入在 Youtube 中的视频的原始 url。最终我们放弃了这一点,因为我们不希望 Youtube 粘贴在顶部的广告内容。 那么你的答案是什么,因为你给我写了一些建议,最后你说他们都错了...... 嗨!你有没有找到这个问题的答案? 【参考方案1】:

那你可以试试这个

var Win = Titanium.UI.createWindow(
    title : 'Video View Demo',
    backgroundColor : '#fff'
);
var video_url = 'https://www.youtube.com/watch?v=bSiDLCf5u3s';
var movie = '<html><head></head><body style="margin:0"><embed id="yt" src="' + video_url + '" type="application/x-shockwave-flash"  ></embed></body></html>';


var webView = Ti.UI.createWebView(
    top:0,
    left:0,
    width:480,
    height:266,
    url:video_url,
    html:movie
);

Win.add(webView);
Win.open();

【讨论】:

播放视频时显示“视频不可用”【参考方案2】:

您可以调用设备默认的 youtube 应用为用户打开 url。请看下面的代码

var Win = Titanium.UI.createWindow(
    title : 'Youtube Video View Demo',
    backgroundColor : '#fff'
);
var button = Titanium.UI.createButton(
   title: 'Hello',
   top: 10,
   width: 100,
   height: 50
);
button.addEventListener('click',function(e)

   Titanium.Platform.openURL('https://www.youtube.com/watch?v=bSiDLCf5u3s');
);
Win.add(button);
Win.open();

谢谢。

【讨论】:

谢谢谢里夫,但它会在浏览器/YT 应用程序中打开视频。我想在应用内显示视频,而不是在应用外...【参考方案3】:

我发现嵌入式视频无法在 Android 上运行,而在 ios 上运行良好。 但是,使用 webviews url 属性切换表单以加载视频,使用 setHtml() 函数有效。这样做的方法是使用 Youtube iframe api。

var videoUrl = 'https://www.youtube.com/embed/' + videoId + '?    autoplay=1&autohide=1&cc_load_policy=0&color=white&controls=0&fs=0&iv_load_policy=3&modestbranding=1&rel=0&showinfo=0';
var playerWidth = $.youtubeWebView.width;
var playerHeight = $.youtubeWebView.height;
var html = '<iframe id="player" type="text/html"   src="'+videoUrl+'" frameborder="0"></iframe>';
$.youtubeWebView.setHtml(html);

请注意,iframe 可能会很痛苦,将其添加到加载事件中以消除顶部和左侧奇怪的白色填充

this.evalJS('document.getElementsByTagName("body")[0].style.margin=0;');

类似这样的:

$.youtubeWebView.addEventListener('load', function()
    this.evalJS('document.getElementsByTagName("body")[0].style.margin=0;');
    var showYoutubeTimer = setTimeout(function() 
        $.activityIndicator.hide();
    $.youtubeWebView.opacity = 1;
    clearTimeout(showYoutubeTimer);
    , 300);
);

【讨论】:

以上是关于将 Youtube 视频嵌入到 WebView(Appcelerator)不显示(黑屏)的主要内容,如果未能解决你的问题,请参考以下文章

在 React Native 的 Webview 中嵌入 youtube 视频

Youtube 嵌入视频在 webview 中不起作用。这段代码有啥问题?

Android webview 无法渲染通过 iframe 嵌入的 youtube 视频

带有嵌入式 youtube 视频的 Android WebView,全屏按钮冻结视频

在 WebView 中播放 youtube 视频

在 Android WebView 中自动播放嵌入的 YouTube 视频有啥新技巧吗?