【问题标题】:jwplayer v7.xx _.getVideoData is not a function issuejwplayer v7.xx _.getVideoData 不是函数问题
【发布时间】:2018-04-27 04:36:46
【问题描述】:

从今天开始,当我想动态更改我网站上的视频时,我在 youtube 托管的视频上遇到了以下问题。

_.getVideoData 不是函数

Uncaught TypeError: _.getVideoData is not a function
at M (ssl.p.jwpcdn.com/player/v/7.12.11/provider.youtube.js:1)
at load (ssl.p.jwpcdn.com/player/v/7.12.11/provider.youtube.js:1)
at l.a (ssl.p.jwpcdn.com/player/v/7.12.11/provider.youtube.js:1)
at l.<anonymous> 
(ssl.p.jwpcdn.com/player/v/7.12.11/provider.youtube.js:1)
at P (ssl.p.jwpcdn.com/player/v/7.12.11/provider.youtube.js:1)
at K.f.I (s.ytimg.com/yts/jsbin/www-widgetapi-vflnzpyZ4/www-
widgetapi.js:66)
at W.f.l (s.ytimg.com/yts/jsbin/www-widgetapi-vflnzpyZ4/www-
widgetapi.js:114)
at W.f.J (s.ytimg.com/yts/jsbin/www-widgetapi-vflnzpyZ4/www-
widgetapi.js:127)
at S.g (s.ytimg.com/yts/jsbin/www-widgetapi-vflnzpyZ4/www-
widgetapi.js:143)
at g (s.ytimg.com/yts/jsbin/www-widgetapi-vflnzpyZ4/www-
widgetapi.js:95)

直到今天它还运行良好。 (jwplayer 8 版本出现同样问题)

【问题讨论】:

  • 我改变视频的函数:function videotValt(newfile){ var windowWidth = window.innerWidth; var windowHeight = window.innerHeight; jwplayer("videoPosition").setup({ file: newfile, autostart: true, width:windowWidth, height:windowHeight,}); playerInitialized = true; $(".loading").show(); setTimeout("videoCheck2()", 500); }
  • 我们早在几天前就开始看到这个问题。我们也使用 jwplayer 7.x.x。一年前他们已经放弃了对 youtube 插件的维护,这可能只是插件的致命一击。这很糟糕。
  • 问题在于 YouTube 从 API 中删除了未记录的“getVideoData”方法。它影响了许多 YouTube “包装”播放器。这曾经发生过,然后又像消失一样悄无声息地回来了!我确实有一个修复,但这取决于你如何应用它的具体实现。您能否分享指向问题页面的链接?
  • JW 8 不支持 Youtube 视频。

标签: javascript youtube youtube-api jwplayer jwplayer7


【解决方案1】:

JW Player 7.12.x 使用youtube-iframe-apigetVideoData 方法在没有警告的情况下被删除,我们希望 Google 将其放回原处以恢复使用它的集成的功能。

JW Player Youtube 提供者的来源可以在这里找到和分叉:

https://github.com/jwplayer/jwplayer/blob/v7.12.x/src/js/providers/youtube.js

这个问题正在这里的项目中进行跟踪:

https://github.com/jwplayer/jwplayer/issues/2525

【讨论】:

  • YouTube 似乎在 11 月 16 日恢复了 getVideoData 方法,这不再是问题。
【解决方案2】:

尝试了补丁插件但出现错误:无法在“DOMWindow”上执行“postMessage”:提供的目标来源(“https://www.youtube.com”)与收件人不匹配

更新:

如果你从 source/git v7.12 编译;

src/js/providers/youtube.js

替换:

var videoData = _youtubePlayer.getVideoData();
var currentVideoId = videoData && videoData.video_id;

与:

var videoData = _youtubePlayer.getVideoUrl();
videoData = videoData.split('=');
var currentVideoId = videoData[1];

【讨论】:

  • 这与插件无关 - 在“正常”情况下,JW 播放器实施通常会出现该消息。
【解决方案3】:

在您等待来自 Google 的消息的同时,我创建了一个插件来修复它。从这里下载:

https://www.dev.powered-by-haiku.co.uk/solutions/getvideodata/code/getvideodata.js

(注意:您需要将 URL 复制并粘贴到浏览器中才能获取代码,因为不允许盗链)

像应用任何其他 JW 插件一样应用它:

"plugins":{
     "getvideodata.js":{}
}

编辑:现在已经更新以适应 "autostart":true 场景。 请注意,最新版本的 Chrome 现在会阻止不是通过用户手势启动的媒体播放,并且由于 JW Player 无法正常处理产生的错误状态(例如,尝试自动启动 YouTube 时),播放器将获得进入明显的无限缓冲状态。此插件通过取消 Chrome 上的自动启动请求并让用户启动播放来解决此问题。

【讨论】:

  • 嗨,你能告诉我如何使用你的插件吗?我现在在 jwplayer.js 和我的代码下面添加了脚本:: jwplayer("myElement").setup({ autostart: true, file: video,"plugins":{ "jwplayer/getvideodata.js":{} },宽度:“100%”,纵横比:“16:9”,});
  • @SalihK - 您不需要明确包含脚本,只需将其添加到设置块中即可 - 但请确保“jwplayer/getvideodata.js”解析为在您的服务器上下载文件。
  • @SalihK - 我刚刚注意到这在某些情况下不适用于 "autostart":true - 这是因为没有一种干净的方法可以连接到原始 YouTube 实例,并且因此正在发生竞争条件。如果您在短期内将“自动启动”设置为 false,我会寻找解决此问题的方法。
猜你喜欢
  • 1970-01-01
  • 2016-05-21
  • 2015-09-05
  • 1970-01-01
  • 2021-11-05
  • 2018-11-10
  • 2019-09-04
  • 2017-06-27
  • 1970-01-01
相关资源
最近更新 更多