суббота, 17 декабря 2011 г.

Ошибка proftpd









После обновления системы (до ubuntu 11.10) и всех пакетов, перестал запускаться proftpd. Выдавал такое:
- Fatal: LoadModule: error loading module 'mod_vroot.c': Operation not permitted on line 74 of '/etc/proftpd/modules.conf'
Решается установкой пакета proftpd-mod-vroot

apt-get install proftpd-mod-vroot

пятница, 7 октября 2011 г.

Ошибка Unable to cast object of type 'X' to type 'X'

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

понедельник, 3 октября 2011 г.

Класс BackgroundWorker и заставка при загрузке

Уже довольно продолжительное время допиливаю небольшую самописную корпоративную систему. И вот решил на время загрузки приложения (порядка 4 сек) вывести заставочку с логотипом компании.

вторник, 6 сентября 2011 г.

Сбросить пароль root MySQL

Понадобилось сделать дамп базы mysql из командной строчки, но случилось страшное. Бывает,  что теряется или забывается пароль рута от mysql. У меня почему-то с завидной регулярностью. Восстанавливается он следующим образом:

понедельник, 29 августа 2011 г.

Трансляция на сайте с нескольких IP-камер, используя Red5, всех-всех-всех и костыли.

Понадобилось мне недавно завести на сайт шесть ip-камер AXIS 215. И поскольку я никогда не искал легких путей, для этого дела я выбрал написанный на java медиасервер Red5.
Сразу оговорюсь, что ни с ip-камерами, ни вообще с видео, ни тем более с медиасерверами я никогда до этого не работал. Яву не знаю, родственников за границей не имею.

В общем, схема получилась следующая:
RTSP поток с AXIS 215 - VLC - Red5 + SteamStream - JW Player. То есть VLC конвертирует rtsp в rtp, а SteamStream конвертирует rtp в rtmp, который потом раздает Red5, а играет практически любой flash-плеер (ну в моем случае  JW Player). Вот такая курага.
Приступим:
Итак, в начале у меня была абсолютно чистая Ubuntu Server 11.04.
Ставим необходимые пакеты:

apt-get install make automake g++ gcc autoconf ffmpeg lua5.1 liblua5.1-0-dev libtag1-dev libdvbpsi-dev libcdio-dev libvcdinfo-dev libcddb2-dev libmad0-dev libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libpostproc-dev libfaad-dev liba52-0.7.4-dev libmpeg2-4-dev libzvbi-dev libflac-dev

И ставим Java и ant:

apt-get install python-software-properties  
add-apt-repository ppa:ferramroberto/java 
apt-get update 
apt-get install sun-java6-jdk ant

Качаем  Live555 - библиотеку, которую использует VLC для стриминга:

сd /usr/local/src
wget http://www.live555.com/liveMedia/public/live555-latest.tar.gz
tar -xvzf live555-latest.tar.gz 
cd live
./genMakefiles linux
make

Качаем VLC

wget http://download.videolan.org/pub/videolan/vlc/1.1.0/vlc-1.1.0.tar.bz2
bzip2 -d vlc-1.1.0.tar.bz2
tar xvf vlc-1.1.0.tar

Копируем Live555 и пробуем сделать configure. Лично у меня с первого раза не получилось и пришлось доставлять lybcrypt. Для этого надо было добавить

deb http://archive.ubuntu.com/ubuntu/ lucid main restricted multiverse universe
deb http://archive.ubuntu.com/ubuntu/ lucid-updates main restricted multiverse universe
deb http://security.ubuntu.com/ubuntu lucid-security main restricted universe multiverse


в /etc/apt/sources.list. Далее:

apt-get update 
apt-get install libgcrypt11-dev

cp -r live/ vlc-1.1.0/extras/
cd vlc-1.1.0 
./configure --enable-faad --disable-remoteosd --disable-qt4 --disable-skins2 --disable-activex --disable-v4l2 --disable-libv4l2 --disable-xvideo --disable-glx --disable-opengl --disable-visual --enable-realrtsp --enable-flac --with-live555-tree=extras/live --disable-dbus --disable-xcb
make

Добавляем пользователя ipcam для запуска VLC:

adduser ipcam
cp -r /usr/local/src/vlc-1.1.0 /home/ipcam/vlc
chown -R ipcam:ipcam /home/ipcam/vlc

Качаем и ставим сам Red5

cd  /usr/local/src/
wget http://flance.onego.ru/files/red5/red5_0.9.0-r3894_all.deb 
dpkg -i red5_0.9.0-r3894_all.deb

Ставим Xuggle для работы с видео в Java:

wget http://com.xuggle.s3.amazonaws.com/xuggler/xuggler-3.4.FINAL/xuggle-xuggler.3.4.1012-i686-pc-linux-gnu.sh 
 chmod +x xuggle-xuggler.3.4.1012-i686-pc-linux-gnu.sh
./xuggle-xuggler.3.4.1012-i686-pc-linux-gnu.sh

И добавляем в начало /usr/lib/red5/red5.sh

export XUGGLE_HOME=/usr/local/xuggler 
export LD_LIBRARY_PATH=$XUGGLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$XUGGLE_HOME/bin:$PATH

Теперь качаем, распаковываем и складываем в нужные места SteamStream, Jetm и библиотечки Xuggle:

wget http://flance.onego.ru/files/steamStream/steamStream.tar.gz
tar -xvzf steamStream.tar.gz
cp -r steamStream /usr/lib/red5/webapps
 

wget "http://downloads.sourceforge.net/project/jetm/jetm/jetm-1.2.3/jetm-1.2.3.tar.gz?use_mirror=citylan&ts=1280727327"
mv jetm-1.2.3.tar.gz\?use_mirror\=citylan\&ts\=1280727327 jetm-1.2.3.tar.gz
tar -xvzf jetm-1.2.3.tar.gz
cp jetm-1.2.3/lib/*.jar /usr/lib/red5/lib

cp /usr/local/xuggler/share/java/jars/xuggle-xuggler.jar /usr/lib/red5/lib 
wget http://xuggle.googlecode.com/svn/trunk/repo/share/java/xuggle/xuggle-xuggler-red5/3.1.875.200908131110/xuggle-xuggler-red5-3.1.875.200908131110.jar 
cp xuggle-xuggler-red5-3.1.875.200908131110.jar /usr/lib/red5/lib  

Возможно, приложение SteamStream и может транслировать несколько потоков rtmp из нескольких потоков rtp, но я, по крайней мере, заставить его так и не смог. Хотя очень старался. А поскольку сделать все нужно было "еще вчера", ковырять java-код у меня не было никакого желания. Я решил просто расклонировать SteamStream и вместо одного запускать шесть приложений. Это, несомненно, наикостыльнейший костыль, но выхода у меня не было. Поэтому я сделал

cd /usr/lib/red5/webapps/
cp SteamStream SteamStream2 и т.д.

Теперь (ура-ура!) в каждом приложении нужно внести небольшие изменения в код.

cd /usr/lib/red5/webapps/steamStream/WEB-INF/src/steamStream/

В Application.java:
smf.setVideoWidth(WIDTH);
smf.setVideoHeight(HEIGHT);


нужно выствить WIDTH,HEIGHT — размер картинки с камер.

А в ReStreamer.java:
private final long tsInterval = TSINTERVAL;
private final int frNumerator = FPS;

FPS — частота кадров видео с камеры. А TSINTERVAL равно 1000000/FPS.

Теперь, нужно чтобы каждое из запущенных SteamStream находились в своем скоупе. Поэтому в папках SteamStream2, SteamStream3 и т.д. надо в файле red5-web.properties поменять строку:
webapp.contextPath=/steamStream2 (3,4 и т.д)
А в  web.xml поменять
<param-value>/steamStream2</param-value>

Теперь можно компилировать приложения. Все шесть штук по очереди:

cd /usr/lib/red5/webapps/steamStream/WEB-INF
ant compile 


Далее нужно создать конфиги для всех шести камер и запустить шесть потоков VLC. Создаем файл  /home/ipcam/cfg/stream1.cfg и пишем туда:

new stream1 broadcast enabled
 setup stream1 input <url потока с камеры>
setup stream1 output "#rtp{dst=127.0.0.1,port=10000,sdp=file:///usr/lib/red5/webapps/steamStream/sdpdescriptors/stream1.sdp}"
control stream1 play


Важное замечание:  в каждом из шести конфигов надо указать разные порты и папки для хранения sdp файла. То есть stream2.cfg выглядит следующим образом:

new stream2 broadcast enabled
setup stream2 input <url потока с камеры>
setup stream2 output "#rtp{dst=127.0.0.1,port=
12000,sdp=file:///usr/lib/red5/webapps/steamStream2/sdpdescriptors/stream2.sdp}"
control stream2 play  


Ну и далее по аналогии. Каждый процесс VLC запускается командой:
/home/ipcam/vlc -vvv --sout-keep --no-rtsp-tcp -I telnet --extraintf logger --logfile=/home/ipcam/vlc.log --telnet-host=127.0.0.1 -R --udp-caching=5000 --rtsp-caching=1000 --http-caching=1000 --telnet-password=pass --vlm-conf /home/ipcam/stream1.cfg --repeat --no-drop-late-frames --no-skip-frames --no-ffmpeg-hurry-up --no-sout-transcode-hurry-up --rt-priority

Красненьким - это чтобы не забыть, что нужно менять имя конфига для каждого процесса. Вот собственно и все. Чтобы поставить всю эту красоту на сайт, можно скачать JW Player и встроить в страницу код:

<div id="mediaplayer">JW Player goes here</div>
<script type="text/javascript" src="jwplayer.js"></script>
<script type="text/javascript">
        jwplayer("mediaplayer").setup({
                 flashplayer: "player.swf",
                 width: '640',
                 height: '480',
                 file: "stream1.flv",
                 provider: "rtmp",
                 streamer: "rtmp://79.141.66.16/steamStream"
       });
</script>
Вот такие пироги с котятами. Основные знания (или незнания) подчепрнуты мной отсюда, спасибо этому доброму человеку.

Два шлюза по умолчанию в Windows 7

Возникла проблема: на одной из машин перестал работать интернет. При этом рутер замечательно пинговался, локалка работала, а вот дальше рутера ни один пакет пробраться не смог.

среда, 17 августа 2011 г.

Установка Sphinx 0.9.9 на CentOS 5.6

Понадобилось прикрутить к сайту поисковый движок Sphinx. Казалось бы,
yum install sphinx - и все в шоколаде.
Ан нет, почему-то последней версией в репозиториях был 0.9.8, а разработчики сайта строго сказали, что нужен именно 0.9.9, потому что только он как надо работает с нашей версией MySQL.

пятница, 12 августа 2011 г.

Adobe InDesgn CS5 и скрипт sZam5

sZam5 - это платный скрипт от Виталия Батушева для нормализации текста в документах Adobe InDesign. Очень удобная штуковина, однако в моей практике с ним дважды возникала следующая проблема (только с Windows 7): при его запуске индиз ругался



вторник, 9 августа 2011 г.

Заметка для счастливых людей, выбравших в качестве веб-морды для своего почтовика замечательный клиент Roundcube Webmail

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