среда, 7 ноября 2012 г.

Webcams broadcasting using FFmpeg and flussonic

Есть необходимость вещать с камер подключаемых к компьютеру при помощи USB и FireWire. Пробовал пока только на Ubuntu 12.04, для публикации вебкамеры на потоковом сервере Flussonic. В системе должны присутствовать пакеты с video4linux2, ffmpeg-server и libx264-extra-53. Команда для передачи rtmp потока выглядит так
ffmpeg -re -f video4linux2 -i /dev/video0 -acodec libfaac -vcodec libx264 -f flv rtmp://flussonic:1935/live/test
А вот тот же фокус только при подключении камеры по FireWire. В системе должен быть установлен пакет dvgrab
dvgrab - | ffmpeg -deinterlace -re -f dv -i - -acodec libmp3lame -vcodec libx264  -ar 44100 -f flv rtmp://flussonic:1935/live/test
А так можно сделать скриншот кадра и сохранить его в jpeg

ffmpeg -i video.mov -an -ss 2 -vframes 1 -y -f mjpeg screen.jpg

Это взял из документации http://erlyvideo.ru/doc/live#publish

пятница, 21 сентября 2012 г.

Extreme x460 password recovery

Забыл пароль от коммутатора Extreme x460-48. Появилось естественное желание сбросить настройки к заводским, благо такая процедура предусмотрена у всех уважающих себя производителей сетевого оборудования. Правда у всех она реализована по разному и может разниться не только между моделями железок но и между версиями прошивки на одной и той же железяке.

Мне нужно было сбросить пароль и я начал искать в интернете как это сделать. Несколько раз попадалась инструкция такого вида:

A hard reboot consists of unplugging the unit and plugging it back in. A soft reboot, in this case typing reboot at the command line interface, will not suffice as a complete cycling of the power is needed. While plugging the switch back in hold down the space bar until the bootrom menu appears. At the Bootrom-> prompt enter an h, for help. This will bring up the menu. The menu should appear as seen below 
1: Select primary code image
2: Select secondary code image
3: Select primary configuration
4: Select secondary configuration
b: Change baud rate
d: Force default configuration
f: Boot on board flash
h: Help
k: Erase selected configuration
p: Boot PCMCIA cards:
s: Load code image from serial port using XMODE 
The option you want to choose is to select the primary code image by hitting 1. After the primary image is selected select k to erase selected configuration. If you are trying to restore a unit to factory defaults then proceed the same way, erasing the secondary configuration. After this has been completed, there should be no more passwords of any kind on your Extreme switch. Choose d to force default configuration and then f to boot on board flash. After your Extreme switch resets and you are prompted with a login enter in admin, hit enter twice entering a blank password at the password prompt. You should now have admin level access. Change your login and password, saving them when you are finished.

Но у меня не получилось выполнить эти указания, всё обламывалось в самом начале)) При выходе в консоль загрузчика меня встречало не меню с вышеописанными вариантами, а приглашение к вводу команд.

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

четверг, 2 августа 2012 г.

Организация потокового вещания с ip камеры.

Была необходимость организовать вещание с камеры для видеонаблюдения на сайте организации. Причём надо было рассчитывать на то что количество камер будет со временем увеличиваться.

Анализ проблемы показал, что вся система должна состоять из нескольких компонентов: источник видеопотока (в моём случае камера), стрим сервер, вебсервер со страничкой куда будет встроен flash player.

Дальнейшее изучение камер дало следующее: все flash плееры (я рассматривал только бесплатные) принимают поток в формате RTMP - это стандарт для флеша. Но ни одна из рассмотренных мною камер не могла создавать поток в этом формате. Зато почти все более менее современные камеры умеют создавать RTSP потоки. Это означает что стрим сервер должен уметь конвертировать один поток (откамеры) в другой (для клиента).

Так же камеры различаются поддерживаемыми форматами видео. Современный стандарт вещания в интернет это h264, это значит что если камера не умеет кодировать видео этим кодаком, это придётся делать серверу или понадобится посредник выполняющий эту работу. То же касается аудио, стандартом вещания является AAC ну или на крайняк mp3. 

Исходя из описанного выше приходится выбирать. Или купить дешёвые камеры но зато разориться на дорогостоящем софте для переконвертирования потоков. Или купить дорогие камеры способные изначально создавать контент пригодный для передачи пользователям.

Конечно рассматривался вариант с покупкой дешёвых камер и использования свободного софтак (такго как vlc live555 Red5) для организации трансляции. Но опыты показали, что экономия на камерах обернётся тратами на покупку мощных серверов, т.к. такой вариант требует больших вычислительных мощностей.

В итоге была куплена камера с аппаратной поддержкой h264/AAC. Это позволило сильно снизить нагрузку на сервер. Единственное что теперь необходимо сделать это преобразовать RTSP от камеры в RTMP для флеш плеера клиента.

Для этой задачи был выбрал молодой проект Erlyvideo. Он распространяется в двух версиях. Минимальный функционал доступен под свободной лицензией (GPL). В моём случае минимального функционала было вполне достаточно. На сайте есть довольно полная документация по установке. Сразу скажу, что авторы программы официально поддерживают только Debian\Ubuntu, однако я без труда собрал его для CentOS 6.2.

Последнее что осталось сделать это поместить на вебстраничку flash плеер. Их много разных, мне хватило бесплатного JWPlayer. Инструкция по его настройке так же доступна в документации по Erlyvideo.

У этой реализации есть лишь один недостаток, обладатели iPhone и iPad не смогут просматривать вашу трансляцию т.к. не поддерживают flash. Для вещания в фомате Apple можно купить лицензию, это то же описано в документации.

Ну и на последок приведу пример встраивания флеш плеера в страничку
<html>
<head>
<title>Онлайн вещание</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8;">
<script type='text/javascript' src='jwplayer.js'></script>
</head>
<body>
<div id="player"></div>
<script type="text/javascript">
jwplayer("player4").setup({
'flashplayer': 'player.swf',
'height': '512',
'width': '960',
'file': 'pl.xml',
'playlist.position': 'right',
'playlist.size': '320',
'autostart': 'true'
});
</script>
</body>
</html>
Предполагается что архив с плеером распакован в директорию где находится страничка. В pl.xml находится плей лист с указанием адреса потокового сервера и потоков, вот его содержание

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"
  xmlns:jwplayer="http://developer.longtailvideo.com/">
  <channel>
    <title>Playlist with RTMP Dynamic Streaming</title>
    <item>
      <title>Камера</title>
      <description>Камера на входе.</description>
      <media:group>
        <media:content bitrate="1800" url="camera"  width="1280" />
      </media:group>
      <jwplayer:streamer>rtmp://<ip_adres>:1935/</jwplayer:streamer>
    </item>
  </channel>
</rss>





Extreme x460-48 SammitStack-V

Закупили несколько коммутаторов ExtreameNetworks серии x460. Было желание объединить их в стек при помощи оптических линий связи. Информации по настройке на русском языке просто нет, пришлось изучать мануал.

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

Перед созданием стека нужно переназначить стековые порты на оптические SFP+, делается это так
configure stacking-support stack-port [1|2|all] selection alternate
Из синтаксиса команды видно что можно переназначить как все сразу так и каждый порт по отдельности.

После того как все стековые порты назначены даём команду на создание стека
configure stacking easy-setup
Так же нужно помнить про ограничения. В одном стеке может быть не больше 8 коммутаторов. А соединение в стек по технологии  SammitStac-V (по оптике) может производиться только напрямую (то есть без посредников виде других коммутаторов и маршрутизаторов).

вторник, 24 июля 2012 г.

SIP телефония

Решил поискать замену почившему Skype и наткнулся на такую вещь как SIP телефония.

Попытка использовать бесплатных провайдеров вроде Ekiga к успеху не привела и тогда было решено посмотреть что предлагают за деньги.

Первое что попалось http://zadarma.com?ref=c4674753433996a11b74bd0c7293f2ea . Мне повезло и первый же эксперимент с платными услугами оказался удачным. Теперь надо привыкнуть к использованию программного телефона для звонков за пределы области.

Скажем звонки на мобильники по России, где то 6 центов, и это выгодно если абонент находится в другой области.

Кроме провайдера конечно необходим ещё и телефон. Я в качестве телефона решил использовать свой нетбук с Fedora 17 на борту и программным телефоном SFLphone. К сожалению RPM пакетов пока нет, по этому собираю из исходников по этой инструкции http://blog.randell.ph/2012/04/09/how-to-install-sflphone-on-fedora-16/ . Правда она немного устарела.

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

среда, 18 июля 2012 г.

Squid и splash_page

Постановка задачи:

Организовать перенаправление пользователей халявного WiFi на информационную страничку. При этом необходимо показывать информационную страницу только раз за сессию.

Решение:

В сети уже использовался прозрачный прокси Squid и в нём был интересующий меня функционал. Версия сквида 3.1.10, самая свежая из стабильных. Настройка производилась по этому мануалу http://wiki.squid-cache.org/ConfigExamples/Portal/Splash.

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

В противоположность внешним сайтам, страницы ,сохранённые  на прокси локально открывались как и обещано в мануале. Из этого родился костыль, в локальную страницу помещался однострочник на яваскрипт, перенаправляющий пользователей на необходимый ресурс.
setTimeout(location.replace("http://exempl.ru"),1000);
как вариант  можно ещё так, этот вариант лучше воспринимается iУстройствами
<meta http-equiv="refresh" content="1;URL='http://exampl.ru/'"> 
Можно заметить что указан таймаут в 1 секунду. Это то же от не знания как решить проблему. По идее задержка должна регулироваться в дерективе
external_acl_type splash_page ipv4 ttl=6 concurrency=200 %SRC /usr/lib64/squid/squid_session -t 7200
а именно  ttl=0, но даже при значении 0 пользователь вынужден ждать минимум секунду, всё это время происходит постоянный редирект, то есть страница постоянно обновляется. Выглядит это не красиво и рас уж нельзя отказаться от ожидания, пусть лучше пользователь видит пустую страницу.