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

时间:2015-01-08 09:33:18

标签: javascript api video youtube youtube-api

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

我正在使用player.setPlaybackRate(value);

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

在YouTube中,我可以使用document.getElementsByTagName("video")[0].playbackRate = 3轻松调整速度,但在iframe上我没有此类访问权限。

4 个答案:

答案 0 :(得分:17)

你在哪里看到播放器API限制了这些值?在javascript API中,您可以使用setPlaybackRate来设置建议的播放速率,但它表示不会保证您发送的内容将被设置。您应该使用getAvailablePlaybackRates获取播放速率列表,然后选择合适的播放速率。您可以通过聆听onPlaybackRateChangeevent来确定实际设置的比率。如果您尝试将其设置为3并且这不是可用费率之一,则它将向1舍入为最接近的费率。

答案 1 :(得分:12)

编辑:这不再适用了。

这是因为同源政策。当根源(您的网站)访问iframe时,它似乎也会更改iframe的来源。因此,视频无法从其他来源(youtube.com)加载。查看我的test on JSFiddle

我认为之前有效的事实是最近修复过的XSS安全问题。所以我无法想象在youtube中修改iframe甚至是可能的。至少不是这样。

感谢@maxple指出!


原帖:

对于较新的浏览器和HTML5 Iframe Sandbox Attribute

,这应该是可行的

使用该选项,您可以访问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>

有关详细信息,请参阅此post

答案 2 :(得分:6)

您无法在iFrame中执行相同的操作。

您在Youtube中执行的操作是编辑实际的视频标记,但是从其他网站执行此操作的唯一方法是通过Google提供的API(由于XSS问题),并且他们是否已决定仅允许建议的值,即在做可能违反服务条款的事情之外的最佳镜头,是contact Google并要求他们通过API允许第三级速度。

答案 3 :(得分:3)

不幸的是,您正在尝试从其他域编辑iframe的内容。主流浏览器都不允许您通过javascript执行此操作。

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

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

但不知怎的,youtube阻止了不同的起源,它只给了我黑屏。 我猜这是因为youtube使用flash播放器嵌入视频(而不是像网站上那样使用html5)。

所以我很抱歉,但这是不可能的。