Показать источник видео Youtube в видеотеге HTML5?

116

Я пытаюсь поместить источник видео YouTube в <video>тег HTML5 , но, похоже, это не работает. После некоторого поиска в Google я обнаружил, что HTML5 не поддерживает URL-адреса видео YouTube в качестве источника.

Можете ли вы использовать HTML5 для встраивания видео с YouTube? Если нет, есть ли обходной путь?

шри
источник
1
Решение IFrame, приведенное ниже на stackoverflow.com/questions/5157377/…, должно использоваться в качестве временного решения.
S Meaden

Ответы:

15

Шаг 1: добавьте &html5=Trueв свой любимый URL-адрес YouTube

Шаг 2. Найдите <video/>тег в источнике

Шаг 3: Добавьте controls="controls"в тег видео:<video controls="controls"..../>

Пример:

<video controls="controls" 
       class="video-stream" 
       x-webkit-airplay="allow" 
       data-youtube-id="N9oxmRT2YWw" 
       src="http://v20.lscache8.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass%2Coc%3AU0hPRVRMVV9FSkNOOV9MRllD&amp;itag=43&amp;ipbits=0&amp;signature=D2BCBE2F115E68C5FF97673F1D797F3C3E3BFB99.59252109C7D2B995A8D51A461FF9A6264879948E&amp;sver=3&amp;ratebypass=yes&amp;expire=1300417200&amp;key=yt1&amp;ip=0.0.0.0&amp;id=37da319914f6616c"></video>

Обратите внимание на некоторые expireвещи. Я не знаю, как долго srcструна будет работать.

Все еще проверяю себя.

Изменить (28 июля 2011 г.) : обратите внимание, что этот источник видео зависит от браузера, который вы используете для получения источника страницы. Я думаю, что Youtube генерирует этот HTML динамически (по крайней мере, в настоящее время), поэтому при тестировании, если я копирую в Firefox, это работает, например, в Firefox, но не в Chrome.

Саймон Флэк
источник
77
Срок действия и тот факт, что он работает только в определенном браузере, делает это решение довольно бесполезным.
pjv
1
Может ли он воспроизводить ВСЕ видео на YouTube?
Радж Паван Гумдал,
2
YouTube теоретически может изменить URL-адреса базового хранилища для всех своих видео, если они захотят в любое время. URL-адрес, указанный в srcатрибуте выше, вероятно, не будет работать долгое время.
Крис Питерс
1
Да, полезная информация, но звучит как плохая идея. YouTube может в любой момент закрыть доступ к прямой ссылке на видео.
Оливер Моран
36

Этот ответ больше не работает, но я ищу решение.

По состоянию на . 2015/02/24. есть веб-сайт (youtubeinmp4), который позволяет загружать видео с YouTube .mp4 format, вы можете использовать это (с помощью некоторого JavaScript), чтобы избежать вложения видео с YouTube в <video>теги. Вот демонстрация этого в действии.

Плюсы

  • Довольно легко реализовать .
  • На самом деле, довольно быстрый ответ сервера (получение видео не занимает много времени).
  • Абстракция (принятое решение, даже если оно работает должным образом, будет применимо только в том случае, если вы заранее знали, какие видео собираетесь воспроизводить, это работает для любого введенного пользователем URL-адреса).

Cons

  • Очевидно, это зависит от youtubeinmp4.comсерверов и их способа предоставления ссылки для скачивания (которая может быть передана в качестве <video>источника), поэтому этот ответ может быть недействительным в будущем.

  • Вы не можете выбрать качество видео.


JavaScript (после load)

videos = document.querySelectorAll("video");
for (var i = 0, l = videos.length; i < l; i++) {
    var video = videos[i];
    var src = video.src || (function () {
        var sources = video.querySelectorAll("source");
        for (var j = 0, sl = sources.length; j < sl; j++) {
            var source = sources[j];
            var type = source.type;
            var isMp4 = type.indexOf("mp4") != -1;
            if (isMp4) return source.src;
        }
        return null;
    })();
    if (src) {
        var isYoutube = src && src.match(/(?:youtu|youtube)(?:\.com|\.be)\/([\w\W]+)/i);
        if (isYoutube) {
            var id = isYoutube[1].match(/watch\?v=|[\w\W]+/gi);
            id = (id.length > 1) ? id.splice(1) : id;
            id = id.toString();
            var mp4url = "http://www.youtubeinmp4.com/redirect.php?video=";
            video.src = mp4url + id;
        }
    }
}

Использование (полное)

<video controls="true">
    <source src="www.youtube.com/watch?v=3bGNuRtlqAQ" type="video/mp4" />
</video>

Стандартный формат видео.

Использование (мини)

<video src="youtu.be/MLeIBFYY6UY" controls="true"></video>

Немного реже, но гораздо меньше, используя сокращенный URL-адрес youtu.beв качестве srcатрибута непосредственно в <video>теге.

Надеюсь, поможет! :)

неопределенный
источник
Хорошая функция и работает в Mozilla и Chrome, но как установить ширину и высоту видео, если <video> имеет ширину 100% и высоту 200 пикселей.
Анмол Ратан
Я реализовал это решение, но через 2 дня YT заблокировал его. Это больше не работает. :(
apires 03
К сожалению, это больше не работает. Раньше он отлично работал. Надеюсь, есть другое решение!
Чамилян
19

<video>Тег предназначен для нагрузки в видео поддерживаемого формата (который может отличаться от браузера).

Ссылки для встраивания YouTube - это не просто видео, они обычно представляют собой веб-страницы, содержащие логику для определения того, что поддерживает ваш пользователь, и как они могут воспроизводить видео на YouTube, используя HTML5, flash или какой-либо другой плагин в зависимости от того, что доступно на ПК пользователя. Вот почему вам трудно использовать тег видео с видео на YouTube.

YouTube действительно предлагает API для разработчиков для встраивания видео с YouTube на вашу страницу.

Я сделал JSFiddle в качестве живого примера: http://jsfiddle.net/zub16fgt/

И вы можете узнать больше об API YouTube здесь: https://developers.google.com/youtube/iframe_api_reference#Getting_Started

Код также можно найти ниже

В вашем HTML:

<div id="player"></div>

В вашем Javascript:

var onPlayerReady = function(event) {
    event.target.playVideo();  
};

// The first argument of YT.Player is an HTML element ID. 
// YouTube API will replace my <div id="player"> tag 
// with an iframe containing the youtube video.

var player = new YT.Player('player', {
    height: 320,
    width: 400,
    videoId : '6Dc1C77nra4',
    events : {
        'onReady' : onPlayerReady
    }
});
Норман Бро
источник
У меня недавно возникла эта проблема: полноэкранный режим больше не поддерживается на iPad! Ваш пример jsfiddle идеально подходит для иллюстрации: на ПК он работает, а на iPad - нет. .. Думаю, мне следует задать новый вопрос по этому поводу, но, может быть, кто-то здесь может прокомментировать?
Snorvarg
1
@Snorvarg Мой ответ должен работать в любом браузере, совместимом с HTML5, который должен работать, если вы используете на iPad довольно свежую версию iOS (10+). Если вам не нужно программно управлять видео, вы можете попробовать использовать простой API встраивания iframe. Вы можете найти пример здесь developers.google.com/youtube/iframe_api_reference#Examples или просмотреть ответ Винайвасяни. Если у вас все еще есть проблема, я бы задал новый вопрос, используя рекомендации «Как задать хороший вопрос», которые можно найти на stackoverflow.com/help/how-to-ask .
Норман Бро
@Snorvarg Я столкнулся с этим productforums.google.com/forum/#!topic/youtube/q7cAnPlN_-Y , аналогичная проблема возникла в Firefox, и она была решена, потому что им нужно было запрашивать разрешения на полный экран. Так что я готов поспорить, что именно поэтому на вашем iPad не работает полноэкранный режим, который, к сожалению, iOS Safari не поддерживает. Альтернативное решение - добавить собственную полноэкранную кнопку и просто изменить размер окна iframe до ширины / высоты экрана.
Норман Бро
1
Спасибо за советы и ссылки. Несколько дней назад я добавил вопрос здесь: stackoverflow.com/questions/49650040/… Но через некоторое время я решил сделать собственную полноэкранную кнопку, как вы предложили, и она отлично работает.
Snorvarg
Отличный материал, однако я столкнулся с ошибкой «TypeError: YT.Player не является конструктором», как описано здесь: stackoverflow.com/questions/52062169/… . Как указывает (единственный) ответ, это результат загрузки асинхронного скрипта и того, что API еще не готов при вызове. Этого можно избежать, реализовав onYouTubeIframeAPIReadyфункцию (и поместив в нее последний блок кода выше).
jakob.j
1

Самый простой ответ дает W3schools. https://www.w3schools.com/html/html_youtube.asp

  1. Загрузите свое видео на Youtube
  2. Обратите внимание на идентификатор видео
  3. Теперь напишите этот код в своем HTML5.
<iframe width="640" height="520"
src="https://www.youtube.com/embed/<VideoID>">
</iframe>
Санник Маджумдер
источник
-3

как насчет того, чтобы сделать это так, как это делает hooktube ? они фактически не используют URL-адрес видео для элемента html5, а URL-адрес перенаправителя видео Google, который вызывает это видео. посмотрите, как они представляют какое-то беспорядочное видео ...

<video id="player-obj" controls="" src="https://redirector.googlevideo.com/videoplayback?ratebypass=yes&amp;mt=1510077993----SKIPPED----amp;utmg=ytap1,,hd720"><source>Your browser does not support HTML5 video.</video>

код предназначен для следующей страницы видео https://hooktube.com/watch?v=72UO0v5ESUo

youtube to mp3, с другой стороны, превратился в чрезвычайно монетизированного монстра, который теперь возвращает download.html по половине запросов на загрузку видео ... раздражает ...

2 ссылки в этом ответе относятся к моему личному опыту работы с обоими ресурсами. насколько hooktube красив и свеж и действительно помогает избежать цензуры и ограничений по географическому расположению ... проверьте это, это довольно круто. а youtubeinmp4 - это всплывающий монстр, теперь известный как ConvertInMp4 ...

Сергей Киреев
источник
-6

Благодаря новому тегу iframe, встроенному в ваш веб-сайт, код автоматически определит, используете ли вы браузер, поддерживающий HTML5, или нет.

Код iframe для встраивания видео YouTube выглядит следующим образом: просто скопируйте идентификатор видео и замените его в приведенном ниже коде:

<iframe type="text/html" 
    width="640" 
    height="385" 
    src="http://www.youtube.com/embed/VIDEO_ID"
    frameborder="0">
</iframe>
винайвасяни
источник
23
«Новый» iframeтег? iframeсуществует уже много лет…
Zearin
11
Это не решение ответа, в нем четко
указан
7
Возможно, ОП просто не знал о существовании iframeтега и поэтому прямо спросил о videoтеге. В противном случае он бы не спросил, поддерживает ли HTML5 (в общем) видео Youtube, но он бы ограничил вопрос videoтегом. Он даже спросил: "Есть ли способ обхода этого?" в его последнем предложении, так что этот ответ совершенно верен.
Даниэль Муньос Парсапурмогадам
1
Чтобы встраивать видео с youtube.com в мой блог blogger.com, iframe - единственное удобное решение. Кроме того, код внедрения, который генерирует youtube.com, представляет собой тег iframe. Кроме того, w3schools.com рекомендует использовать iframe: http://www.w3schools.com/html/html_youtube.asp . Где не упоминается тег видео.
noobninja
1
На всякий случай, если кому-то интересно ... Проблема в том, что использование тега видео не является правильным подходом для видео YouTube, потому что общедоступные URL-адреса для встраивания видео YouTube не являются фактическим медиа-ресурсом. Вот почему есть люди, предлагающие использовать фреймы. Попытка использовать тег видео будет означать, что вы будете использовать частные URL-адреса, которые могут измениться в будущем. Это похоже на попытку получить доступ к закрытому члену в объектно-ориентированном языке. Вы можете просмотреть официальную документацию YouTube здесь developers.google.com/youtube/iframe_api_reference#Examples
Norman Breau