magnify
Home arrow Posts tagged "помощь"
formats

Передача видео с IP-камер D-Link

Опубликовано: 22.05.2008 Автор: в

Недавно столкнулся с проблемой получения и передачи потокового видео с IP-камеры D-Link 6620G. Обнаружилось, что эта камера (как и все камеры D-Link, как мне ответил сотрудник на официальном форуме) не отдает видеопоток напрямую ни по UDP, ни по HTTP в чистом виде, что меня очень неприятно удивило. С камерой можно работать только через ActiveX-компонент, т.е. только в IE. Единственное, что можно получить — это текущий кадр через cgi-bin/video.jpg. Но задача как раз была организовать раздачу через Web. Что ж, после некоторых размышлений мне удалось это сделать, организовав следующую схему:

Общая схема

Работать это должно было следующим способом:

  1. С камеры формируется MJPEG-поток, забирая текущий кадр /cgi-bin/video.jpg. Для этого используется детектор Motion. Этот программное решение подкупило меня своей легковесностью, быстротой, а также довольно гибкой функциональностью.
  2. Далее ffmpeg конвертирует MJPEG-поток в flv и отдает flv-поток с помощью ffserver.
  3. В нужную HTML-страничку встраивается FLV-плеер, который и показывает картинку.

Опишу подробнее процесс установки и конфигурирования этого добра на Debian 4.0:

1. Подготовка:
Добавляем в /etc/apt/sources.list репозиторий debian-multimedia

deb http://www.debian-multimedia.org stable main
deb-src http://www.debian-multimedia.org etch main

Устанавливаем пакеты

apt-get update
apt-get install motion ffmpeg

2. Конфигурация motion (/etc/motion/motion.conf):
Сам Motion, вообще говоря, это программный детектор движения. У него довольно много интересных настроек и опций. Конфигурирование происходит через файл /etc/motion/motion.conf.

# Включаем демон
daemon on
quiet on

# Указываем URL кадра камеры
# и, если необходимо, логин и пароль
netcam_url http://IP-АДРЕС/cgi-bin/video.jpg
netcam_userpass admin:adminpass
# Надпись слева
text_left Test

# Размер получаемого кадра c камеры
width 704
height 576

# Частота кадров. Иными словами, максимально количество кадров забираемое
# с камеры в секунду
framerate 5
# Качество забираемой картинки
quality 100
# Отключаем автояркость
auto_brightness off

#Различные настройки видео
threshold 4500
noise_level 64

brightness 0
contrast 0
saturation 0
hue 0

# Отключаем использование ffmpeg в реальном времени
ffmpeg_cap_new off

# Директория, где храним снимки и фильмы
target_dir /var/lib/motion/snapshots

# Включаем сервер, транслирующий MJPEG-поток на порту 8081
webcam_port 8081

# Разрешение соединения с MJPEG-потоком
# Если ffmpeg на другом IP, то ставим off. Иначе - on
webcam_localhost off

# Качество выдаваемого MJPEG-потока
webcam_quality 100
# Частота кадров выдаваемого потока
webcam_maxrate 5

# Отключаем запись снимков и видео.
# Можно и включить, кому хочется
output_all off
output_motion off
output_normal off

Проверить наличие MJPEG-потока можно, например, при помощи VLC media player.

3. Конфигурирование ffserver:
Настройка ffserver происходит через файл /etc/ffserver.conf:

# Порт, ка котором будет слушать ffserver и отдавать flv-поток
Port 8080

# Интерфейс привязки ffserver'а (в данном случае - все)
BindAddress 0.0.0.0

# Максимально дозволенное количество клиентов
MaxClients 1000

# Пропускная способность в kbit/sec
MaxBandwidth 100000

# Файл журнала
CustomLog /var/log/ffservser.log
...
# Описываем feed
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 10M
</Feed>
...
# Поток Flash Video
# Описываем его параметры (bitrate, framerate, buffersize и т.д.)
<Stream test.flv>
Feed feed1.ffm
Format flv
VideoCodec flv
#VideoFrameRate 4
VideoSize 4cif
VideoBitRate 2000
#Qscale 2
#VideoBufferSize 256
#VideoQMin 10
#VideoQMax 10
#VideoIntraOnly
PreRoll 0
NoAudio
</Stream>
...
# Можно включить статистику
<Stream stat.html>
Format status
# Only allow local people to get the status
#ACL allow localhost
ACL allow <IP-адрес>
</Stream>
...

4. Скрипты запуска и остановки ffmpeg и ffserver:
Для запуска и остановки ffmpeg и ffserver создаем простые shell-скрипты.
start_ffmpeg.sh:

#!/bin/sh

# Запускаем ffserver
/usr/bin/ffserver;
# Запускаем ffmpeg
/usr/bin/ffmpeg -s 4cif -y -an -r 4 -f mjpeg -i http://127.0.0.1:8081/stream.mjpg http://IP-АДРЕС:8080/feed1.ffm &

stop_ffmpeg.sh:

#!/bin/sh

# Для простоты...8)
killall ffserver;
killall ffmpeg;

5. HTML-код для просмотра:
Смотреть видео мы будем через FLV-плеер, например, Flowplayer.
index.html

<html>
<head>
<title>
Тестовое видео
</title>
<script type="text/javascript" src="swfobject.js"></script>
</head>
</html>
<body>
<div id="mplayer">Movie</div>
<script type="text/javascript">
    var so = new SWFObject('FlowPlayerLight.swf','player','698','600','7');
    so.addVariable("config", "{videoFile: http://IP-АДРЕС:8080/test.flv'', showMenu: false, showFullScreenButton: false, showVolumeSlider: false,
    so.write('mplayer');
</script>
</div>
<body>

FlowPlayerLight.swf можно взять здесь. Библиотеку swfobject.jsздесь.

Можно, конечно, и просто встроить FLV-плеер в HTML-код через Embed и Object.

Очень важное замечание: скорее всего придется поиграться c framerate, bitrate и другими параметрами в ffserver.conf и в скрипте запуска. Мне пришлось долго повозиться, подбирая более менее нормальные значения, поскольку возникали проблемы с проигрыванием потока в FLV-плеере.

6. Теперь все готово к пробному запуску:
Запускаем motion

/etc/init.d/motion start

Запускаем ffserver и ffmpeg

./start_ffmpeg.sh

Открываем в браузере index.html и смотрим, показывается ли изображение с камеры.

В заключение, хочется отметить, что, все-таки, такая схема не является широковещательной. Т.е. каждый подключенный клиент будет «кушать» кусок полосы канала равный битрейту видео. Я пока не разбирался, можно ли организовать таким образом broadcasting или multicasting, поскольку это немного вне моей компетенции…8) Но думаю, что при определенном усилии это можно сделать. Также к недостаткам можно отнести довольно высокий битрейт (сколько я ни пытался, получить видео хотя бы в районе 500 kbit/sec, в нормальном качестве, и приемлемой частотой обновления не получилось).

Ссылки:

  1. http://forum.dlink.ru
  2. http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome
  3. http://ffmpeg.mplayerhq.hu/
  4. http://en.wikipedia.org/wiki/Webcast
  5. http://en.wikipedia.org/wiki/Motion_JPEG
  6. http://www.videolan.org/vlc
  7. http://flowplayer.org
  8. http://blog.deconcept.com/swfobject
 
Просмотров: 29 356 | 8 комментариев  comments 
formats

5 правил регистрации

Опубликовано: 19.05.2008 Автор: в

Сегодня попробую описать некоторые тонкости регистрации на freelance-сайтах в 5 простых подсказках:

  1. Указывайте РЕАЛЬНЫЕ данные, касающиеся платежной информации (Billing address, First Name, Last Name, etc) при регистрации. В противном случае у вас могут возникнуть проблемы с выводом денег с виртуального счета.
  2. Отнеситесь внимательно к составлению резюме. Попытайтесь описать как можно больше навыков и областей, в которых вы работаете. Если есть примеры выполненных, более менее крупных проектов, то обязательно укажите их. Помните, резюме — это одно из первых мест, куда заглянет заказчик при рассмотрении Вашей ставки. Особенно это важно новичкам без рейтинга.
  3. Нелишним также будет использование отдельного email-адреса, предназначенного специально для удаленной работы. Честно говоря, это мое субъективное мнение, но мой почтовый ящик, который я стараюсь не «светить», значительно упрощает работу, избавляя от необходимости рыться в залежах других писем и спама.
  4. Если есть возможность фильтровать открытые заказы по категориям (как, например, это возможно делать на RentACoder), то советую обязательно воспользоваться этим. Выбрав нужные категории, вы сузите область поиска. И ваше внимание не будет отвлекаться на просмотр заказов, которые не относятся к вашей области деятельности.
  5. И наконец, после регистрации обязательно почитайте разделы помощи и FAQ, расположенные на сайте, и тогда многие вопросы отпадут сами собой.

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

 
Просмотров: 1 075 | 2 комментария  comments