Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有自定义速度的嵌入式YouTube视频(如3)_Javascript_Api_Video_Youtube_Youtube Api - Fatal编程技术网

Javascript 具有自定义速度的嵌入式YouTube视频(如3)

Javascript 具有自定义速度的嵌入式YouTube视频(如3),javascript,api,video,youtube,youtube-api,Javascript,Api,Video,Youtube,Youtube Api,我在一个页面中嵌入了一个YouTube视频,并且有一个滑块,可以用来设置播放器的速度 我正在使用player.setPlaybackRate(值) 问题是我想要的范围是0.5到3,但播放器API仅将值限制为预定义的[0.25,0.5,1,1.25,1.5,2] 在YouTube上,我可以通过document.getElementsByTagName(“视频”)[0]轻松调整速度。playbackRate=3但在iframe上我没有这样的访问权限。不幸的是,您试图编辑来自另一个域的iframe内容

我在一个页面中嵌入了一个YouTube视频,并且有一个滑块,可以用来设置播放器的速度

我正在使用
player.setPlaybackRate(值)


问题是我想要的范围是0.5到3,但播放器API仅将值限制为预定义的
[0.25,0.5,1,1.25,1.5,2]


在YouTube上,我可以通过
document.getElementsByTagName(“视频”)[0]轻松调整速度。playbackRate=3
但在iframe上我没有这样的访问权限。

不幸的是,您试图编辑来自另一个域的iframe内容。没有一款主流浏览器允许您通过javascript实现这一点

我尝试并创建了php文件,该文件将获取youtube嵌入iframe的内容

<?php 
    $url = $_GET['url'];
    $contents = file_get_contents($url);
    echo $contents;
?>

但不知何故,youtube屏蔽了不同的来源,它只给了我黑屏。 我猜这是因为youtube使用flash播放器嵌入视频(而不是像他们在网站上那样使用html5)


很抱歉,这是不可能的。

您在哪里看到播放器API限制了这些值?在JavaScriptAPI中,您可以使用设置建议的播放速率,但它表示无法保证将设置您发送的内容。您应该使用获取播放速率列表,然后选择适当的播放速率。您可以通过收听以下内容来了解实际设置的速率。如果您尝试将其设置为3,但这不是可用的速率之一,它将向1取整,以最接近的速率。

编辑:这不再有效。

这是由于同一原产地政策。当iframe被根源(您的网站)访问时,它似乎也会更改iframe的源。因此视频无法从其他来源(youtube.com)加载。看我的

我认为,事实上,它以前是一个XSS安全问题,最近已经修复。因此,我无法想象修改youtube iframe中的某些内容是可能的。至少不是这样

谢谢@maxple的指点


原创帖子:

对于较新的浏览器和:

使用该选项,您可以访问iframe DOM节点

<iframe id="myframe" sandbox="allow-scripts" src="about:blank">    </iframe>

<script>
    var frame = document.getElementById("myframe");
    var fdoc = frame.contentDocument;

    fdoc.getElementsByTagName("video")[0].playbackRate = 3; // or whatever
</script>

var frame=document.getElementById(“myframe”);
var fdoc=frame.contentDocument;
fdoc.getElementsByTagName(“视频”)[0]。播放速率=3;//或者别的什么

有关更多信息,请参阅此部分。

在iFrame中不能执行相同的操作。


你在Youtube上所做的是编辑实际的视频标签,但从另一个网站上编辑视频标签的唯一方法是通过谷歌提供的API(出于XSS的考虑),如果他们决定只允许建议的值,你最好不要做可能违反其服务条款的事情,就是让他们通过API实现第三级的速度。

即使他谈到iFrame,我认为他是在专门谈论。我使用
player.getPlaybackRate()
获取值您需要收听OnPlaybackRate更改事件,以便知道何时需要/能够调用getPlaybackRate。否则,由于设置播放速率是异步的并且需要一些时间,因此在设置播放速率后立即调用getPlaybackRate的代码可能会报告错误的速率。确定,但我正在测试的视频的速度仍然不如播放速度快3倍时的速度快。当您为视频调用getAvailablePlaybackRates时,getAvailablePlaybackRates会返回什么?3可用吗?
[0.25,0.5,1,1.25,1.5,2]