Mostrare la sorgente video di Youtube nel tag video HTML5?


116

Sto cercando di inserire una sorgente video di YouTube nel <video>tag HTML5 , ma non sembra funzionare. Dopo alcune ricerche su Google, ho scoperto che HTML5 non supporta gli URL dei video di YouTube come fonte.

Puoi usare HTML5 per incorporare video di YouTube? In caso contrario, esiste una soluzione alternativa?


1
Una soluzione IFrame come fornita di seguito da stackoverflow.com/questions/5157377/… dovrebbe essere sufficiente come soluzione alternativa.
S Meaden

Risposte:


15

Passaggio 1: aggiungi &html5=Trueal tuo URL di YouTube preferito

Passaggio 2: trova il <video/>tag nella sorgente

Passaggio 3: aggiungi controls="controls"al tag video:<video controls="controls"..../>

Esempio:

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

Nota che sembra che ci siano alcune expirecose. Non so per quanto tempo funzionerà la srcstringa.

Sto ancora mettendo alla prova me stesso.

Modifica (28 luglio 2011) : nota che questo video src è specifico per il browser che utilizzi per recuperare l'origine della pagina. Penso che Youtube generi questo HTML dinamicamente (almeno attualmente) quindi nei test se copio in Firefox funziona in Firefox, ma non in Chrome, per esempio.


77
La scadenza e il fatto che funzioni solo in un browser specifico rende questa soluzione abbastanza inutile.
pjv

1
È in grado di riprodurre TUTTI i video di YouTube?
Raj Pawan Gumdal,

2
YouTube potrebbe teoricamente modificare gli URL di archiviazione sottostanti per tutti i loro video se lo desiderano in qualsiasi momento. srcProbabilmente non è garantito che l'URL fornito nell'attributo precedente funzioni a lungo termine.
Chris Peters,

1
Sì, informazioni utili ma suona come una cattiva idea. YouTube potrebbe decidere di chiudere l'accesso al collegamento video diretto in qualsiasi momento.
Oliver Moran

36

Questa risposta non funziona più, ma sto cercando una soluzione.

A partire da . 2015/02/24. c'è un sito web (youtubeinmp4) che ti permette di scaricare i video di youtube .mp4 format, puoi sfruttarlo (con un po 'di JavaScript) per farla franca incorporando i video di youtube nei <video>tag. Ecco una demo di questo in azione.

Professionisti

  • Abbastanza facile da implementare .
  • Risposta del server abbastanza veloce in realtà (non ci vuole molto per recuperare i video).
  • Astrazione (la soluzione accettata, anche se funzionasse correttamente, sarebbe applicabile solo se sapessi in anticipo quali video stai per riprodurre, funziona per qualsiasi URL inserito dall'utente).

Contro

  • Ovviamente dipende dai youtubeinmp4.comserver e dal loro modo di fornire un link per il download (che può essere passato come <video>fonte), quindi questa risposta potrebbe non essere valida in futuro.

  • Non puoi scegliere la qualità del video.


JavaScript (dopo 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;
        }
    }
}

Utilizzo (completo)

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

Formato video standard.

Utilizzo (Mini)

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

Un po 'meno comune ma piuttosto più piccolo, utilizzando l'URL abbreviato youtu.become srcattributo direttamente nel <video>tag.

Spero che sia d'aiuto! :)


Bella funzione e funziona su Mozilla e Chrome, ma come impostare la larghezza e l'altezza del video se <video> ha una larghezza del 100% e un'altezza di 200 px.
Anmol Ratan Mohla

Ho implementato questa soluzione, ma 2 giorni dopo YT l'ha bloccata. Non funziona più. :(
apires

questo non funziona più purtroppo. Funzionava benissimo. Spero che ci sia un'altra soluzione per questo!
Chamilyan

19

Il <video>tag è pensato per essere caricato in un video di un formato supportato (che può variare in base al browser).

I link incorporati di YouTube non sono solo video, sono tipicamente pagine web che contengono la logica per rilevare ciò che il tuo utente supporta e come possono riprodurre il video di YouTube, utilizzando HTML5, flash o qualche altro plug-in in base a ciò che è disponibile sul PC dell'utente. Questo è il motivo per cui hai difficoltà a utilizzare il tag video con i video di YouTube.

YouTube offre un'API per sviluppatori per incorporare un video di YouTube nella tua pagina.

Ho creato un JSFiddle come esempio dal vivo: http://jsfiddle.net/zub16fgt/

E puoi leggere ulteriori informazioni sull'API di YouTube qui: https://developers.google.com/youtube/iframe_api_reference#Getting_Started

Il codice può essere trovato anche di seguito

Nel tuo HTML:

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

Nel tuo 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
    }
});

Recentemente ho riscontrato questo problema: lo schermo intero non è più supportato su iPad! Il tuo jsfiddle-example è perfetto per illustrare: su PC funziona, su iPad no. .. Immagino che dovrei fare una nuova domanda su questo, ma qualcuno qui forse può commentare?
Snorvarg

1
@Snorvarg La mia risposta dovrebbe funzionare su qualsiasi browser compatibile con HTML5, che a condizione che tu stia utilizzando una versione piuttosto recente di iOS (10+) sul tuo iPad dovrebbe funzionare. Se non è necessario controllare il video in modo programmatico, puoi provare a utilizzare la semplice API di incorporamento iframe. Puoi trovare un esempio qui developers.google.com/youtube/iframe_api_reference#Examples o visualizzare la risposta di vinayvasyani. Se il problema persiste, farei una nuova domanda utilizzando le linee guida "Come fare una buona domanda" che si trovano su stackoverflow.com/help/how-to-ask .
Norman Breau

@Snorvarg Mi sono imbattuto in questo productforums.google.com/forum/#!topic/youtube/q7cAnPlN_-Y , un problema simile che si verificava in Firefox ed è stato risolto perché dovevano richiedere autorizzazioni a schermo intero. Quindi sono pronto a scommettere che è per questo che lo schermo intero non funziona sul tuo iPad, che purtroppo iOS Safari non sembra supportare. Una soluzione alternativa è aggiungere il tuo pulsante a schermo intero e ridimensionare semplicemente il player iframe in base alla larghezza / altezza dello schermo.
Norman Breau

1
Grazie per i tuoi suggerimenti e link. Ho aggiunto una domanda qualche giorno fa, qui: stackoverflow.com/questions/49650040/… Ma dopo un po 'ho deciso di creare un mio pulsante a schermo intero come mi hai proposto, e funziona bene.
Snorvarg

Grandi cose, tuttavia mi sono imbattuto nell'errore "TypeError: YT.Player non è un costruttore", come descritto qui: stackoverflow.com/questions/52062169/… . Come sottolinea l '(unica) risposta, questo risulta dal caricamento asincrono dello script e l'API non è ancora pronta quando viene chiamata. Ciò può essere evitato implementando la onYouTubeIframeAPIReadyfunzione (e inserendo al suo interno l'ultimo blocco di codice del codice precedente).
jakob.j


-3

che ne dici di farlo nel modo in cui lo fa hooktube ? in realtà non utilizzano l'URL del video per l'elemento html5, ma l'URL del reindirizzamento video di Google che richiama quel video. guarda qui come presentano alcuni video casuali despacito ...

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

il codice è per la seguente pagina video https://hooktube.com/watch?v=72UO0v5ESUo

youtube in mp3 d'altra parte si è trasformato in mostro estremamente monetizzato che ora ritorna download.html su metà delle richieste di download di video ... fastidioso ...

i 2 link in questa risposta sono alle mie esperienze personali con entrambe le risorse. come hooktube è bello e fresco e in realtà aiuta a evitare la censura e le restrizioni geografiche .. dai un'occhiata, è piuttosto interessante. e youtubeinmp4 è un mostro popup ora noto come ConvertInMp4 ...


-6

Con il nuovo tag iframe incorporato nel tuo sito web, il codice rileverà automaticamente se stai utilizzando un browser che supporta HTML5 o meno.

Il codice iframe per incorporare i video di YouTube è il seguente, copia semplicemente l'ID video e sostituiscilo nel codice seguente:

<iframe type="text/html" 
    width="640" 
    height="385" 
    src="http://www.youtube.com/embed/VIDEO_ID"
    frameborder="0">
</iframe>

23
iframeTag "Nuovo" ? iframe
esiste

11
Questa non è una soluzione alla risposta, indica chiaramente il tag video e non l'iframe ...
TGarrett

7
Forse l'OP semplicemente non sapeva dell'esistenza del iframetag ed è per questo che ha chiesto direttamente del videotag. Altrimenti non avrebbe chiesto se HTML5 (genericamente) supporta i video di Youtube, ma avrebbe limitato la domanda al videotag. Ha anche chiesto "c'è qualche soluzione alternativa per questo?" nella sua ultima frase, quindi questa risposta è perfettamente valida.
Daniel Muñoz Parsapoormoghadam

1
Per incorporare i video di youtube.com nel mio blog blogger.com, iframe è l'unica soluzione conveniente. Inoltre, il codice di incorporamento generato da youtube.com è un tag iframe. Inoltre, w3schools.com consiglia iframes: http://www.w3schools.com/html/html_youtube.asp . Dove il tag video non è menzionato.
noobninja

1
Nel caso in cui qualcuno fosse curioso ... Il problema è l'utilizzo di un tag video non è l'approccio corretto per i video di YouTube perché gli URL pubblici per incorporare i video di YouTube non sono una vera risorsa multimediale. Ecco perché ci sono persone che suggeriscono di utilizzare iframe. Se provi a utilizzare un tag video, utilizzerai URL privati ​​che potrebbero cambiare in futuro. È come tentare di accedere a un membro privato in un linguaggio orientato agli oggetti. Puoi visualizzare la documentazione ufficiale di YouTube qui developers.google.com/youtube/iframe_api_reference#Examples
Norman Breau
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.