SA-MP Forums Archive
[Plugin] Server's Radio Plugin - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+----- Forum: Релизы/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=66)
+----- Thread: [Plugin] Server's Radio Plugin (/showthread.php?tid=302715)

Pages: 1 2


Server Broadcaster - Полноценная радиостанция с помощью плагина - jhonyxakep - 10.12.2011

Server Broadcaster
Версия 1.6.0
Автор: jhonyxakep (Андрей Недобыльский)
Mail:jhonyxakep@qip.ru
ICQ:354794596
Jabber:jhonyxakep@qip.ru

Описание:

Плагин позволяет превратить сервер SA:MP в полноценную интернет радиостанцию
Работает на подобии Icecast/Shoutcast серверов.

Плагин использует библиотеку BASS (un4seen.com) для воспроизведения и вещания звука.

Установка:

Положите файлы из папки plugins в папку plugins на сервере.

Windows:
В связи с особенностями сервера, файлы из папки system\win\ надо поместить в корневой каталог сервера (те там, где samp-server.exe) или в системный каталог system32.

*nix:
Файлы из папки system\nix\ надо положить в одну из папок /lib на сервере (/lib, /usr/lib, /usr/local/lib), однако рекомендую во все.


Пропишите плагин в секции plugins в конфиге SA:MP.

Для работы с функциями плагина подключите файл radio.inc к вашему скрипту.


Для *nix систем нужен установленный stdin/stdout энкодер (напирмер для вещания mp3 требуется Lame. Установка Lame для Debian/Ubuntu apt-get install lame)

Использование:

Функции плагина:

PlaySoundFileToStream(file[]); - Добавляет файл в эфир
PlaySoundUrlToStream(file[]); - Добавляет радиостанцию или удаленный файл в эфир
IsServerActive(); - возвращает true если сервер запущен, false если сервер остановлен
StopPlaying(); - удаляет текущий файл из эфира
SoundServerStart(commandline[],port[]); - Запускает сервер
SoundServerStop(); - Останавливает сервер

KickListener(listener[]); - кикает слушателя с сервера с последующим вызовом OnListenerDisconnect
SetStationNameURL(name[],URL[]); - Изменяет название и ссылку на сайт станции


Для запуска сервера вещания используется функция SoundServerStart.
Первый параметр функции – командная строка для запуска кодера. Если вы хотите использовать формат MP3, то вставьте строку "lame -r -s 44100 -b 128 –"
Где 128 это количество кбит/сек, которое вы хотите использовать для вещания. Если вам понадобится использовать другой формат вещания, вы можете взять любой кодер, поддерживающий принятие данных с stdin.

Второй аргумент – порт на котором надо вещать, или ip адрес, на который будет привязан сервер(если у вас несколько сетевых интерфейсов):

Например для запуска сервера на 8000 порту используйте "8000"
Для привязки сервера к адресу 127.0.0.1 используйте "127.0.0.1:8000"

После запуска сервера надо добавить файл в эфир, функцией PlaySoundFileToStream/PlaySoundUrlToStream.
Параметр file это путь до MP3, OGG, WAV, AIFF файла, который будет воспроизведен в эфире.

ВНИМАНИЕ! Добавлять новый файл в эфир стоит только после окончания предыдущего файла ИЛИ после вызова функции StopPlaying, иначе слушать одновременно несколько песен будет не очень приятно

Функция SoundServerStop останавливает сервер.

Колбеки:

OnSoundFileEnd(); - Вызывается когда достигнут конец текущего файла, или воспроизведение дальше невозможно
OnListenerConnect(listener[],path[]); - При подключении слушателя. Аргумент listener содержит в себе IP адрес и порт слушателя, path cодержит путь до файла открываемый слушателем.
OnListenerDisonnect(listener[]); - при отсключении слушателя. Аргумент listener содержит в себе IP адрес и порт слушателя

Плагин будет еще обновляться, и наполнятся функциями.

Внутри архива присутствует исходной код, демонстрационный FilterScript, и плагины

Закачка:

в прикреплении


Re: Server's Radio Plugin - DANGER1979 - 10.12.2011

Не совсем понял для чего он нужен.
Т.к. вещание обычного радио можно стандартными ф-иями сампа.
Также можно вещать mp3 без всяких проблем, если разместить файлы на хосте.

Хотелось бы услышать то отличие, которое я не смогу реализовать обычными скриптами.


Re: Server's Radio Plugin - Stepashka - 10.12.2011

Ну как я понял это больше приблуда для контроля аудиопотоков, а не игрового процесса.
Т.е. ты игрокам скармливаешь свои поток, а вот тем что в нем играет ты управлешь через этот плагин.


Re: Server's Radio Plugin - jhonyxakep - 10.12.2011

Quote:

Т.к. вещание обычного радио можно стандартными ф-иями сампа.

Например?

Если вы размещаете файлы на хосте, это не вещание, а простая закачка.
Когда вы именно вещаете, вы можете контролировать какая музыка конкретно в данный момент в эфире(например работа DJ прямо на сервере) При этом на стороне клиента не будет загрузки нового потока, вообщем полноценное интернет радио, разве пока что микрофон подключать нельзя.

Quote:

Т.е. ты игрокам скармливаешь свои поток, а вот тем что в нем играет ты управлешь через этот плагин.

Именно


Re: Server's Radio Plugin - DANGER1979 - 10.12.2011

Интересно.
Хотелось бы увидеть больше примеров использования.
Допустим для TeamSpeak3 или просто для микрофона.


Re: Server's Radio Plugin - jhonyxakep - 10.12.2011

ТимСпик на такой базе реализовать не получится (потомучто 5ти секундный буффер), хотя попробовать можно.
Микрофон с сервера чтоли? о0 Не думаю, что это удобно.

Кстати
Quote:

ВНИМАНИЕ! Добавлять новый файл в эфир стоит только после окончания предыдущего файла ИЛИ после вызова функции StopPlaying, иначе слушать одновременно несколько песен будет не очень приятно

может и помочь, например запустив 2 файла одновременно мы можем сделать небольшой микс звуков.

Честно говоря других применения я найти не могу, это надо сидеть и думать или взять плагин тогда, когда это понадобится


Re: Server's Radio Plugin - jhonyxakep - 10.12.2011

Вот идея: Звуковая реклама на сервере по расписанию. Можно просто запускать каждому входящему звуковой поток, и через определенное время выводить в эфир рекламу от спонсора =)


Re: Server's Radio Plugin - jhonyxakep - 11.12.2011

Добавил новую версию.


Re: Server's Radio Plugin - jhonyxakep - 09.03.2012

Добавил версию для *nix, поправил описание что-бы было более понятно что есмь это =)


Re: Server's Radio Plugin - AirKite - 09.03.2012

Молоток. Очень нужная вещь.

Для тех кто не понял для чего это нужно. Простой пример: Представьте себе часовой микс. т.е. мп3 файл с продолжительностью в 1 час, и вы хотите что бы он звучал в клубе. Ну ладно, заливаете вы файл на хост и включаете прямо в самп. Всё бы нечего, но как минимум мп3 файл при запуске всегда будет играть с самого начала, в то время когда другие (зашедшие в клуб раньше) уже будут дослушивать конец микса.

Вопрос к автору: Есть ли какие ни будь ограничения по подключениям (например кол-во) и будет ли что то типа KickListener(listener[]); - например для кика тех, кто не присутствует на сервере или для контроля лишний нагрузки создаваемой каким ни будь умником.


Re: Server's Radio Plugin - jhonyxakep - 09.03.2012

Quote:

сть ли какие ни будь ограничения по подключениям (например кол-во) и будет ли что то типа KickListener(listener[]); - например для кика тех, кто не присутствует на сервере или для контроля лишний нагрузки создаваемой каким ни будь умником.

Ок. Добавлю =)


Re: Server's Radio Plugin - AirKite - 09.03.2012

Вообще я бы сделал немного похитрее. При подключении игрока генерировал бы хеш, с помощью которого становиться возможным подключится к радиостанции всего 1 раз. После отключения удаляем хеш с базы.

Тем самым уже было бы весьма затруднительно забить\зафлудить потоковый сервер.

UPD: ах, да... сам хеш передаётся в строке адреса, типа localhost:8000/hash_u7c0oq1c5n1


Re: Server's Radio Plugin - jhonyxakep - 09.03.2012

Тут вся проблема в том, что многие плееры (Windows Media например) подклчюается к серверу 4 раза, перед тем как начинает воспроизводить поток. Он использует это для определения названия потока и других параметров, в противном случае просто упадет.

Кстати чаем пара iport не хеш? он всегда уникален.


Re: Server's Radio Plugin - AirKite - 10.03.2012

jhonyxakep, ну так я как раз с расчётом на то, что бы слушать могли только с SAMP. А насчёт IP PORT. Хеш подразумевался уникальный каждый раз на каждого плеера зашедшего на сервер.


Re: Server's Radio Plugin - jhonyxakep - 10.03.2012

Quote:

jhonyxakep, ну так я как раз с расчётом на то, что бы слушать могли только с SAMP

При подключении клиента к серверу клиент посылает в заголовке доп инфу. в т.ч. название плеера. В нашем случае клиент сампа посылает инфу о том, что он самп. Поэтому достаточно добавить в коллбеке заголовки клиента, и ServerKick и будет вам скриптовое счастье, и слушатели только с сампа.

Кстати в отличии от масдайного медиаплеера самп использует ту-же библиотеку BASS, что и сервер. Так что у них повышенная совместимость друг с другом.


Re: Server's Radio Plugin - AirKite - 10.03.2012

jhonyxakep, ты меня опять не понял. Речь идёт о безопасности и гарантированном канале для каждого игрока. Если я запущу на твой радио сервер 1000 клиентов, с заголовком SAMP-а.

Хеш генерируется и отправляется серверу (мол вот, с таким хешом пускай юзера), далее этот же хеш передаеться клиенту через PlayAudioStreamForPlayer в адресной строке. (Хеш действителен только на момент подключенного игрока, т.е. в OnPlayerDissconect удаляем хеш из базы).

UPD:
В общем сделай просто в OnListenerConnect(listener[]); что то вроде OnListenerConnect(listener[], channel[]);
channel = "lol123" если к адресу было добавлено /lol123, т.е. localhost:8000/lol123


Re: Server's Radio Plugin - jhonyxakep - 11.03.2012

Quote:

В общем сделай просто в OnListenerConnect(listener[]); что то вроде OnListenerConnect(listener[], channel[]);
channel = "lol123" если к адресу было добавлено /lol123, т.е. localhost:8000/lol123

окей, сделал.

Обратите внимание, что паблик OnListenerConnect изменился.

+

Новая версия.


Re: Server's Radio Plugin - AirKite - 11.03.2012

Quote:
Originally Posted by jhonyxakep
View Post
окей, сделал.
Теперь уже вполне годно. Конкретно порадовал тем что просил KickListener и доп аргумент в OnListenerConnect. А также не успел попросить, как ты уже реализовал SetStationNameURL(name[],URL[]). Спасибо

Кстати не высокие ли задержки у функций и в отдельном ли это потоке всё?


Re: Server's Radio Plugin - jhonyxakep - 12.03.2012

Quote:

Кстати не высокие ли задержки у функций и в отдельном ли это потоке всё?

Первый вызов добавления трека в лист использует основной поток, все последующие в отдельном.

Quote:

SetStationNameURL(name[],URL[])

Видимо я читаю мысли


Re: Server's Radio Plugin - AirKite - 29.11.2012

Слушай, а подумай о возможности запуска несколько серверов, по разным портам или каналам.