В период чемпионата мира по футболу очень хотелось следить за ходом матчей в живую, да вот беда - работа. Решение казалось бы банально - on-line видео трансляции, но не я один такой заинтересованный оказался. А при 30-40 одновременных потоках входящий Интернет канал оставляет остальным сотрудникам офиса лишь маленькую надежду на закачку чего бы то ни было. Очень быстро родилась идея организовать видео прокси, которое бы принимало on-line трансляцию и раздавало видео поток в сети. Локальный трафик не так значим, как входящий интернет трафик, потому приступил к реализации. Выбор пал на VLC media player, который сначала показался несколько монстроидальным, но в дальнейшем оправдал все надежды. Итак, что такое VLC player? Это open-source программный комплекс, позволяющий творить с видео чудеса. В плейере уже находиться масса возможностей, фактически плейер может одновременно выступать и сервером и клиентом. В поставку входят интерфейсы для удалённого управления (telnet, http), так что можем смело ставить vlc на консольную виртуальную машину (здесь и далее все команды приводятся для Ubuntu): sudo aptitude install vlc vlc-plugin-*
Далее запускаем VLC с активным http интерфейсом удалённого управления: vlc -vvv -I http --http-host 10.1.6.3:8181
, здесь
-vvv - verbose опция (количество букв v отображает уровень логов)
-I - включает один из интерфейсов удалённого управления (здесь http)
--http-host - задаёт имя (ip) которое пользователь должен ввести, чтобы попасть в админ часть и порт, который будет слушать встроенный сервер
Заходим по адресу и видим: В принципе данного интерфейса хватает для экспериментов. Для лучшей наглядности лучше сразу же нажать кнопочку "Help".
Первым делом, я нажал кнопку "Open", ввёл адрес сервера (для экспериментов было выбрано футбольное on-line вещание ICTV) и... И насладился цветной картинкой ASCII видео в консоли удалённого сервера. Поборов восхищение и отключив видео - нашел в http интерфейсе кнопку "Stream output", которая и привела меня к победе. Догадался одновременно заполнить обе секции перед нажатием кнопки "Play":
в Input (Open кнопка) адрес вещания в интернете.
в Stream output выбрал http, ввёл адрес (всё тот же 10.1.6.3), указал порт (на этот раз 8080, чтобы не пересекаться с админкой) и отметил тип кодирования "MPEG TS"
Подключившись локальным VLC player'ом к адресу http://10.1.6.3:8080/ получил звук и картинку ICTV. Казалось бы вот он успех, но всё не закончилось так быстро. После нескольких переподключений локальным плейером оказалось, что в половине случаев видео даже не пытается стартануть, зато звук передаётся отлично. После танцев с бубном вокруг логов проблема решилась дополнительной отметкой "" в "mp2v" и 1024 kb/s. Эта опция перекодирует видео на лету в выбранный формат.
И на последок консольный вариант запуска: vlc -vvv -I http --http-host 10.1.6.3:8181 http://<internet.on-line.video.url> -sout "#transcode{vcodec=mp2v,vb=1024,scale=1}:std{access=http,mux=ts,dst=10.1.6.3:8080}"
1. Postgresql 8.4 + PostGis 1.5.1 оказался в 4 раза производительнее при использовании st_intersects на большом кол-ве данных, нежели Postgresql 8.3 + PostGis 1.3 2. Слышали про магическое "\d" в psql? Не знаете какие же запросы делает этот оператор? Вот вам лекарство: "\set ECHO_HIDDEN t" 3. Как вывод из предыдущего пункта, напрашивается решение следующих вопросов: * "А как создать таблицу, но только если она еще не существует?" * "А как создать индекс, но только если он еще не существует?" В Postgresql это решается обёрткой создания в функцию следующего вида: CREATE OR REPLACE FUNCTION create_tables_if_not_exist() RETURNS void AS $BODY$ BEGIN IF NOT EXISTS ( select * from pg_class where relname = 'countries' ) THEN CREATE TABLE countries ( id serial NOT NULL, geom geometry, name character varying(80), cid integer, CONSTRAINT countries_pkey PRIMARY KEY (id) ) WITH (OIDS=FALSE); END IF; END; $BODY$ language 'plpgsql';