четвер, 22 січня 2009 р.

Icecast2 + ruby-shout

Icecast — вільне програмне забезпечення для організації потокового цифрового аудіомовлення. Його підтримкою займається Xiph.org Foundation.
Icecast є серверною програмою, яка може здійснювати роздачу цифрових потоків різних форматів, таких як Ogg Vorbis, Mp3, Theora, ААС, Aacplus і NSV. Власне передача даних здійснюється по стандартному протоколу HTTP, або по протоколу Shoutcast.
Icecast є аналогом програми Shoutcast компанії Nullsoft, проте має розвиненішу функціональність і підтримує більшу кількість форматів потоків. При передачі даних Icecast підтримує теги в Utf-8, що дозволяє організовувати трансляцію з кириличною анотацією.

Встановлення і налаштування Icecast2


Для встановлення Icecast2 просто запускаємо:
$ sudo apt-get install icecast2

Після цього ми повинні змінити /etc/icecast2/icecast.xml. Більшість значень по замовчуванню повинні працювати, але ви повині змінити паролі у секції <authentication>...</authentication>.

  • source-password це пароль який наша програма у майбутньому буле використовувати для зв'язку з сервером Icecast2;

  • admin-password це пароль який адміністратор буде використовувати у веб-інтерфейсі  Icecast2;

  • relay-password ми не будемо використовувати, але так чи інакше ви повинні змінити його.


[...]                              
<authentication>
<!-- Sources log in with username 'source' -->
<source-password>password1</source-password>
<!-- Relays log in username 'relay' -->
<relay-password>password2</relay-password>

<!-- Admin logs in with the username given below -->
<admin-user>admin</admin-user>
<admin-password>password3</admin-password>
</authentication>
[...]

Далі редагуємо /etc/default/icecast2 і встановлюємо ENABLE як true
[...]                                                      
ENABLE=true
[...]

Запускаємо сервер Icecast2:
$ sudo /etc/init.d/icecast2 start


Зараз ви можете у веб-броузері перейти за адресою http://127.0.0.1:8000/ і подивитись на веб-інтерфейс:


Встановлення ruby-shout


Встановлюємо пакети необхідні для ruby-shout:
$ sudo apt-get install libogg-dev libshout3-dev libspeex-dev libtheora-dev libvorbis-dev


libshout - це бібліотека для трансляції аудіо до icecast або shoutcast-сумісних серверів. На даний момент вона відтримує 2 формати аудіо і 3 протоколи.

Формати аудіо:

  • Ogg Vorbis

  • MP3



Протоколи:

  • HTTP

  • Audiocast

  • ShoutCast



ruby-shout це інтерфейс Ruby до libshout. Він дозволяє програмам на Ruby легко відправляти дані до icecast сервера і управляти мета-інформацією про потік.

Для інсталяції ruby-shout просто виконуємо:
$ sudo gem install ruby-shout


Приклад


Скрипт зчитує звукові дані з вхідного файлу і відправляє їх icecast серверу без resampling.
#!/usr/bin/ruby                  

# Stream all the files given on the commandline to the Icecast server on
# localhost.

require 'rubygems'
require 'shout'

BLOCKSIZE = 16384

s = Shout.new
s.host = "localhost"
s.port = 8000
s.mount = "/example.ogg"
s.format = Shout::VORBIS
s.user = "source"
s.pass = "password1"
s.name = "Example Radio"
s.description = "Powered by Ruby/#{VERSION}, ruby-shout/#{Shout::version}"
s.genre = "Rock"

s.connect

ARGV.each do |filename|
File.open(filename) do |file|
puts "sending data from #{filename}"
m = ShoutMetadata.new
m.add 'filename', filename
s.metadata = m
while data = file.read(BLOCKSIZE)
s.send data
s.sync
end
end
end

s.disconnect


Посилання


2 коментарі:

libc6 сказав...

Круто , спасибо.
Теперь дома можно мультикомнатное радио устроить.

_linux_ сказав...

ля дома я бы рекомендовал связку icecast + mpd + какой-то GUI для mpd. Оч удобно =)