Vorige week schreef Torley over de mogelijkheid om YouTube filmpjes in Second Life te kunnen bekijken. In Second Life kun je (nog) geen Flash video weergeven, maar alleen video die afspeelt in de Quicktime player. YouTube filmpjes zijn standaard alleen in Flash video formaat beschikbaar, maar sinds een tijdje ook in MP4 formaat. Dat MP4 bestand heeft dan een hogere kwaliteit dan de Flash video heeft.
Die hogere kwaliteit maakt het direct vanaf YouTube in MP4 formaat downloaden/gebruiken van de filmpjes aantrekkelijk ten opzichte van de diensten die een conversie uitvoeren van de Flash video bestanden die YouTube aanbiedt.
Torley liet zien hoe je de URL voor die MP4 kon achterhalen en dat die dan kon afspelen in Second Life.
Helaas bleek het niet zo eenvoudig te zijn als Torley in eerste instantie deed geloven (en zelf dacht).
Zoals ik hier al beschreef: YouTube genereert namelijk steeds een token dat je nodig hebt om de MP4-versie op te halen. Dat token heeft maar een geldigheid van zo’n minuut of vijf.
Voor de link in de pagina die je kunt gebruiken om de MP4-versie handmatig te downloaden geen probleem, maar voor een link vanuit Second Life werkt dat niet.
Een tweede wens die ik had was het eenvoudig offline kunnen bekijken van de instructiefilmpjes die Toley met grote regelmaat maakt. De video pagina bij Second Life heeft geen RSS-feed met enclosures, maar ze staan ook allemaal op YouTube. Het zou toch mogelijk moeten zijn om de MP4-versies op de een of andere manier in iTunes te krijgen? Nou dat klopt. Dat is mogelijk. Maar het probleem is dat het hoogstwaarschijnlijk in strijd is met de gebruiksvoorwaarden van YouTube. Maar omdat ik het nu eenmaal uitgezocht heb en ergens wil documenteren, beschrijf ik het proces hieronder toch even.
Let op! Onderstaande informatie en code is slechts ter lering en vermaak! Niet voor daadwerkelijk gebruik!
Alle benodigde scripts zitten in dit zipbestand:
* Code downloaden
De scripts werken alleen op een Apache webserver met PHP (en CURL) geïnstalleerd. En aangezien het alleen ter zelfstudie is kan ik geen ondersteuning bieden bij het aan de praat krijgen ervan.
RSS-feed opbouwen
YouTube bevat RSS-voorzieningen al wordt er niet hard reclame voor gemaakt. Op deze pagina kun je een overzicht vinden van de soort feeds die ze hebben.
Ik kan dus een RSS-feed opvragen met alle video’s die Torley geplaatst heeft via:
feed://www.youtube.com/rss/user/Torley/videos.rss
Probleem is echter dat die RSS-feed geen verwijzing bevat naar de MP4-versie van de video’s, alleen naar de Flash versies. En het onbreekt aan een aantal gegevens die iTunes nodig heeft.
Het script “rss.php” lost dat deels op. Het haalt de RSS-feed op bij YouTube en past de benodigde informatie aan.
Een van de dingen die aangepast worden is de link naar de enclosure.
Van bijvoorbeeld: http://youtube.com/?v=UgJPUQQbQSg
wordt dat aangepast in: http://myserver.com/youtube/getmp4/UgJPUQQbQSg.mp4
Die URL bleek een uitdaging. Die uitdaging zorgt er meteen ook voor dat het script niet werkt op IIS, maar alleen op Apache.
iTunes blijkt namelijk heel kieskeurig te zijn als het gaat om de opbouw van de URL voor een enclosure (de verwijzing naar het te downloaden bestand). Er mag namelijk geen vraagteken in voor komen en het moet eindigen op een ondersteunde extensie.
Oorspronkelijk zag de URL er zo uit:
http://myserver.com/youtube/getmp4.php?v=UgJPUQQbQSg
Die URL leverde exact hetzelfde bestand op, maar iTunes liet die onderdelen van de RSS-feed dan niet zien.
MP4-bestand ophalen
Het bestand “getmp4” uit het zipbestand is ‘gewoon’ een PHP, maar dan zonder de extensie .PHP
In het .htaccess bestand staat:
<FilesMatch “^getmp4$”>
ForceType application/x-httpd-php
</FilesMatch>
Hiermee wordt tegen de webserver verteld dat dit bestand als een PHP bestand behandeld moet worden.
Het stukje /UgJPUQQbQSg.mp4 wordt door het script als parameters gelezen. Het stukje .mp4 wordt er vanaf gehaal en dan blijft over “UgJPUQQbQSg”, de unieke identifier van de YouTube film.
Het script haalt dan eerst de pagina http://youtube.com/?v=UgJPUQQbQSg op, kijkt in de pagina naar het op dat moment geldige token voor de MP4-versie en schakelt dan door naar die MP4-versie.
Dit zorgt er voor dat als je in iTunes op “ophalen” klikt, je netjes het MP4-bestand binnen krijgt zoals je in de screenshot hierboven kunt zien. Als het bestand eenmaal binnen gehaald is heb je geen last meer van het beperkt geldig zijn van die token.
Caching
Zelfs in een onderzoekssetting is het netjes om niet meer dataverkeer te veroorzaken dan nodig. Daarom maken zowel “rss.php” als “getmp4” gebruik van caching. Niet van de MP4 zelf, maar van de token en van de RSS-feed.
Conclusie
Het was heel leerzaam om de scripts te maken, ook al zijn de gebruiksmogelijkheden vanwege de de gebruiksvoorwaarden van YouTube beperkt.
Met name de eigenaardigheden van iTunes als het gaat om enclosures waren onverwacht.
Ik had de RSS-feed van mijn eigen YouTube video’s doorgelinkt naar Feedburner zodat ik gebruik er van kon bijhouden. Die doorlink heb ik maar weer weggehaald.
heb geen flauw idee het op een psp moet
Ik ook niet (heb geen PSP). Ik neem aan dat je geprobeerd hebt om de MP4 die je kunt downloaden rechtstreeks op de PSP af te spelen? En dat dat dan niet werkt?
Zou het helpen om die MP4 dan door een van de vele beschikbare conversietools te gooien? Bijvoorbeeld door PSP Video Express?