Come get il rapporto di formato video di YouTube

Vorrei get il rapporto di aspetto di un video di YouTube, per ridimensionare il giocatore di conseguenza. Sto programmando il lettore YT utilizzando JavaScript.

L'unico posto in cui le size video esatte sono esposte in una chiamata API di dati è quando si effettua una chiamata video.list (part = fileDetails, ID = VIDEO_ID) utilizzando l'API v3, mentre autenticata come proprietario del video. Viene restituito nel file video.fileDetails.videoStreams []. Proprietà aspectRatio . Questo non è particolarmente utile, in quanto è necessario autenticarsi come proprietario del video per get tali informazioni.

Se hai solo una pagina web e vuoi fare una chiamata JSONP per avere un suggerimento su se un determinato video è 16: 9 o 4: 3, puoi farlo tramite qualcosa di simile

http://gdata.youtube.com/feeds/api/videos/ VIDEO_ID ? v = 2 & alt = jsonc & callback = myCallback

Per esempio

http://gdata.youtube.com/feeds/api/videos/F1IVb2_FYxQ?v=2&alt=jsonc&callback=myCallback

ha "aspectRatio":"widescreen" impostato nella sua risposta, che è un suggerimento che il video è 16: 9 (o vicino a 16: 9).

http://gdata.youtube.com/feeds/api/videos/u1zgFlCw8Aw?v=2&alt=jsonc&callback=myCallback

non ha affatto il aspectRatio , il che significa che i video sono 4: 3 (o vicino a 4: 3). Non è sempre l'aspetto esatto, ma è abbastanza vicino perché la maggior parte dei video sia utile.

Vorrei suggerire di colpire l'url oembed:

https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v= {videoID} & format = json

Questo ti dà le size video esatte per i video pubblici. Non sono sicuro per i video privati ​​però. Restituirà anche le size delle miniature, che sembrano essere diverse in alcuni casi, per cui non dimenticate di mescolarle.

Ecco come lo faccio. Ottengo il rapporto dell'aspetto dall'image di youtube.

 <img id"nnS7G3Y-IDc-img" src="http://i.ytimg.com/vi/nnS7G3Y-IDc/default.jpg" /> <script> //using jquery var height = $('#nnS7G3Y-IDc-img').css('height'); var width = $('#nnS7G3Y-IDc-img').css('width'); height = height.replace('px', ''); width = width.replace('px', ''); var arB = height / 3; var arT = width / arB; if (arT == 4) { //do what you need to with the aspect ratio info from here //just demonstrating with an alert alert ("4:3"); } else {alert ("16:9");} </script> 

Tiri tutte le informazioni video da youtube api e poi memorizzi tutte le informazioni video in un database in precedenza, quindi se lo farai in volo, potrebbe essere necessario hide l'image nella pagina e quindi get il rapporto di aspetto in questo modo .

modifica ** Un'altra opzione, e probabilmente la migliore, sarebbe quella di utilizzare l'api di youtube . Cercare un video e controllare se l'elemento di dati-> elementi-> aspectRatio è impostato. Non credo che sia impostato su video 4: 3, ma su 16: 9 è impostato su schermo a grande schermo. Dovrebbe essere semplice come if (data->items->aspectRatio) {ratio= "16:9"} else {ratio="4:3"}

Il rapporto di aspetto apparentemente dipende dal livello di qualità. Prese dai documenti di YouTube :

 Quality level small: Player height is 240px, and player dimensions are at least 320px by 240px for 4:3 aspect ratio. Quality level medium: Player height is 360px, and player dimensions are 640px by 360px (for 16:9 aspect ratio) or 480px by 360px (for 4:3 aspect ratio). Quality level large: Player height is 480px, and player dimensions are 853px by 480px (for 16:9 aspect ratio) or 640px by 480px (for 4:3 aspect ratio). Quality level hd720: Player height is 720px, and player dimensions are 1280px by 720px (for 16:9 aspect ratio) or 960px by 720px (for 4:3 aspect ratio). Quality level hd1080: Player height is 1080px, and player dimensions are 1920px by 1080px (for 16:9 aspect ratio) or 1440px by 1080px (for 4:3 aspect ratio). Quality level highres: Player height is greater than 1080px, which means that the player's aspect ratio is greater than 1920px by 1080px. 

Forse non una buona risposta, ma sembra che ci sia un'assunzione tra altre risposte che i video di YouTube sono 16: 9 o 4: 3.

Ma possono avere un rapporto di aspetto abbastanza arbitrario e con i video dei telefoni del ritratto diventato abbastanza comune, sta diventando less una rarità per un video su YouTube per essere qualcosa di diverso.

Per questi rapporti di tipo non standard, come un rapido scorrimento manuale, ho ricorso a giocare a schermo integer, facendo una cattura dello schermo e ritagliando l'image.

Ho messo un paio di esempi di video di aspetto arbitrario all'indirizzo http://youtube-aspect-ratios.xtra.ink .