
こんにちは、%ユーザー名%!
友人の会社とインターネットラジオを作ることに決めたが、判明したように、VPSの割り当てられたスペースは音楽の大きなアーカイブには十分ではなく、さらにギガバイトの追加購入は本当の強盗です。
優れた
ableevの記事
「ファイルシステムとしての Yandex.Disk 」に突然出会ったとき、私は長い間解決策を探していました。 Yandexディスクに音楽を保存してみませんか? ここではライセンスと著作権の問題を省略します-これはまったく異なる話ですが、技術的な部分に興味があります。 判明したように、IceCastは常にYandexディスクから音楽を読み込むことができないため、放送が途切れたり中断したりします。 この問題は私を捕らえ、解決策を見つけました-現在ラジオで何が再生されているかを判別し、次のトラックをプリロードし、失われたトラックをサーバーから削除します。 これはトラフィックを生成しますが、私は同意しますが、現時点では、トラフィックが無制限のVPSは満杯で、ディスクスペースは無制限です。
私は少なくとも言語からC#を話すので、モノラルに頼り、Python、PHP、bashでいくつかの補助スクリプトを書く必要がありました。
スタジオのヘルパースクリプト!
id3.pyは、引数を指定して呼び出されると、タグを
取得してテキストファイルに書き込むトラックを受け取ります。
getCurrent.phpは、現在のトラックに関する情報でIceCastページを
解析し、再生中のトラックの名前を提供します。
getCurrent.php <?php error_reporting(0); header("Content-Type: text/html; charset=UTF-8"); $file_name="http://localhost:8000/status.xsl?mount=/stream"; $r=fopen($file_name,'r'); $text=fread($r,10000); fclose($r); $mas=explode('<tr>', $text); $name = explode(':', $mas[3]); $q = explode ('</td>',$name[1]); $q2 = explode ('<td class="streamdata">',$q[1]); $rj = $q2[1]; if($rj == "0" or $rj == ""){ echo " Nonstop"; }else { $fl = file_get_contents('http://localhost:8000/status.xsl?mount=/stream'); function antara($string, $start, $end){ $string = " ".$string; $ini = strpos($string,$start); if ($ini == 0) return ""; $ini += strlen($start); $len = strpos($string,$end,$ini) - $ini; return substr($string,$ini,$len); } $stream = antara($fl,"<td>Stream Title:</td>\n<td class=\"streamdata\">","</td>"); $description = antara($fl, "<td>Stream Description:</td>\n<td class=\"streamdata\">", "</td>"); $listeners = antara($fl, "<td>Current Listeners:</td>\n<td class=\"streamdata\">", "</td>"); $max = antara($fl, "<td>Peak Listeners:</td>\n<td class=\"streamdata\">", "</td>"); $song = antara($fl, "<td>Current Song:</td>\n<td class=\"streamdata\">", "</td>"); echo $song; ?>
小さなbashスクリプト
isOnline.shは、ラジオスクリプトが実行されているかどうかを確認し、ステータス情報をテキストファイルに書き込みます。
liquidsoap
radio.shラジオのスクリプトはラジオそのものです。
プレイリスト
ジェネレータgenerator.shは、マウントされたドライブにファイルのリストを作成し、リストをシャッフルし、テキストファイルに書き込みます。 このスクリプトは、多くのディスクを追加し、1つのプレイリストですべてを収集できるという点で注目に値します。
今では、ラジオスクリプトが落ちたかどうかを監視し、クラッシュの場合に実行し、プレイリストを監視し、トラックをロードおよび削除する制御スクリプトを作成します。
radio_control.cs using System; using System.Collections.Generic; using System.IO; using System.Collections; using System.Diagnostics; namespace radio_control { class song { string filename; string tagname; string prepared; System.Diagnostics.Process getTag; public song() { getTag = new System.Diagnostics.Process(); getTag.EnableRaisingEvents = false; getTag.StartInfo.FileName = "./id3.py"; } public string FileName { get { return filename; } set { filename = value; } } public string Tag { get { return tagname; } set { tagname = value; } } public string Prepared { get { return prepared; } set { prepared = value; } }
私は牛のコードをおizeびします。これらはすべて同じスクリプト内で記述できますが、問題をより迅速に解決し、異なるサブタスク用に所有していたツールを使用したいと考えました。
通常の操作では、次のものが必要です。
- モノ
- 液体石鹸
- スクリーン
- アイスキャスト
- davfs2
- php
- Python用eyeD3
システムはradio_control.csを介して起動します。 それだけです その後、彼はラジオを自分で起動し、プレイリストを生成し、音楽をダウンロードすると同時に、彼がしていることを端末に書き込みます。
残念ながら、私たちはラジオを閉じましたが、私の仕事が無駄にならないようにしたかったのです。