古江和栄

第5回 個人の動画配信補足のためのWeb構築
06A1058 古江 和栄
スライド一覧
1.前回のおさらい
2.SHOUTcastについて
3.プログラムの改良
4.本プログラムの解説
5.次回の予定
6.参考文献
1.前回のおさらい
ユーザー定義関数について
ユーザー定義関数は「function 関数名 {関数}」
によって定義することが出来る。
関数を呼び出すときは「関数名()」
によって呼び出すことが出来る。
また、パラメータを関数に渡して処理するときは括弧内にパラメ
ータを入力し、呼び出しを行う。
関数で処理させた値を受け取りたいときはreturnで返す値を指定
する。
返す値を指定せずに()で呼び出した場合、functionで定義した時
の規定の値を参照する。
表示
ソースコード
2、SHOUTcastについて
SHOUTcastとは?
SHOUTcastとはwinampのプラグインであり、これを使うことでラジオ配信
を行うことが出来る。(フリーウェア)
今回はこのSHOUTcastで行っているラジオに接続をかけ、メタデータを受
信してそのラジオの現在の接続数、最大定員数、配信速度等を解析した。
メタデータとは?
メタデータとはデータのデータのことや、送信されたデータに関する情報が
記載されているデータのことである。
ヘッダと意味が似ているが、ヘッダはデータの先頭にデータに関する情報
が記載されているため、少し違う。
メタデータはデータとは別に分かれている。
今回の場合、メタデータは音楽データの合間合間に入り込むように送信さ
れている。
$sc_host = "localhost";
$sc_port = "9999";
$server = fsockopen($sc_host,
$sc_port, $errorno, $errormsg, 1);
if (is_resource($server)){
$out = "GET /7.html HTTP/1.0\r\n";
$out .= "Host: \r\n";
$out .= "User-Agent: Mozilla\r\n";
$out .= "Connection: close\r\n\r\n";
fwrite($server, $out);
}
//メタデータを最終端まで取得
while( ! feof($server)){
$saba .= fgets ($server , 4096);
}
fsockopen
インターネット接続
$sc_hostで指定したリソースへのソケ
ット接続を開始する
TCP、UDP、SSL、および TLSはサ
ポートされている
$sc_host = ホストのドメイン
もしくはグローバルIPアドレス
$sc_port = ホストのポート番号
$errorno、$errormsg
エラーメッセージなどが出たとき保管
する変数
1 = 接続タイムアウト時間(秒)
fwrite = $serverに$outを書き込み
feof($server) = $serverがファイル終端に達しているかどうかを調べる
fgets($server , 4096) = $server(ファイルポインタ)からファイルを全て取り出す
4096は取り出すファイルの長さ(この場合4095バイト取
り出す)
ファイル長の記述がない場合は1024バイト取り出す。
3.プログラムの改良
メタデータを解析するだけなら前頁のプログラムでも出来るが、問題が多々ある。
1.実際に接続出来たときしか使えない。
2.無駄なデータが多い。
3.ひとつのアドレスしか指定できないため、汎用性がない。
など。
よって改良する。
第1段階
実際に接続できなかったときのことを考えてまずはエラー表記が出ないようにする。
fsockopenの前に@をつけるとエラー標記が出なくなる。これはファイルポインタ系統
の命令なら全て効果があるのでそれらにつける。
(fsockopenで接続失敗したときにエラーメッセージが出ない)
無駄な情報の部分を削除するために、substr関数を使って無駄な部分を削除。
さらにexplode関数を使ってカンマごとに情報を配列に格納する。
これにより必要な情報をきれいに引き出せるようになる。
表示
ソースコード
第2段階
While文による無限ループを防ぐためにif文を追加。
$errormsgに値が何も入っていない時(接続失敗していないとき)にのみwhile
文を動かす。
$errormsgに値が追加されたとき(接続失敗したとき)に配列に「なし」を格納。
これにより、どの場合でも配列を参照し、値を見ることが出来るようになった。
表示
ソースコード
第3段階
このメタデータ解析をfunctionを使って呼び出し関数に設定。
同時にラジオ配信をしているかどうかの判定文を追加。
また、呼び出し関数化に伴い$array、$hantei、$linkをグローバル関数化
(function外からも変数を呼び出せるようにした。)
4.本プログラムの解説
global $link;
$link = "http://$host:$port/listen.pls";
global $linkでリンクをグローバル化
$linkに呼び出し時に使う$hostと$portを代入し、アドレスを作る。
metadata(ドメイン,ポート番号)で関数呼び出し
グローバル化した配列を用いてテーブルを作成
その他の部分は前頁で解説した通りの変更を行った。
表示
ソースコード
5.次回の予定
SHOUTcastによるラジオのメタデータ解析でしたが、これはフリーウェアなんで
解析が比較的簡単という所がある。
WMEはMS独自のプログラムなのでそもそもメタデータの解析の方法がわからないので、そ
の辺を調べていく。
ただ、現状調べた限りではWMEのメタデータ解析について触れているサイトがまったくない
状態なので、解析は不可能かもしれない。
もしかしたらここで終わりの可能性もなきにしもあらずといった状態です…。
6.参考文献
ソフトバンククリエイティブ
PHPによるWebアプリケーションスーパーサンプル第2版
著 西沢直木
arz Nitelyってシステム屋どうよ?SHOUTcastについて調べてみる
http://arznitely.com/document/?id=ja:free_lsl:shoutcast
その他PHP関連サイト様
ご清聴ありがとうございました