RSS
 

Archive for декабря 6, 2010

Relaying: Multicast в HTTP и обратно

06 Dec

В рамках разработки нашего iptv-решения (которое близко к публичному релизу, и это радует), родилась небольшая утилита под рабочим названием relaying, пардон мой французский. Эта утилита может получает поток (mpeg2, mpeg4 – не столь важно), поступающий на multicast-группу или запрошенный по http с удаленного вэбсервера и может:

  • отдать его по http любому количеству клиентов, корректно отрабатывая передачу данных низкоскоростным потребителям (т.е. не распухая в памяти) и/или
  • отдать поток в определенную multicast-группу и в определенный интерфейс.

При этом relay получает только одну копию исходного потока и этим отличается от массы других подобных утилит. Еще стоит заметить, что relay может обслуживать сотни и сотни http-клиентов, не требуя при этом дорогостоящего оборудования и мощного сервера. Так, прямо сейчас на соседнем сервере на базе старенького Xeon X3065 под управлением FreeBSD relaying отдает по http около 500Мбит/с, при этом load averages: 0,91 0,67 0,54!

Примеры вызова:


# ./relaying --outhttp=x.y.z.x:port --inudp=233.61.10.203:1234 --inudpif=a.b.c.d

Клиент может получить содержимое multicast-группы 233.61.10.203:1234 (доступной на локальном интерфейса a.b.c.d) по http с адреса: http://x.y.z.x:port/


# ./relaying --outhttp=x.y.z.x:port --inhttp=a.b.c.d:8080/iptv/channel

Получаем поток с адреса http://a.b.c.d:8080/iptv/channel и отдаем его по http нашим зрителям.

Пока мы еще не определились, стоит ли делать код этой утилиты open-source, но сделать ее freeware я бы хотел. Поэтому, если есть интерес поэкспериментировать, свяжитесь со мной, у меня есть красивый профайл с контактной информацией на about.me/deineka.

p.s. Версии win32 нет, только FreeBSD и Linux.