четверг, 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>





Комментариев нет:

Отправить комментарий