PHP対応してるHTTPサーバーをお持ちの方に限られますが、このスクリプトを自分のサーバーに設置してyoutubemp4.comの代わりにTVの変換サーバーに設定してください。そうすればYouTube自体が重いとき以外はいつも視聴可能になると思います^^
<?php
// YouTube MP4 address converter
$v=$_GET['v'];
if (!$v) { // ビデオIDチェック
echo "Video id not found.\n\n";
echo "Usage, \n";
echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?v=VideoID\n";
exit;
}
function get_location($url)
{ // MP4アドレスを取得
$addr=parse_url($url);
$port=isset($addr['port'])? $addr['port']:80;
$fp=fsockopen($addr['host'],$port,$errno,$errstr,30);
if (!$fp) echo "$errstr ($errno)\n";
else {
$data="HEAD ".@$addr['path']."?".@$addr['query']." HTTP/1.1\r\n";
$data.="Host: ".$addr['host']."\r\n";
$data.="Connection: Close\r\n\r\n";
fwrite($fp,$data);
while (!feof($fp)) $header.=fgets($fp,128);
fclose($fp);
preg_match("/\s+Location: +(.*)\s/",$header,$m);
return $m[1];
}
}
// YouTube動画ページ取得
$youtube="http://www.youtube.com/watch?v=".$v;
$str=implode("",file($youtube));
if (!$str) {
echo "Can't open ".$youtube.".\n";
exit;
}
// tの値取得
if (preg_match("/['\"]SWF_ARGS['\"]\s*:\s*\{(([^\}]|\s)*)\}/",$str,$m)) {
$str=$m[1];
if (preg_match("/\"t\"\s*\:\s*\"([^\"]*)\"/",$str,$m)) $t=$m[1];
}
// リダイレクト先取得用アドレス
if (isset($t)) $str="http://www.youtube.com/get_video?fmt=18&video_id=".$v."&t=".$t;
else $str="";
if ($str) {
$str=get_location($str); // リダイレクト先チェック
if ($str) {
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Location:".$str,true,302); // MP4アドレスにリダイレクト
}
else echo "Can't get moved location.\n";
}
else echo "Can't get data from ".$youtube.".\n";
?>
スクリプト名をwatch.phpにしたら http://○○○.××/△△△/watch.php?v=Wv20U7rJuwU って感じで呼び出すようにしてくださいね。(Wv20U7rJuwUの部分がビデオIDになります)
2月28日追記: このPHPを呼び出すテレビやプレーヤーなどを自作される場合、LSLはYouTube-mp4アドレス変換スクリプトとかが参考になると思います。
3月22日追記: コメントにありますように、YouTubeの仕様が変わったようなので現在このスクリプトは使えません;;
感謝です~。借りていたホスティングで動きました^^
返信削除あっ、どうも。。。^^
返信削除早速動作報告もらえて嬉しいです。ご利用ありがとうございます♪
またまた仕様変更したみたいですね、YouTube。。。
返信削除いたちごっごですよね。
うわっ、やっぱり仕様変更ですかね?
返信削除最近また見れなくなってたので、おかしいなって思ってたんですよ。。。ホント半年くらいで仕様が変わっちゃうんですね;;