Մեզանից շատերը սիրում են առավոտյան ռադիո լսել: Եվ հետո մի գեղեցիկ առավոտ ես հասկացա, որ չեմ ուզում լսել տեղական FM ռադիոկայանները: Չի հետաքրքրում. Բայց սովորությունը վնասակար է ստացվել։ Եվ ես որոշեցի փոխարինել FM ընդունիչը ինտերնետ ընդունիչով: Ես արագ գնեցի մասեր Aliexpress-ից և հավաքեցի ինտերնետ ընդունիչ:
Ինտերնետ ընդունիչի մասին. Ստացողի սիրտը ESP32 միկրոկառավարիչն է: Որոնվածը KA-radio-ից: Պահեստամասերն ինձ արժեցան 12 դոլար։ Հավաքման հեշտությունը թույլ տվեց մի քանի օրում հավաքել այն։ Աշխատում է լավ և կայուն: 10 ամսվա աշխատանքի ընթացքում ընդամենը մի երկու անգամ սառեց, հետո միայն իմ փորձերի պատճառով։ Հարմար և լավ մտածված ինտերֆեյսը թույլ է տալիս կառավարել սմարթֆոնից և համակարգչից: Մի խոսքով, սա հրաշալի ինտերնետ ընդունիչ է։
Ամեն ինչ կարգին է: Բայց մի վաղ առավոտ ես եկա այն եզրակացության, որ չնայած տասնյակ հազարավոր ռադիոկայանների մուտքին, հետաքրքիր կայաններ չկային: Ինձ զայրացրել են գովազդը և հաղորդավարների հիմար կատակները. Անընդհատ նետվելով մի կայարանից մյուսը: Ինձ դուր է գալիս Spotify-ը և Yandex.Music-ը: Բայց ցավալին այն է, որ նրանք չեն աշխատում իմ երկրում։ Եվ ես կցանկանայի նրանց լսել ինտերնետ ընդունիչի միջոցով:
Ես հիշեցի իմ մանկությունը. Ես ունեի ձայնագրիչ և երկու տասնյակ ձայներիզներ։ Ընկերների հետ ձայներիզներ փոխանակեցի։ Եվ դա հրաշալի էր։ Ես որոշեցի, որ պետք է իմ աուդիո արխիվները փոխանցեմ միայն ինտերնետ ընդունիչին: Իհարկե, կա աուդիո նվագարկիչ կամ iPod բարձրախոսներին միացնելու և չանհանգստանալու տարբերակ: Բայց սա մեր ճանապարհը չէ։ Ես ատում եմ միացնող միակցիչները)
Սկսեցի պատրաստի լուծումներ փնտրել։ Շուկայում առաջարկ կա Radio-Tochka.com-ից ստեղծել ձեր սեփական ինտերնետային ռադիոն: Ես փորձարկեցի այն 5 օր: Ամեն ինչ լավ էր աշխատում իմ ինտերնետ ընդունիչի հետ: Բայց գինը ինձ համար գրավիչ չէր։ Ես մերժեցի այս տարբերակը։
Ես վճարել եմ հոսթինգ 10 ԳԲ: Ես որոշեցի սցենար գրել մի բանի վրա, որը կհեռարձակի իմ mp3 ֆայլերի աուդիո հոսքը: Որոշեցի գրել PHP-ով։ Ես արագ գրեցի այն և գործարկեցի այն: Ամեն ինչ աշխատեց։ Դա թույն էր! Բայց մի երկու օր անց ես նամակ ստացա հոսթինգի ադմինիստրացիայից։ Այնտեղ ասվում էր, որ գերազանցվել է պրոցեսորային րոպեների սահմանաչափը և ավելի բարձր սակագնի բարձրացման անհրաժեշտություն։ Սցենարը պետք է ջնջվեր, և այս տարբերակը լքվեր:
Ինչպե՞ս դա տեղի ունեցավ: Ես չեմ կարող ապրել առանց ռադիոյի: Եթե նրանք թույլ չեն տալիս ձեզ գործարկել սցենարը ուրիշի հոստինգում, ապա ձեզ հարկավոր է ձեր սեփական սերվերը. Որտեղ ես անելու եմ այն, ինչ հոգիս է կամենում:
Ես ունեմ հինավուրց նեթբուք առանց մարտկոցի (CPU - 900 MHz, RAM - 512 Mb): Ծերունին արդեն 11 տարեկան է։ Հարմար է սերվերի համար: Ես տեղադրում եմ Ubuntu 12.04: Հետո տեղադրում եմ Apache2 ու php 5.3, samba: Իմ սերվերը պատրաստ է:
Ես որոշեցի փորձել Icecast-ը: Ես շատ մանա կարդացի դրա վրա: Բայց ինձ համար դժվար էր: Եվ ես որոշեցի վերադառնալ PHP սցենարով տարբերակին։ Մի քանի օր ծախսվեց այս սցենարի վրիպազերծման վրա: Եվ ամեն ինչ հիանալի աշխատեց: Հետո ես գրեցի նաև փոդքասթներ նվագելու սցենար: Եվ դա ինձ այնքան դուր եկավ, որ որոշեցի մի փոքրիկ նախագիծ անել։ Այն անվանել է IWScast:
Ամեն ինչ շատ պարզ է. Ես պատճենում եմ mp3 ֆայլերը և index.php ֆայլը Apache-ի արմատային թղթապանակում /var/www/ և դրանք նվագարկվում են պատահականորեն: Մոտ 300 երգը բավական է մոտավորապես ամբողջ օրվա համար։
index.php ֆայլն ինքնին սցենարն է: Սցենարը կարդում է MP3 ֆայլերի բոլոր անունները գրացուցակի մեջ զանգվածի մեջ: Ստեղծում է աուդիո հոսք և փոխարինում MP3 ֆայլերի անունները: Լինում են դեպքեր, երբ երգ ես լսում ու քեզ դուր է գալիս։ Ձեր կարծիքով ո՞վ է երգում: Նման դեպքի համար log.txt log.txt-ում կա լսված հետքերի անունների ձայնագրություն։
Ամբողջական սցենարի կոդը
<?php
set_time_limit(0);
header('Content-type: audio/mpeg');
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("icy-br: 128 ");
header("icy-name: your name");
header("icy-description: your description");
$files = glob("*.mp3");
shuffle($files); //Random on
for ($x=0; $x < count($files);) {
$filePath = $files[$x++];
$bitrate = 128;
$strContext=stream_context_create(
array(
'http'=>array(
'method' =>'GET',
'header' => 'Icy-MetaData: 1',
'header' =>"Accept-language: enrn"
)
)
);
//Save to log
$fl = $filePath;
$log = date('Y-m-d H:i:s') . ' Song - ' . $fl;
file_put_contents('log.txt', $log . PHP_EOL, FILE_APPEND);
$fpOrigin=fopen($filePath, 'rb', false, $strContext);
while(!feof($fpOrigin)){
$buffer=fread($fpOrigin, 4096);
echo $buffer;
flush();
}
fclose($fpOrigin);
}
?>
Եթե Ձեզ անհրաժեշտ է, որ հետքերը նվագարկվեն հերթականությամբ, ապա դուք պետք է մեկնաբանեք տողը index.php-ում
shuffle($files); //Random on
Փոդքաստների համար ես օգտագործում եմ /var/www/podcast/ Կա ևս մեկ սցենար index.php: Այն ունի փոդքասթի հետքերի անգիր: Հաջորդ անգամ, երբ միացնեք ինտերնետ ընդունիչը, կցուցադրվի հաջորդ փոդքասթի կատարումը: Կա նաև նվագարկված հետքերի մատյան:
Counter.dat ֆայլում կարող եք նշել ուղու համարը, և փոդքասթի նվագարկումը կսկսվի դրանից:
Գրել է վերլուծիչներ՝ փոդքասթերի ավտոմատ ներբեռնման համար: Այն վերցնում է վերջին 4 հետքերը RSS-ից և ներբեռնում դրանք: Այս ամենը հիանալի է աշխատում սմարթֆոնի, IPTV սարքի կամ բրաուզերի վրա:
Մյուս առավոտ մտքովս անցավ, որ լավ կլիներ հիշել երգի նվագարկման դիրքը: Բայց ես դեռ չգիտեմ, թե ինչպես դա անել PHP-ում:
Սցենարը կարելի է ներբեռնել
Source: www.habr.com