Youtube Javascript API - 禁用相关视频

时间:2012-11-16 13:55:16

标签: javascript youtube-api

是的,这似乎记录不清,或者我在文档中看不到它。我基本上不需要使用JavaScript API的相关视频(?rel=0)。

$players[$vidIdPlaceholderRef] = new YT.Player('player_' + $vidIdPlaceholderRef, {
    height: '550',
    width: '840',
    videoId: $vidId
});

就是我所拥有的。

我也尝试过:

$players[$vidIdPlaceholderRef] = new YT.Player('player_' + $vidIdPlaceholderRef, {
    height: '550',
    width: '840',
    videoId: $vidId + '?rel=0',
    rel : 0
});
没有运气。是否有人知道可以添加的选项(尝试rel : 0没有运气)

8 个答案:

答案 0 :(得分:148)

“rel”是一个播放器参数,如下所示:

https://developers.google.com/youtube/player_parameters#rel

要向iframe播放器添加播放器参数,您需要指定第二个构造函数参数的playerVars属性(在撰写本文时,请记录here,并在IFrame API documentation page上)

e.g。

new YT.Player('playerid', {
    height: '550',
    width: '840',
    videoID: 'video_id',
    playerVars: {rel: 0, showinfo: 0, ecver: 2}
});

答案 1 :(得分:12)

rel播放器参数的行为已更改。

From documentation

  

rel参数的行为在9月或之后改变   25日,2018年。更改的结果是您将无法   禁用相关视频。但是,您可以选择   指定播放器中显示的相关视频应来自   与刚刚播放的视频相同的频道

因此,不再可能禁用相关视频。相反,playerVars: {rel:0}会更改播放器的行为并显示来自指定频道的建议。

答案 2 :(得分:3)

接受的解决方案对我不起作用。工作是什么:

1)将iframe放在包含rel参数的html中

<iframe id="youtube-video" width="560" height="315" 
 src="https://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1&rel=0&modestbranding=1" 
 frameborder="0" enablejsapi="1" allowfullscreen></iframe>

2)使用javascript API附加到现有播放器

var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

var player;
function onYouTubeIframeAPIReady() {
  player = new YT.Player('youtube-video', {
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
}

function onPlayerReady(event) {
    console.log("ready");
}

function onPlayerStateChange(event) {
    console.log("state changed");
}

演示小提琴:http://jsfiddle.net/bf7zQ/195/

答案 3 :(得分:1)

如果您正在使用SWFObject,则只需执行以下操作:

function loadVideo() {
        var params = { allowScriptAccess: "always" }
            , atts = { id: "myvideo" }
        ;
//NOTE THE END OF THE BELOW LINE vvvvvv
        swfobject.embedSWF("https://www.youtube.com/v/[video id here]?enablejsapi=1&playerapiid=myvideo&version=3&rel=0"
         , "videoplaceholderid"
         , "768", "432", "8", null, null, params, atts);
    }

只需将rel=0添加到您网址的末尾即可。

答案 4 :(得分:0)

无需通过API进行编码,现在可以通过

轻松完成

你管嵌入按钮 - &gt;显示更多 - &gt;选中“视频播放时显示建议的视频”选项

答案 5 :(得分:0)

这是一个快速的解决方案:

setInterval(function(){
    if($('iframe').length > 0){
        $('iframe').each(function(){
            if($(this).hasClass('gotYou')){
                //do nothing
            }else{
                var getMySrc = $(this).attr('src');
                var newSrc = getMySrc.split('?');
                console.log(newSrc);
                var freshURL = newSrc[0]+'?rel=0&'+newSrc[1];
                console.log(freshURL);
                $(this).addClass('gotYou');
                $(this).attr('src', freshURL );         
            }
        });
    }
}, 1);

它是做什么的,它将在您的文档中查找iframe。如果找到iframe,它将获取iframe的src,找到?标记,然后将?替换为?rel=0&。这里的目标是淘汰rel=0

答案 6 :(得分:0)

new YT.Player('playerid', {
    height: '550',
    width: '840',
    videoID: 'video_id',
    playerVars: {rel: 0},
});

答案 7 :(得分:0)

您会在两个位置获得相关视频:在带网格的视频结尾处,以及暂停时在视频底部。我想出了一种方法,可以在最后删除它们,并使大多数企业至少可以容忍底部的内容。

1。在视频末尾删除相关视频

IFrame Player API: Events

为避免在视频结尾显示相关视频,我只是停止了视频,所以它返回到显示缩略图和播放按钮:

var player = new YT.Player('player', {
   height: '390',
   width: '640',
   events: {
      'onStateChange': function(event){
         switch(event.data){
            // Stop the video on ending so recommended videos don't pop up
            case 0:     // ended
               player.stopVideo();
               break;
            case -1:    // unstarted
            case 1:     // playing
            case 2:     // paused
            case 3:     // buffering
            case 5:     // video cued
            default:
               break;
         }
      }
   }
});

您还可以将player.stopVideo();替换为要运行的任何其他代码。

2。在视频底部制作相关视频只会显示您的视频

IFrame Player API: YouTube Embedded Players and Player Parameters

rel=0不再避免显示任何相关视频;现在,它仍将显示相关视频,但至少它们仅来自您的频道。这种情况在2018年9月25日(documentation)前后的某个时间发生了变化。

通过在YT.Player中设置playerVars,我们至少可以使相关视频仅显示我们频道的视频。文档尚不清楚您必须将playerVars设置为对象,但是可以像这样设置它:

var player = new YT.Player('player', {
   ...
   playerVars:{
      rel:              0
      modestbranding:   1,       // If you're trying to remove branding I figure this is helpful to mention as well; removes the YouTube logo from the bottom controls of the player
      // color:         'white', // Can't have this and modestbranding active simultaneously (just a note in case you run into this)
   },
   ...
});

2A。从底部删除相关视频的潜在方法

如果有时间,我可能会对其进行更多研究,但这是答案所在:

我们可以轻松访问iframe对象,但无法对其进行任何操作:IFrame Player API: Accessing and modifying DOM nodes。似乎因为我们要从YouTube编辑iframe,所以存在安全方面的顾虑(无论我们实际上在做什么)。理想情况下,我可以使用player.getIframe().contentWindow.document.querySelector('.ytp-pause-overlay.ytp-scroll-min').remove()删除“更多视频”文本,但是运行player.getIframe().contentWindow.document时会出现错误SecurityError: Permission denied to access property "document" on cross-origin object

但是playerVars也有一个origin值,无论如何它可以让我们访问iframe的对象:

var player = new YT.Player('player', {
   ...
   playerVars:{
      origin:           'https://mywebsite.com'
   },
   ...
});

它不适用于localhost,但适用于that may be a Chromium and Firefox thing。在现场站点上,这也许是一个合法的选择。当/如果我尝试通过此方式通知我是否成功,我会更新该帖子。