Подтвердить что ты не робот

Встроенное видео YouTube с пользовательской скоростью (например, 3)

У меня есть встроенное видео 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 у меня нет такого доступа.

4b9b3361

Ответ 1

Как вы видите, что API-интерфейс игрока ограничивает значения? В javascript API вы можете использовать setPlaybackRate, чтобы установить рекомендуемую скорость воспроизведения, но в нем говорится, что нет никакой гарантии, что то, что вы отправляете, будет установлено. Вы должны использовать getAvailablePlaybackRates, чтобы получить список скоростей воспроизведения, а затем выбрать подходящий. Вы можете выяснить, на какой скорости он был настроен, прослушив onPlaybackRateChangeevent. Если вы попытаетесь установить его на 3, и это не один из доступных ставок, он будет округлен к 1 до ближайшей скорости.

Ответ 2

EDIT: это больше не работает.

Это связано с политикой того же происхождения. Когда iframe получает доступ к корневому происхождению (ваш сайт), он также меняет происхождение iframe. Таким образом, видео не может загружаться из другого источника (youtube.com). См. Мой тест на JSFiddle.

Я думаю, что тот факт, что он работал раньше, был проблемой безопасности XSS, которая была исправлена ​​в последнее время. Поэтому я не могу себе представить, что изменение в iftube iframe возможно даже больше. По крайней мере, не таким образом.

Спасибо @maxple за указание!


Оригинальное сообщение:

Это должно быть возможно с более новыми браузерами и HTML5 Iframe Sandbox Attribute:

С помощью этой опции вы можете получить доступ к iframe DOM node.

<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>

Подробнее см. .

Ответ 3

Вы не можете сделать то же самое в iFrame.

Что вы делаете в Youtube, это отредактировать фактический тег видео, но единственный способ сделать это с другого веб-сайта - через API, предоставляемый Google (из-за проблем XSS), и если они решили разрешить предлагаемые ценности, ваш лучший снимок за пределами того, что может нарушить их Условия обслуживания, заключается в связаться с Google и попросить их разрешить третий уровень скорость через API.

Ответ 4

К сожалению, вы пытаетесь отредактировать содержимое iframe из другого домена. ни один из основных браузеров не позволяет вам делать это через javascript.

я попытался и создал файл php, который получит содержимое youtube embed iframe

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

но каким-то образом youtube блокирует разное происхождение, и это дало мне только черный экран. как я уже догадался, потому что youtube использует флеш-плеер для встраивания видео (вместо html5, как на веб-сайте).

поэтому я сожалею, но это невозможно.