Решился в локалке поднять сервер(Целерон-633,192Мб мозгов). Все работы производились на Suse 10.
Для начала попробовал вещать радио в сеть используя ПО от SHOUTCAST (
сервер, который принимает поток и поднимает порт и
клиент, который формирует поток). Все ничего, работало, но что непонравилось, так это постоянная загрузка проца(45 процентов) внезависимости от наявности клиентов.
Следует упомянуть, что на сервере поднята самба+ связка Апач+ПХП+SQL(для локального форума), и при одновременно пользовании этими сервисами возникали проблемы ввиде лагов и дисконектов пользователей.
Искал как это обойти и нашел неплохой вариант.
Суть проста - вместо вещания через порт и декодировкой звуковой дорожки, используеться генерация динамического плейлиста питоновским скриптом. Конечно, это не совсем уж формат аудио, но людям нравиться, вот и захотелось поделиться со всеми.
Источник скрипта
тут , но скрипт, который даёт автор у меня работать не хотел, пока я его малость не подправил.
Подправленый скрипт приведен ниже(сорри, я не разобрался еще как приатачивать файлы на форуме)
Цитата:
#!/usr/bin/python
import os, re, time, random
Home = "/srv/www/htdocs/audio"
Url_Base = "http://192.168.100.100/audio"
Song_Max = 200
List_Type = "mpegurl"
File_Match = re.compile('[{mp3}{rm}{wav}{ogg}{mpeg}]$')
Home_Re = re.compile('^' + Home)
List_Types = {'smil':'application/smil', 'mpegurl':'audio/x-mpegurl'}
def Dir_Contents(Item=""):
Final_List = []
if Item == '': return ('')
elif os.path.isdir(Item):
List = os.listdir(Item)
for Item2 in List:
Item3 = Item + "/" + Item2
Temp_List = Dir_Contents(Item=Item3)
for Item4 in Temp_List: Final_List.append(Item4)
elif os.path.isfile(Item):
if File_Match.search(Item): return([Item])
else: return([])
return (Final_List)
List = Dir_Contents(Home)
List_Copy = List
Secs = int(time.strftime('%S')) * int(time.strftime('%H')) * int(time.strftime('%M'))
for i in range(0,Secs): random.random()
New_List = []
while (len(List_Copy) > 0):
Position = random.randint(0,len(List_Copy) - 1)
New_List.append(List_Copy[Position])
del List_Copy[Position]
Urls = []
for Item in New_List:
Url = Url_Base + Home_Re.sub('', Item)
Urls.append(Url)
if len(New_List) > Song_Max: New_List = New_List[0:Song_Max]
if not List_Types.has_key(List_Type): List_Type = 'mpegurl'
Content_Type = List_Types[List_Type]
print "Content-Type: " + Content_Type + "\n\n"
if List_Type == 'mpegurl':
for Url in Urls: print Url
elif List_Type == 'smil':
print "\n<smil>\n <body>\n"
for Item in Urls: print " <audio src='" + Url+ "'/>"
print " </body>\n</smil>\n"
else:
for Url in Urls: print Url