Рубрика: *web

websocket сервер запуск скрипта на любом языке программирования

Здравствуйте давно ничего не писал 😉
не было много времени как всегда по свободе стараюсь что то написать сегодня речь пойдет о простом websocket сервере который готов работать с любым скриптом написаным на любом языке будь то php,perl,bash,c#,c,java,ruby,python или любом другом этот сервер имеет название websocketd скачать можно тут : http://websocketd.com/ есть для всех популярных ос даже для windows )) для запуска на FreeBSD или Linux готов из коробки )
посмотрим на то что он может дав команду websocketd —help :
Usage:

Export a single executable program a WebSocket server:
websocketd [options] COMMAND [command args]

Or, export an entire directory of executables as WebSocket endpoints:
websocketd [options] —dir=SOMEDIR

Options:

—port=PORT HTTP port to listen on.

—address=ADDRESS Address to bind to (multiple options allowed)
Use square brackets to specify IPv6 address.
Default: «» (all)

—sameorigin={true,false} Restrict (HTTP 403) protocol upgrades if the
Origin header does not match to requested HTTP
Host. Default: false.

—origin=host[:port][,host[:port]…]
Restrict (HTTP 403) protocol upgrades if the
Origin header does not match to one of the host
and port combinations listed. If the port is not
specified, any port number will match.
Default: «» (allow any origin)

—ssl Listen for HTTPS socket instead of HTTP.
—sslcert=FILE All three options must be used or all of
—sslkey=FILE them should be omitted.

—passenv VAR[,VAR…] Lists environment variables allowed to be
passed to executed scripts.

—reverselookup={true,false} Perform DNS reverse lookups on remote clients.
Default: true

—dir=DIR Allow all scripts in the local directory
to be accessed as WebSockets. If using this,
option, then the standard program and args
options should not be specified.

—staticdir=DIR Serve static files in this directory over HTTP.

—cgidir=DIR Serve CGI scripts in this directory over HTTP.

—header=»…» Set custom HTTP header to each answer. For
example: —header=»Server: someserver/0.0.1″

—header-ws=»….» Same as —header, just applies to only those
responses that indicate upgrade of TCP connection
to a WebSockets protocol.

—header-http=»….» Same as —header, just applies to only to plain
HTTP responses that do not indicate WebSockets
upgrade

—help Print help and exit.

—version Print version and exit.

—license Print license and exit.

—devconsole Enable interactive development console.
This enables you to access the websocketd
server with a web-browser and use a
user interface to quickly test WebSocket
endpoints. For example, to test an
endpoint at ws://[host]/foo, you can
visit http://[host]/foo in your browser.
This flag cannot be used in conjunction
with —staticdir or —cgidir.

—loglevel=LEVEL Log level to use (default access).
From most to least verbose:
debug, trace, access, info, error, fatal

Как видим опций не сильно много но очень много их и не надо 😉
для запуска достаточно ./websocketd —address 127.0.0.1 —port 9000 ./название вашего скрипа.расширение 😉

посмотрим на пример скрипта для php :
#!/usr/bin/env php

<?php

echo «Hello World !».»\n»;

?>

«\n» в конце обязательно должен быть.

пример html и javascript для просмотра работы:

<script>
var ws = new WebSocket(«ws://localhost:9000″);
ws.onmessage = function (evt) {
var t = document.getElementById(‘test’);
t.innerHTML =evt.data;
console.log(evt.data);
};
</script>
<div id=»test»>here is content</div>

Думаю дальше всем понятно как это работает 😉
теперь скажу лишь о возможности передачи сессий в php скрипт серверной стороны 😉
делается это костылем 🙂
в переменных которые доступны серверному скрипту есть $_SERVER[HTTP_COOKIE] оттуда вытаскиваем PHPSESSID и через session_id применяем его на серверной стороне, а что с этим можно соорудить решайте сами 😉
Скажу лишь то что данный сервер websockets очень удобная штука так как и https и http работает на ура =)
надеюсь вам было интересно !
с уважением всегда ваш Taras.Kramarets aka ~NiX~

Интеграция amocrm asterisk 1.8-13 проблемы не всплывает карточка

Здравствуйте товарищи !
Вашему вниманию хочу предложить свои услуги по инеграции asterisk и amocrm версия для меня не играет роли интегрирую в лучшем виде 😉

Так как amocrm довольно популярна но множество людей не могут решить проблемы которые возникают в ходе работы я помогу но понятное дело за денежное вознаграждение в сумме 40 у.е. Кого заинтересовало данное предложение милости прошу писать на taras@kramarets.net так же могу запустить websockets+webrtc телефоны с вплывающим окном для удобства пользования, окно всплывает из любого места главное что бы был открыт сам телефон.
Стоимость реализации с веб телефоном нового поколения сума 80 у.е. сюда входит настройка Astetisk,FreePBX,Freeswitch,Kamailio для работы websockets,webrtc если же нужна доп настройка обсуждаем дополнительно по задачам/стоимости.

Гарантия качества и результата !

Другие мои услуги можете посмотреть тут

Как правильно создать свой видео портал часть 1

Здравствуйте !

Сегодня хочу рассказать вам о том что сейчас интересует многих как же организовать собственный видео портал, во первых железо, во вторых тип этого самого видео, в третьих стриминг о легальности контента я думаю не имеет смысла говорить )

1) О hardware :

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

2) Тип видео

В чем же разница спросите вы ?

А разница есть и имеет место быть mp4 более грузит машинку но вы скажете качество лучше, да тут я соглашусь без лишних слов ибо так и есть, а вот например flv я не буду пересчитывать его плюсы мне достаточно будет от вас услышать фразу он больше весит …) и на этом данный спор зайдет в тупик … хотя да весь мир использует уже mp4 … выбор все таки останется за вами что использовать 😉

3) Как будет лучше с рейдом или без ?

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

4) Будут ли воровать ссылки ?

По началу пока ваш портал не будет иметь много видео файлов воровать будет не интересно но когда у вас появится много материала … тут придет и «лишняя» нагрузка в виде  тех товарищей для которых чужой труд и деньги вложенные в него ничего не значат …

То есть одного дня вы заметите как нагрузка на ваш сервер резко выросла … да это может быть просто популярность сайта и много народу начало интересоваться вашим порталом но такое  бывает редко чаще просто воруют ссылки и все на этом …

Что сделать что бы защитить себя делаем защиту её можно поднять разными методами но самый хороший из них как мне кажется путем сервера nginx у него есть модуль для проверки защищенных ссылок.

5)  Сколько нужно трафика на 1го клиента …

тут все будет зависеть от типа видео и его качества чем выше качество тем больше используемая им полоса в реалиях на клиента в среднем надо 1 ~ 1,5 Мбита да да вы не ошиблись на 1000 онлайн пользователей уйдет в среднем от 1000 Мбит/c  до 1500Мбит/c.

На этом пока все конец первой части о второй поговорим в следующий раз.

NOC OSS FreeBSD 9.2 установка

Здравствуйте дорогие читатели сегодня пойдет речь об установке NOC OSS на FreeBSD 9.2
Да возможно этот пост больше похож на заметку или на «спасибо КЕП» но пусть будет вдруг кому то поможет не ломать голову как его установить тут описано полностью решение всех граблей итак поехали :

1) pkg если у кого он не сконфигурирован то установка не пойдет … как проверить ?) да очень просто
даем команду pkg -vv если не видим ни единого репозитория то нужно сделать так :

mkdir -p /usr/local/etc/pkg/repos
vi /usr/local/etc/pkg/repos/FreeBSD.conf
и в этот файл положить следующие :
FreeBSD: {
url: «pkg+http://pkg.FreeBSD.org/${ABI}/latest»,
mirror_type: «srv»,
enabled: yes
}
После стандартно выход из vi с сохранением описывать не буду 😉

Проверяем pkg -vv
нас интересует сам конец :
Repositories:
FreeBSD: {
url : «pkg+http://pkg.FreeBSD.org/FreeBSD:9:amd64/latest»,
enabled : yes,
mirror_type : «SRV»
}

если все так переходим к шагу 2 если нет то читаем все сначало и смотрим что и где пропустили…

2)Даем команду pkg update

3) после выполняем команду которая дана нам на сайте NOC OSS fetch -o- http://cdn.nocproject.org/bs/FreeBSD-9.2.txt | sh | tee /tmp/install.log

и получаем граблями по лбу 😉 точнее это не совсем грабли, а можно сказать фича или подводный камень ))
Выглядит это так :
Installing postgis-2.0.2_4
Updating FreeBSD repository catalogue…
FreeBSD repository is up-to-date.
All repositories are up-to-date.
pkg: No packages available to install matching ‘postgis-2.0.2_4’ have been found in the repositories
sh: Failed to install: postgis-2.0.2_4
Terminating

в чём же дело ?) тут все банально фрюха не может найти пакет с таким именем … и что же делать ?)
а делать примерно следующие :
fetch http://cdn.nocproject.org/bs/FreeBSD-9.2.txt
дальше редактируем файл FreeBSD-9.2.txt любым редактором мне нравиться vi :
##
## Install base packages
##
info «Installing system packages»
install_pkg postgresql90-server
install_pkg postgis-2.0.2_4
install_pkg mongodb
install_pkg py27-virtualenv
install_pkg mercurial
install_pkg gmp
install_pkg libsmi
install_pkg libffi
install_pkg cairo
install_pkg nginx
находим такие строки и приводим их к следующему виду :

##
## Install base packages
##
info «Installing system packages»
install_pkg postgresql93-server
install_pkg postgis20
install_pkg mongodb
install_pkg py27-virtualenv
install_pkg mercurial
install_pkg gmp
install_pkg libsmi
install_pkg libffi
install_pkg cairo
install_pkg nginx

после сохраняем и запускам теперь уже такой командой :

sh FreeBSD-9.2.txt

ждем и получаем очередные грабли куда ж без них то 😉

4556 files updated, 0 files merged, 0 files removed, 0 files unresolved
Running bootstrap.sh
cannot open /usr/local/noc/share/vagrant/x86_64/FreeBSD/9.2/bootstrap.sh: No such file or directory

этого файла у меня почему то не оказалось потому стал искать и нашел :
/usr/local/noc/share/vagrant/x86_64/FreeBSD/9.1/bootstrap.sh
его нам нужно исправить заменить пользователя postgres на pgsql иначе установка не пойдет :
вот эту строку :
su — postgres -c «psql noc»
изменить на эту :
su — pgsql -c «psql noc»
после сохранения : sh /usr/local/noc/share/vagrant/x86_64/FreeBSD/9.1/bootstrap.sh
все проходит успешно )) теперь заходим http://xx.yy.yy.yy/
получаем окно с приглашением в нок ) логин и пароль одинаковые admin admin

enjoy ))
Ваш боевой товарищ Taras Kramarets aka ~NiX~

Товарищи при копировании статьи пожалуйста указывайте источник ! уважайте чужой труд !

ffmpeg захват rtmp

Здравствуйте товарищи !
Сегодня речь пойдет о ffmpeg и захвате rtmp потока.
ffmpeg чудесный демон для транскодинга,захвата и передачи потока в файл или же в сеть в рамках данной статьи будет представлено несколько вариантов в частности захват rtmp и отдача данного потока в сеть(multicast)
так же рассмотрим вариант с записью в файл и транскодингом с мелкими объяснениями что к чему.

ffmpeg -d -re -i ‘rtmp://xx.xx.xx.xx:1935/live/ams live=1’ -q:v 1 -f mpegts udp://233.169.0.8:1234 &

Данная команда захватит поток с адреса rtmp://xx.xx.xx.xx:1935/live/ams но теперь внимание для того что бы поток начал проигрываться если этот поток не видео, а живая трансляция нужно добавить ключ live=1 иначе кина не будет 😉

ключ -q:v 1 указывает ffmpeg качество передаваемой картинки оно может быть от 1 до 31 чем меньше значение тем лучше качество чем больше значение тем качество хуже ключ -f mpegts указывает в каком формате отдаем данный потока в источник в данном случае udp://233.169.0.8:1234 это мультикаст адрес для данного потока.
ключ -i указывает ffmpeg на источник потока это может быть файл мультикаст группа rtmp трансляция либо же просто видео файл с опереденного url.

Теперь рассмотрим тоже самое но только для файла :

ffmpeg -d -re -i ‘rtmp://xx.xx.xx.xx:1935/live/ams live=1’ -q:v 1 -f flv out.flv &

все как и указано выше кроме ключ -f указывает на формат flv и out.flv указывает на файл куда складывать данный поток.

изменение ключа -f mpegts или -f flv и есть транскодинг 😉

Вот и все пользуйтесь на здоровье =)