YouTubeAndroidPlayerAPI 无法播放某些视频

2024-04-24

-- 更新 09/05/2016 17:10 -- 问题似乎与视频的发布日期有关......在4月的最后一周,我在YouTube上发布了很多视频,在4月27日19:00之前发布的视频可以正常工作,而在4月27日21:15之前发布的视频可以正常使用。当天就讨论了该问题,就好像 YouTube 在 4 月 27 日 19 日至 21 日期间对视频进行了一些更新或更改一样。我现在尝试加载新视频,这也有同样的问题。


我的 YouTubeAndroidPlayerAPI 有一个奇怪的问题。我使用 YouTubePlayerSupportFragment(但我对 YouTubePlayerFragment 也有同样的问题)在我的应用程序中播放视频,有些视频播放完美,其他视频显示错误“播放时出现问题。点击重试。 ”。

当这种情况发生在 Android 监视器中时,我看到 YouTube API 错误:

05-08 11:25:22.145 20521-20521/? E/YouTubeAndroidPlayerAPI: fmt.noneavailable
oae: Video not supported/available
at oab.a(SourceFile:212)
at nvl.a(SourceFile:383)
at nvl.a(SourceFile:706)
at nvr.a(SourceFile:1144
at nsn.onPostExecute(SourceFile:2102)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

如果我点击视频中的 YouTube 图标在 YouTube 应用中播放,则该视频在官方应用中可以正确播放。

如果视频已启用获利功能,则广告视频会正常显示,最后会显示错误。

I tried:

  • 使用 YouTubePlayerFragment 而不是 YouTubePlayerSupportFragment
  • 使用 Activity 而不是 AppCompatActivity
  • 将视频嵌入 HTML 页面,它可以正常工作
  • 停用获利功能,没有任何变化
  • 不同的按键,一种用于调试,一种用于发布

非常感谢您的帮助!


更新 11/05/2016这似乎是 YouTube 的一个错误;目前唯一可行的解​​决方法似乎是在 YouTube 官方应用程序中打开视频,或者用 WebView 替换播放器片段。标准 WebView 非常有限,不会显示使视频全屏显示的按钮。 您需要创建一个扩展 WebChromeClient 的类:

public class MyWebChromeClient extends WebChromeClient {

    FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);

    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
        if (mCustomView != null) {
            callback.onCustomViewHidden();
            return;
        }
        mContentView = (LinearLayout) findViewById(R.id.scheda_video_activity);
        mContentView.setVisibility(View.GONE);
        mCustomViewContainer = new FrameLayout(SchedaVideoActivity.this);
        mCustomViewContainer.setLayoutParams(LayoutParameters);
        mCustomViewContainer.setBackgroundResource(android.R.color.black);
        view.setLayoutParams(LayoutParameters);
        mCustomViewContainer.addView(view);
        mCustomView = view;
        mCustomViewCallback = callback;
        mCustomViewContainer.setVisibility(View.VISIBLE);
        setContentView(mCustomViewContainer);
    }

    @Override
    public void onHideCustomView() {
        if (mCustomView == null) {
            return;
        } else {
            mCustomView.setVisibility(View.GONE);
            mCustomViewContainer.removeView(mCustomView);
            mCustomView = null;
            mCustomViewContainer.setVisibility(View.GONE);
            mCustomViewCallback.onCustomViewHidden();
            mContentView.setVisibility(View.VISIBLE);
            setContentView(mContentView);
        }
    }
}

然后初始化WebView:

WebView myWebView = (WebView)findViewById(R.id.webview);
MyWebChromeClient mWebChromeClient = new MyWebChromeClient();
myWebView.setWebChromeClient(mWebChromeClient);
myWebView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }
});
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

最后,在WebView中加载视频:

myWebView.loadUrl("https://www.youtube.com/embed/"+youtube_id);

如果您想让 WebView 尺寸适应 YouTube 播放器,您可以执行以下操作:

Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
myWebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int)Math.round(size.x/1.77)));

尝试将您的 YouTube 应用更新至版本 11.19.56。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YouTubeAndroidPlayerAPI 无法播放某些视频 的相关文章

随机推荐

  • 设置 AngularJS 日期过滤器格式以供所有对日期过滤器的引用使用?

    而不必为每次调用定义自定义格式date过滤器 有没有办法全局定义默认格式 除了 medium 我希望将格式设置在一个文件中 而不是在代码中的所有位置设置 日期格式可能最终会在将来发生更改 并且在一个文件中进行修改比在许多文件中进行更改要好得
  • 时间序列距离度量

    为了对一组时间序列进行聚类 我正在寻找一个智能距离度量 我尝试过一些众所周知的指标 但没有一个适合我的情况 ex Let s assume that my cluster algorithm extracts this three cent
  • 字典无法识别键类型

    在 Xcode beta 3 中 以下代码不再有效 func keyboardWasShown notification NSNotification var info notification userInfo keyboardSize
  • bxslider 在 IE9 中不工作

    我有一个 bxslider 插件在我为某人制作的网站上工作 它适用于除 IE9 之外的所有浏览器 也可能是 IE 的早期版本 但我必须测试它的是 9 我想知道我的代码哪里出了问题 我会提到它与scrolldeck视差插件一起运行 这是我的标
  • 在集群上运行时插入符号中发生错误

    我正在运行train函数于caret http cran r project org web packages caret index html在集群上通过doRedis http cran r project org web packag
  • 通过代码使 SHIFT+3 在 OSX 上生成 `#` 而不是 `£`

    在我的英国 MacBook Air 上 可以使用 OPT 3 键入 SHIFT 3 目前产生 如何重新接线以便 SHIFT 3 产生 这个问题的动机是https apple stackexchange com questions 15615
  • 关于特定国家/地区的mysql日期格式

    我使用MySQL函数DATE FORMAT table field d b Y 其中第一个参数是我的列 第二个参数是根据日期逻辑格式化列的模式 该函数的输出为英文 10 Feb 2014 我想将区域设置语言设置为fr FR这将输出这个正确的
  • 在全日历中显示图像作为背景

    我一直在寻找一些代码来使用图像作为 fullcalendar 中事件的背景 全日历 jQuery https fullcalendar io 但我所能找到的只是向所述事件添加图标的代码 我想做这样的事情 更新 2016 09 23 晚上 8
  • 如何将 python 脚本日志记录到在 Google Cloud VM 上运行的 Google stackdriver 日志记录中

    我正在使用 Google Cloud 虚拟机来运行在 cron 上安排的 python 脚本 我正在寻找某种方法来检查脚本日志并将我的脚本运行日志添加到 google stackdriver 日志记录中 无论如何 是否有将 python 脚
  • 应用程序恢复时如何处理推送通知?

    尝试使用处理推送通知推送插件 https github com phonegap build PushPlugin 以下是我的代码 onNotificationGCM function e switch e event case regis
  • 如何将OpenERP 5.0升级到6.0

    我安装了 OpenERP 5 0 其中包含一些自定义模块 我希望将其升级到 OpenERP 6 0 我对这种软件有一些经验 并且检查过OpenERP 遗憾的是 我没有 OpenERP 的实际经验 我喜欢寻求一些帮助以避免错误 在研究这个问题
  • 无法在 Flask 后端提取 React 前端上传的图像文件

    我正在尝试将图像文件 驻留在本地 从我的反应单页前端应用程序发送到我的烧瓶后端 我尝试过但不限于捕获我的内容类型并在前端指示 encType 的一些事情 尽管如此 post请求表明它是成功的 但是 当我记录 requests files r
  • 在python中将一些数组合并到单个数组/列表中

    如何转换这个数组 不同维度的numpy l array 0 08 array 0 56 0 01 0 46 array 0 60 0 07 0 03 array 0 0 0 0 array 0 到一维数组中 l array 0 08 0 5
  • 使用 XSLT 的 XML 到 XML,根据值省略特定元素

    我正在尝试生成一个与初始文件几乎相同的 xml 文件 但我需要我的 xsl 表将其转换为仅包含 为 公寓 或 单元 且具有值的文件 中超过 1 个我完全迷失了 任何帮助将不胜感激 我最初的 xml 表如下
  • SVG/矢量图室内导航路由

    我一直在网上搜索有关如何为基于 SVG 的室内平面图实现我自己的点对点导航系统的教程或方法 我已经在网上搜索过 但唯一的选项适用于谷歌地图 不过 我使用 Illustrator 创建了地图 并使用路径 矢量作为 SVG 图像 我不需要为用户
  • RestTemplate ClientHttpResponse.getBody() 抛出 I/O 错误

    我正在使用 Spring RestTemplate 进行 RESTful 调用 我还使用自定义 ClientHttpRequestInterceptor 来记录请求和响应以进行调试 为了多次读取响应 一次用于日志记录 一次用于处理 我使用
  • 使用子进程 PIPE 在 Python 脚本之间发送字符串

    我想在我的主 python 程序中使用子进程打开一个 Python 脚本 我希望这两个程序能够在运行时相互聊天 这样我就可以监视从属脚本中的活动 即我需要它们在彼此之间发送字符串 主程序将具有与此类似的功能 它将与从属脚本进行通信并监视 S
  • 如何修改 IE 和 Opera 中 SELECT 标签的默认突出显示行为?

    这是我的 HTML
  • 如何获取 ListView 项目 onItemClick 的光标值?

    我创建了一个数据库 其中包含表 类别 和列 id 标题等 我想从我的数据库中读取这些类别的数据并将它们列出在ListView 这是我的代码 public class MainActivity extends listActivity pri
  • YouTubeAndroidPlayerAPI 无法播放某些视频

    更新 09 05 2016 17 10 问题似乎与视频的发布日期有关 在4月的最后一周 我在YouTube上发布了很多视频 在4月27日19 00之前发布的视频可以正常工作 而在4月27日21 15之前发布的视频可以正常使用 当天就讨论了该