我在一个页面中有一个嵌入的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上我没有此类访问权限。
答案 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)。
所以我很抱歉,但这是不可能的。