Показаны сообщения с ярлыком ffmpeg. Показать все сообщения
Показаны сообщения с ярлыком ffmpeg. Показать все сообщения

суббота, 22 февраля 2014 г.

Установка и настройка Zoneminder 1.26 
на CentOS 6.5 x64

1. Устанавливаем дополнительные репозитарии и отключаем SELinux

1.1 Устанавливаем дополнительные репозитарии, необходимые для ZoneMinder:
# rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
# rpm -Uhv http://centos.alt.ru/pub/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm
Устанавливаем репозитарий для ffmpeg
# nano /etc/yum.repos.d/CentOS-Base.repo
Добавляем в конец
[dag]
name=Dag RPM Repository for Centos
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
enabled=1
Устанавливаем репозитарий EPEL:
# wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
(Ссылка: http://www.tecmint.com/how-to-enable-epel-repository-for-rhel-centos-6-5)
Обновляем менеджер пакетов:
# yum update

1.2 Отключаем SELinux, так как ZoneMInder работает при включенном SELinux не очень хорошо.
# nano nano /etc/sysconfig/selinux
Комментируем все строи и пишем в конце:
SELINUX=disabled
Перезагружаемся после обновления
# reboot

2. Подготавливаем систему для установки Zoneminder

2.1 Установка MySQL
# yum install mysql mysql-server
Добавляем сервис mysql в скрипт автозапуска
# /sbin/chkconfig --level 345 mysqld on
Запускаем MySQL
# /etc/init.d/mysqld start
Задаем пароль root для сервера MySQL
# mysql_secure_installation
Сначала вводим на первый вопрос просто <Enter>, затем на следующих вопросах вводим пароль и его подтверждение. На остальные вопросы отвечаем ДА (y)

2.2 Установка Web-сервера apache
# yum install httpd
Добавляем в скрипт автозапуска
# chkconfig --levels 235 httpd on
Задаем имя серверу apache (у нас будет имя cam.svttk.ru)
# nano /etc/httpd/conf/httpd.conf
Прописываем директиву ServerName
ServerName cam.ххх.ru:80
Так же необходимо разрешить серверу Apache работать с символьными ссылками в скриптах (по умолчанию Apache не работает с символьными ссылками скриптов). Это исправляется в секции ScriptAlias:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
    AllowOverride None
#   Options None (по умолчанию выставлено None. 
#   Мы пишем FollowSymLinks)
    Options FollowSymLinks
    Order allow,deny
    Allow from all
</Directory>
Прописываем в файл hosts соответствие имени cam.svttk.ru текущей машине
# nano /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 roslin cam.ххх.ru
Запускаем сервер Apache
# /etc/init.d/httpd start
Разрешаем доступ к серверу Apache
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT 
# service iptables save
Проверяем и убеждаемся, что через браузер сервер отвечает

2.3 Устанавливаем php5 и связки Apache с Mysql и php5
# yum install php
Перезапускаем web-сервер
# /etc/init.d/httpd restart
На этом этапе можно проверить работу сервера apache с php5 с помощью функции phpinfo();
Установка модулей для связки PHP5 и Mysql
# yum install php-mysql php-gd php-imap php-ldap php-odbc
Перезапускаем web-сервер
# /etc/init.d/httpd restart

2.4 Устанавливаем необходимые для работы ZoneMinder пакеты
# yum install -y pcre pcre-devel
# yum install -y netpbm*
# yum install -y libjpeg libjpeg-devel
# yum install -y ffmpeg ffmpeg-devel ffmpeg-libpostproc
# yum install -y gcc-c++
# yum install -y openssl openssl-devel gnutls gnutls-devel perl-Crypt-OpenSSL-* perl-Net-SSLeay
# yum install -y bzip2 bzip2-devel
# yum install -y perl-Date-Manip perl-LWP-UserAgent-Determined perl-Sys-Mmap perl-Device-SerialPort perl-Archive-Tar perl-MIME-Lite perl-MIME-tools perl-Net-SMTP-* perl-Net-FTP-AutoReconnect perl-Archive-Zip perl-Module-Load perl-Time-HiRes git perl-PHP-Serialization subversion yasm perl-YAML
# yum install zlib-devel

После выполнения некоторых команд может выскочить предупреждение, например такое:
предупреждение: 
rpmts_HdrFromFdno: Заголовок V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Public key for x264-devel-0.0.0-0.4.20101111.el6.rf.i686.rpm is not installed
Решение проблемы:
# rpm --import /etc/pki/rpm-gpg/RPM*

2.5 Обновление модулей PERL
# yum install cpan
# cpan –i LWP
(я всегда соглашался в процессе обновления на все вопросы и отвечал yes, просто нажав Enter)

3. Установка непосредственного ZoneMinder

3.1 Скачиваем Zoneminder и java скрипт Cambozola, который необходимо для просмотра видео в бразере
# wget https://github.com/ZoneMinder/ZoneMinder/archive/v1.26.5.tar.gz
# wget http://www.zoneminder.com/sites/zoneminder.com/downloads/cambozola.jar

3.2 Распаковываем
# tar -zxvf v1.26.5
# cd ZoneMinder-1.26.5

3.2 Версия 1.26.5 устанавливается с помощью команды cmake.
Устанавливаем cmake, затем устанавливаем ZoneMinder
# yum install cmake
# cmake . (точка в конце)
У меня  выполнение команды завершалось с ошибкой
CMake Error at CMakeLists.txt:224 (message):
  zm requires mysqlclient but it was not found on your system
Не хватало модуля MySQL. Проблема решилась после установки пакета mysql-devel:
# yum install mysql-devel
После этого выполнение cmake завершается без ошибок
# cmake . (точка в конце)
# make
# make install

4. Подготовка базы данных MySQL, с которой будет работать ZoneMinder

# mysql -uroot -p
Вводим пароль и подключаемся. Затем создаем базу данных zm
mysql> create database zm;
Создаем пользователя main c паролем 12345
mysql> CREATE USER 'main'@'localhost' IDENTIFIED BY '12345';
Определяем пользователю main права на базу zm:
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on zm.* to main@localhost; 
Отключаемся от MySQL
mysql> exit
Заливаем таблицы MySQL базы данных ZoneMinder из файла примера
#mysql -u root -p zm < db/zm_create.sql
Вводим пароль и ждем формирования БД zm.

5. Скрипт запуска сервиса zm помещаем в папку инициализации и добавляем сервис zm в автозагрузку
# cp ./scripts/zm /etc/init.d/
# chmod 755 /etc/init.d/zm
# chkconfig --add zm

6. Подготавливаем web-папку с которой будет работать ZoneMinder и папку, в которую будут сохраняться фотографии с камер. 
Создаем папку для файлов фотографий с камер:
# mkdir /mnt/disk/zm
Создаем папку с файлами web:
# mkdir /var/www/html/zmweb
Запускаем скрипт, которому указываем папку хранения фотографий событий с камер наблюдения /var/www/html/zm:
# ./zmlinkcontent.sh /mnt/disk/zm
...
Web folder       : /usr/local/share/zoneminder/www
Content folder   : /mnt/disk/zm
...
Скрипт подготовит web-файлы в usr/local/share/zoneminder/www, но в папке /var/www/html/zmweb они пока не окажутся.

Копируем в оригинальную web-папку скрипт Cambozola.jar, который необходим для просмотра видео через web-Интерфейс.
# cp ../cambozola.jar usr/local/share/zoneminder/www/cambozola.jar

Определяем права (ZoneMinder работает от пользователя apache):
# chown -R apache:apache /mnt/disk/zm/
# chown -R apache:apache /usr/local/share/zoneminder/www

7. Открываем файл /etc/zm.conf и прописываем туда параметры доступа к базе, которые задали в пункте 4:
# nano /etc/zm.conf

# ZoneMinder database user
ZM_DB_USER=main
# ZoneMinder database password
ZM_DB_PASS=12345

8. Запускаем ZoneMinder
# service zm start
Запускается ZoneMinder:       [  OK  ]
Если "ОК" - значит все сделали правильно.

9. Настраиваем сервер apache для работы ZoneMinder.

9.1 В файле /etc/zm.conf определены папки, которые используются для хранения cgi скриптов и web страниц:
# Path to ZoneMinder web files
ZM_PATH_WEB=/usr/local/share/zoneminder/www
# Path to ZoneMinder cgi files
ZM_PATH_CGI=/usr/local/libexec/zoneminder/cgi-bin
Делаем символьную ссылку на папку с web-файлами:
# ln -s /usr/local/share/zoneminder/www /var/www/html/zmweb
Делаем символьные ссылки на cgi скрипты, расположенные в папке cgi скриптов ZoneMinder:
# ln -s /usr/local/libexec/zoneminder/cgi-bin/nph-zms /var/www/cgi-bin/nph-zms
# ln -s /usr/local/libexec/zoneminder/cgi-bin/zms /var/www/cgi-bin/zms

9.2 Редактируем файл /etc/php.ini:
# nano /etc/php.ini
В этом файле нам необходимо найти указанную ниже строку и заменить Off на On 
short_open_tag = On 
Затем необходимо указать часовой пояс в разделе [Date] (у нас это Europe/Moscow)
[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = Europe/Moscow

9.3 Перезапускаем apache
# service httpd restart

10. По адресу http://<ip адрес>/zmweb будет открываться web-интерфейс ZoneMinder.

Если браузер отображает следующую страницу - это значит сервер MySQL не запустился в системе:

Если браузер отображает следующую страницу - это значит, что в файле /etc/php.ini не прописано short_open_tag = On 

10. Настройка Zoneminder 1.26 на CentOS 6.5 x64

Нажимаем на ссылку Options в правом верхнем углу окна:

Откроется дополнительное окно с несколькими вкладками.
1) Вкладка Display – Ничего не меняем
2) Вкладка Systems.
Меняем  OPT_USE_AUTH. Ставим галку.
AUTH_RELAY – ставим none
После сохранения – пароль admin / admin
Здесь же можно выбрать русский язык интерфейса
LANG_DEFAULT = ru_ru
3) Вкладка Config – ничего не меняем
4) Вкладка Paths – ничего не меняем
5) Вкладка web – ничего не меняем
6) Вкладка Images – 
OPT_CAMBOZOLA – ставим галку
7) Вкладка Logging – ничего не меняем
8) Вкладка Network – ничего не меняем
9) Вкладка Email – ничего не меняем
10) Вкладка  Upload – ничего не меняем
11) Вкладка X10 – ничего не меняем
12) Вкладка High B/W – ничего не меняем
13) Вкладка Medium B/W – ничего не меняем
14) Вкладка Low B/W – ничего не меняем
15) Вкладка Phone B/W  - ничего не меняем
16) Вкладка eyeZm – ничего не меняем
17) Вкладка Users – добавляем нового пользователя. У пользователя admin сразу меняем пароль на очень-очень сложный.




Добавление новой камеры происходит при нажатии кнопки "Добавить монитор".

Рабочие листы настроек для камеры HiQ (заполняются только первые две вкладки):





Ограничение скорости записи выбираем побольше (на камере стоит 25 FPS) - 40.
Источник для камеры HiQ
rtsp://10.200.72.113:554/user=admin&password=&channel=1&stream=0.sdp?
На остальных трех вкладках ничего не меняю:
   



четверг, 9 мая 2013 г.



Организация видеотрансляции с помощью пакета ffmpeg на CentOS 6.4. 

Условия выполнения работ – имеется IP веб-камера BEWARD, подключенный к ней микрофон и ПК (виртуальная машина). На ПК CentOS 6.4. Необходимо организовать видеотрансляцию со звуком с IP web-камеры, что бы пользователи сети Интернет могли просматривать трансляцию через браузер. Обобщенная схема трансляции:


1 Устанавливаем ffmpeg по официальной инструкции с сайта http://ffmpeg.org/trac/ffmpeg/wiki/CentosCompilationGuide

1.1 Удаляем старые пакеты (вдруг они есть) из системы: 

# yum erase ffmpeg x264 x264-devel 

1.2 Устанавливаем пакеты, необходимые для сборки ffmpeg 

# yum install autoconf automake gcc gcc-c++ git libtool make nasm pkgconfig wget zlib-devel 

1.3 Создаем директорию, в которую будим качать исходники и переходим в нее:
# mkdir ~/ffmpeg-source
# cd ~/ffmpeg-source/ 


1.4 Устанавливаем Yasm. Этот пакет представляет собой ассемблер, который потребуется для дальнейшей сборки пакета ffmpeg.
# wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
# tar xzvf yasm-1.2.0.tar.gz
# cd yasm-1.2.0
# ./configure
# make
# make install

1.4 Устанавливаем библиотеку x264, которая является видедекодером стандарта H.264.
# cd ~/ffmpeg-source
# git clone git://git.videolan.org/x264
# cd x264
# ./configure --enable-static
# make
# make install

Примечание: Если в системе не удалось выполнить команду «git», значит в ней не стоит пакет Git. Поставить его можно так:
# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
# wget https://git-core.googlecode.com/files/git-1.8.2.1.tar.gz
# tar -zxf git-1.8.2.1.tar.gz
# cd git-1.8.2.1
# make prefix=/usr/local all
# make prefix=/usr/local install

1.5 Устанавливаем пакет AAC, который является аудиодекодером
# cd ~/ffmpeg-source
# git clone --depth 1 git://github.com/mstorsjo/fdk-aac.git
# cd fdk-aac
# autoreconf -fiv
# ./configure --disable-shared
# make
# make install

1.6 Устанавливаем пакет LAME, который предназначен для работы с аудио формата MP3
# cd ~/ffmpeg-source
# wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
# tar xzvf lame-3.99.5.tar.gz
# cd lame-3.99.5
# ./configure --disable-shared --enable-nasm
# make
# make install

1.7 Устанавливаем библиотеку libogg, которая предоставляет функции, необходимые программам для чтения или записи битовых потоков в формате Ogg
# cd ~/ffmpeg-source
# wget http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
# tar xzvf libogg-1.3.0.tar.gz
# cd libogg-1.3.0
# ./configure --disable-shared
# make
# make install

1.8 Устанавливаем библиотеку libtheora, которая предоставляют функции для чтения и записи видеофайлов
# cd ~/ffmpeg-source
# wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.gz
# tar xzvf libtheora-1.1.1.tar.gz
# cd libtheora-1.1.1
# ./configure --disable-shared
# make
# make install

1.9 Устанавливаем библиотеку libvorbis, которая предоставляют функции, используемые при чтении и записи звуковых файлов.
# cd ~/ffmpeg-source
# wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
# tar xzvf libvorbis-1.3.3.tar.gz
# cd libvorbis-1.3.3
# ./configure --disable-shared
# make
# make install

1.10 Устанавливаем библиотеку libvpx, которая умеет работать с форматом видео Vp8, используемом в HTML5.
# cd ~/ffmpeg-source
# git clone http://git.chromium.org/webm/libvpx.git
# cd libvpx
# ./configure
# make
# make install

1.11 Наконец устанавливаем пакет ffmpeg, в который включаем поддержку, ранее установленных пакетов
# cd ~/ffmpeg-source
# git clone git://source.ffmpeg.org/ffmpeg
# cd ffmpeg
# ./configure --enable-gpl --enable-libfdk_aac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree
# make
# make install

2. Устанавливаем Apache и разрешаем подключение к нему извне по 80-ому порту.
# yum install httpd
# chkconfig --levels 235 httpd on
# /etc/init.d/httpd start
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# iptables-save
Обратившись через браузер к серверу, мы получим тестовую страницу Apache.

3. Создаем конфигурационный файл сервера вещания ffserver и разрешаем подключение к нему по порту 8090.

3.1 Создание конфигурационного файла.
# touch /etc/ffserver.conf
# nano /etc/ffserver.conf
и вносим в него конфигурацию. Например:

#Порт на котором будет идти вещание
Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 100
MaxClients 100
MaxBandwidth 10000
# Указываем фвйл логов. Для отладки можно поставить
# CustomLog –
# Тогда логи буду валиться в консоль
CustomLog /var/log/ffserver/ffserver.log
#После отладки можно закомментировать эту строку
NoDaemon

#Определяем источник
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 500M
</Feed>

#Определяем поток
<Stream video.swf>
Feed feed1.ffm
Format swf
VideoCodec flv
VideoFrameRate 15
VideoBufferSize 50000
VideoBitRate 1000
VideoSize 640x384
</Stream>

#Определяем страницу статистики
<Stream stat.html>
Format status
</Stream>

Для наглядности основные сущности конфигурационного файла представлены на рисунке:

Пока приведенная выше конфигурация определяет лишь то, что сервер вещания ffserver будет иметь лишь один источник feed1 и один выходной поток flash – video.swf . 
Конкретно откуда брать сигнал и куда вещать будет задаваться отдельными командами.

3.2 Разрешаем в iptables обращение к порту 8090.
Открываем файл iptables 
#nano /etc/sysconfig/iptables 
Вписываем строки: 
-A INPUT -p tcp --dport 8090 -j ACCEPT 
-A INPUT -p udp --dport 8090 -j ACCEPT 
У меня получилось: 
# Generated by iptables-save v1.4.7 on Thu May 9 17:19:41 2013 
*filter 
:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [46549019:40517613520] 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 8090 -j ACCEPT 
-A INPUT -p udp -m udp --dport 8090 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT 
# Completed on Thu May 9 17:19:41 2013 

4. Запускаем сервер:
# ffserver -f /etc/ffserver.conf
Эту команду лучше запустить в отдельной консоли, так как остановить ее (нажатием Ctrl-C) – значит остановить сервер.
Убедимся, что сервер работает, посетив страницу его статистики по адресу:
http://<IP адрес сервера>:8090/stat.html
Пример:

5. Для того что бы сервер начал работать необходимо определить серверу источник и путь вещания выходных потоков.

Примеры:

Для вещания из файла (файл gagarina.mp4 – видеоклип с разрешением 360х640):
# ffmpeg -i /root/gagarina.mp4 -s 360x640 -r 24 -ac 1 -ar 8000 -b 30 -ab 12 http://46.20.64.50:8090/feed1.ffm 

Для переприема музыкального канала из Интернета:
# ffmpeg -i http://wtv.cores.biz/relay/zonam.mp4 http://46.20.64.50:8090/feed1.ffm 
После запуска команды консоль становиться недоступной. 

И наконец для вещания с IP камеры, имеющей адрес 188.168.3.201
# ffmpeg -i rtsp://188.168.3.201:554/h264 http://46.20.64.50:8090/feed1.ffm 
После запуска команды консоль становиться недоступной. 

В браузерах Mozilla, Chrome, Opera можно увидеть вещание по адресу flash потока http://<IP адрес сервера>:8090/video.swf В Internet Explorer трансляция в таком виде почему-то не отображается.

6. Для просмотра трансляции через любой современный браузер по стандартному порту необходимо создать html страничку и вставить туда следующий ключевой тег:
<embed src="http://<IP адрес сервера>:8090/video.swf" width=640 height=400 />

К сожалению, скормить эту ссылку какому-то флеш-плееру у меня не получилось, поэтому на странице в моем варианте присутствовал прямоугольник, в котором велось вещание. Ни растянуть экран, ни прибавить / убавить громкость в таком варианте нельзя. Но, однако, изображение есть и звук тоже! :)

ПРИМЕЧАНИЯ:
1.    Просмотр доступных кодеков производиться командой:
  # ffmpeg -codecs
2.    Если в конфиге сервера ffmpeg закомментировать строку NoDemon, то запустить сервер ffserver можно так
  # ffserver -n -f /etc/ffserver.conf
и он не заблокирует консоль.
Так же запустить сервер без блокирования консоли можно так:
  # nohup ffserver -n -f /etc/ffserver.conf > /dev/null 2>&1 &

Источники добавлять можно так, что бы консоль не блокировалась:
# nohup ffmpeg -loglevel 0 -v 0 -i rtsp://10.200.72.112:554/user=admin\&password=\&channel=1\&stream=0.sdp? http://10.200.16.230:8090/feed1.ffm > /dev/null 2>&1 &
# nohup ffmpeg -loglevel 0 -v 0 -i rtsp://10.200.72.113:554/user=admin\&password=\&channel=1\&stream=0.sdp? http://10.200.16.230:8090/feed2.ffm > /dev/null 2>&1 &
Здесь перед спесимволами важно ставить обратный слеш

Убиваем процессы командами:
# ps ax | grep ff
Определяем PID и убиваем его
# kill -9 <PID