【问题标题】:YouTube embed showing device support optionYouTube 嵌入显示设备支持选项
【发布时间】:2015-07-19 01:10:27
【问题描述】:

我使用两个使用 YouTube Iframe API 的指令将 Youtube 视频嵌入到我的 Angular 应用程序中。第一个异步加载库

   angular.module('myApp')
    .service('youTubeService', function($rootScope, $window) {
      var self = this;
      self.ready = false;
      $window.onYouTubeIframeAPIReady = function () {
          self.ready = true;
          console.log("Youtube service ready");
          $rootScope.$broadcast('youTubeServiceReady', true);
      };
      var tag = document.createElement('script');
      tag.src = '//www.youtube.com/iframe_api';
      var firstScriptTag = document.getElementsByTagName('script')[0];
      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    });

然后我使用 javascript 库嵌入视频

angular.module('myApp')
  .directive('youtube', function (youTubeService) {
    return {
          link: function (scope, element, attrs) {
              var player;
              var playerReady = false;
              var playerState;
              var callback;

              var carouselScope = element.parent().parent().scope();

              function createPlayer() {
                  player = new YT.Player(element[0], {
                      height: attrs.height,
                      width: attrs.width,
                      videoId: attrs.youtube,
                      playerVars: { 'start' : attrs.starttime, 'end' : attrs.endtime, 'origin': 'https://', showinfo: 0, modestbranding: 1 },
                      events: {
                          onReady: function () {
                              playerReady = true;
                              // if (callback !== null) {
                              //     callback();
                              // }
                          },
                          onStateChange: function (event) {
                              //console.log("Time:" + getCurrentTime() + ", Duration:" + getDuration() );
                              playerState = event.data;
                              if (playerState === YT.PlayerState.PAUSED) {
                                 carouselScope.play();
                              }
                          }
                      }
                  });
              }

              if (youTubeService.ready) {
                  createPlayer();
              } else {
                  scope.$on('youTubeServiceReady', function () {
                      createPlayer();
                  });
              }
    ...

直到昨天为止,这已经工作了几个月,但现在我得到了以下视频,因为我嵌入了所有桌面浏览器,如此处所述

https://support.google.com/youtube/answer/6098135?hl=en-GB

我的问题是我不知道我应该改变什么,因为据我了解 iframe api 是正确的。有谁知道我应该改变什么?

【问题讨论】:

  • 服务和指令代码看起来不错;但是,看起来您正在加载通过指令 (attrs.youtube) 上的属性提供的 youtube ID。那个属性是怎么设置的……是手动的吗?还是从数据 API 获取的 ID?如果是后者,那么该来源很可能正在使用现已停用的 V2 API。
  • 由于这个确切的问题,我们的整个网站都被破坏了 :( 与我们的代码的唯一区别是 onYouTubeIframeAPIReady 被放在 Angular 应用程序之外,并且承诺会定期检查全局设置就绪的 bool .
  • 另外,更奇怪的是,一些嵌入在我们的网站中使用相同的确切代码工作。
  • @jlmcdonald - 感谢您为我指明正确的方向。我们使用使用 V2 api 的 rails gem 在我们的 id 中获取视频。当我们切换到一个新的 gem 时,一切都恢复正常了。如果您发表评论作为答案,我会接受

标签: youtube youtube-api embed


【解决方案1】:

所以我们的网站遇到了完全相同的问题。

事实证明,我们的客户端使用的代码与您上面的代码非常相似,并且运行正常。我们的问题最终是我们向数据库添加视频和视频元数据的方式。

这可能不是你的问题,但我们正在使用

http://gdata.youtube.com/feeds/api/videos/<video id>?v=2&alt=json

将视频添加到我们的系统。由于事实证明这是一个已弃用的端点,我们必须升级到 v3 系统,此处解释:https://developers.google.com/youtube/v3/docs/videos/list

【讨论】:

  • 我们使用了正确的端点,但我们使用与 v2 api 通信的 Rails gem 获取视频 ID。很高兴您的网站再次正常运行!
  • 介意分享一些关于您用来替换此调用以获取元数据的 sn-p 吗?
猜你喜欢
  • 2012-10-14
  • 1970-01-01
  • 2019-03-19
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
相关资源
最近更新 更多