禁用相关视频

好吧,这似乎没有很好的文档记录,或者我在文档中看不到。我基本上不希望相关的视频(?rel=0)使用 JavaScriptAPI。

$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,没有运气)

61321 次浏览

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

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

为了向 iframe 播放器添加播放器参数,需要指定第二个构造函数参数的 playerVars 属性(在编写本文时,给你IFrame API 文档页面都有记录)

例如:。

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

如果您正在使用 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添加到 URL 的末尾。

不需要通过 API 编写代码,现在它很容易就可以通过

你管嵌入按钮-> 显示更多-> 标记选项“显示建议的视频时,视频完成”

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

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/

这里有一个快速的解决方案:

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

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

Rel 播放器参数的行为已经改变。

根据文件 ,

Rel 参数的行为在9月份或之后发生变化 2018年2月25日。改变的结果是你将不能 禁用相关视频。但是,您可以选择 指定播放器中显示的相关视频应来自 和刚播放的视频是同一个频道

因此,不再可能禁用相关视频。相反,playerVars: {rel:0}将改变球员的行为,并显示来自指定渠道的建议。

你可以在两个地方看到相关的视频: 在视频的最后用网格显示,在视频的底部暂停。我已经想出了一个办法,在最后删除他们,使底部的那些至少可以容忍大多数企业。

1. 删除视频末尾的相关视频

IFrame 播放器 API: 事件

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

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 播放器 API: YouTube 嵌入式播放器和播放器参数

rel=0不再避免显示任何相关的视频; 现在,它仍然会显示相关的视频,但至少他们将只是从您的频道。这在2018年9月25日左右发生了变化(文件)。

通过在 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: 访问和修改 DOM 节点。似乎因为我们要从 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 一起工作,但是可以与 可能是 Chromium 和 Firefox 的东西一起工作。也许这是一个合法的选择在一个现场网站; 我会更新这篇文章时/如果我尝试让你知道,如果我成功了。