Jump to content
SpravkaCRM.ru - Ваш справочник по CRM

Search the Community

Showing results for tags 'live'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Перевод официального мануала SuiteCRM
  • Обучающие статьи о SuiteCRM
    • Для программиста
  • Доводим напильником SuiteCRM
  • Расширения для SuiteCRM
    • Патчи с исправлениями ошибок в SuiteCRM
  • Программист за работой
  • Диалоги о SuiteCRM

Categories

  • Records
  • CRM-система для застройщика
    • Manual
  • CRM-система для кредитного брокера
  • CRM for Programmer
  • CRM-система для салонов красоты
    • Руководство

Forums

  • SugarCRM/SuiteCRM
    • Все вопросы пока сюда
    • Заметки по ходу разработки
    • Нам пишут
    • Работа
  • CRMHosting.io
    • SuiteCRM последней версии
    • CRM для продажи пиццы/суши/ролл
    • CRM для Застройщика
    • CRM для Кредитного брокера
    • CRM для Салонов красоты
    • CRM для Разработчика ПО / Веб-студии
  • Другие CRM-системы
    • AmoCRM
    • Bitrix24
    • BPM Online
    • Прочие CRM
  • Всего по немногу
    • Программисту
    • Arduino
    • Без систематики

Categories

  • Модули SuiteCRM/SuiteCRM
  • Manuals

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 3 results

  1. В этом видео я чиню модуль E-mail: Когда приходит письмо от клиента, который есть в базе, автоматически не добавляются связи между письмом и соответствующим контактом и конрагентом.
  2. Захотел я тут сделать онлай-трансляцию своих питомцев: четыре дегусятины в клетке. Есть целый мега-проект в голове как я там у них все автоматизирую и сделаю интерактиным с управлением через сайт. В свое время успел накупить разных клевых девайсиков и сенсоров пока активно ардуиной болел. Но начать всеже надо прежде всего с видео-трансляции зверьков. Вот как у меня получилось наладить эту видео-трансляцию я тут и расскажу. В начилии у меня есть: клетка с дегусами Raspberry Pi 2 родная камера к ней Хочу добиться: Чтобы включив камеру изображение шло на сайт, а там раздавалось всем желающим Сразу оговорюсь, что я хотел организовать именно трансляцию видео-потока на сайт. Хоть у меня дома и хороший интернет (безлимитный 100мегабитный шнурок от прова), но я хочу со временем все это превратить в сервис, и если народ начнет забирать видео-трафик непосредственно у меня из дома - никакого канала не хватит. Таким образом я должен отдавать один поток на сервер в интернете, а на сервере будет висеть сайт, и он уже будет со своих страниц через плеер, встроенный в HTML-страницу, отображать контент. Идея с трансляцией зверьков у меня в мозгу блуждает уже давно. В свое время я пытался настроить подобную схему при помощи и Wowza и Red5 и продукта от Adobe. Но видимо был не настолько мотивирован этой идеей, чтобы разобраться во всех заморочках настройки этих монстров. НУ И СЛАВА БОГУ! Теперь у меня получилось все намного проще, быстрее и дешевле! Итак, что же нам понадобиться: Настроить Raspberry Pi 2 - включить в настройках камеру, установить ffmpeg и добавить в систему кодек H264 Настроить сервер, висящий в интернете - установить на него nginx + nginx-rtmp-module + добавить на страницу плеер и пихать в него RTMP-поток Наслаждаться трансляцией камеры на сайте А теперь давайте поподробней. Настройка Raspberry Pi 2 Я тут не буду касаться темы как установить OC на вашу Raspberry Pi 2. Пускай это останется за занавесом. Информации об этом в интернете в общем то достаточно много. Сначало включаем камеру командой: # raspi-config В результате вываливается окошко с настройками: Нужно выбрать "Enable Camera" и в открывшемся окне выбрать кнопку Enable. Потом выбираем внизу справа кнопку <Finish> и соглашаемся с тем, что система будет перезагружена. После перезагрузки малинки опять заходим в нее. По идее наша камера теперь может быть использована. Далее нам надо поставить на Raspberry Pi 2 ffmpeg. Это очень крутая консольная программа для всевозможного захвата и обработки видео и аудио: там можно и кодировать в разные форматы, и разделять и соединять обратно видео- и аудио-дорожки, и нарезать видео-ролики, и вставлять в них разные вставки и вообще очень много чего. Все это есть в интернете. Можно поставить ffmpeg командой: # apt-get install ffmpeg Но у меня этот способ почему то не пошел. Уже не помню почему. Я поставил ffmpeg из исходников. Для этого переходим в каталог с исходниками: # cd /usr/src/ Закачиваем последнюю версию через GIT: git clone git://source.ffmpeg.org/ffmpeg.git Если у вас вдруг не установлен git, то ставим его командой # apt-get install git После успешного скачивания исходников переходим в их папку: # cd ffmpeg/ И запускаем конфигурирование сборки: # ./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree --enable-libaacplus После этой команды я получил сообщение о ошибки что то типа: У вас нет кодека x264. В общем пришлось ставить отдельно еще этот кодек. Для этого качаем архив: # wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2 Дальше распаковываем скачанный архив: # tar xjvf last_x264.tar.bz2 Переходим внутрь распакованного архива: # cd x264-snapshot* Устанавливаем кодеки: # ./configure --enable-static --disable-opencl а потом # make install Возвращаемся обратно в папку с ffmpeg # cd .. Еще раз пытаемся установить ffmpeg из исходников: # ./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree # make # make install Все должно пройти хорошо и без ошибок. По идее на этом настройку Raspberry Pi 2 можно считать выполненной. Я, когда эксперементировал, сначало подключил поток с камеры малинки к трансляции на Yutube. Я тут на днях опробовал сервис Youtube по созданию трансляций и немного помучался с кодерами. Ну тоесть там ситуация, что на самом канале Youtube нужно создать трансляцию, а в поле "Тип трансляции" выбрать "Особая": Далее после сохранения в вкладке "Настройка трансляции" в поле "Максимальный битрейт видеокодера" указываем качество и снизу появляется возможность указать Настройка видеокодера. Можно или выбрать один из предустановленных видеокодеров (Wirecast или FMLE), а можно и выбрать "Другие видеокодеры". Тогда Youtube показывает нам адрес, на который надо направлять наш поток с камеры: На основании этой картинки я могу сказать, что если я из камеры направлю RTMP поток по адресу: rtmp://a.rtmp.youtube.com/live2/ crmhostingru-blablabla, то я смогу запустить вещание на Youtube прямо из своей камеры на Raspberry Pi 2. И это реально получилось! Для этого создаем трансляцию, пробегаемся по всем настройкам пока у нас на странице не попросят уже пустить наконец то видео-поток и проверить его качество. В этот момент мы включаем видео-поток на малинке вот такой командой: # raspivid -o - -t 0 -vf -hf -fps 30 -b 6000000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/crmhostingru-3710.vf8j-mye7-cpzs-2qcq Тра-да-да-дааа-да-даааа! Youtube пишет, что качество норм и готов начать трансляцию: Вот пока писал этот текст еще раз запустил: Все! Трансляция идет. Дегу крутят колесо, мегабайты бесполезной фигни заполняют кластеры гугля! Хотя ему не привыкать... Все бы здорово, но где то у Youtube написано, что трансляция не может идти больше определенного количества часов. По моему 8, но поправьте, если не так. Я же хотел 27/7. И Youtube, не смотря на свою привлекательность с точки зрения простоты настройки и охвата аудитории, мне не подходит. Я начал искать видео-сервисы где я могу захоститься с своим видео-потоком: бесплатно или не сильно платно. Ничего толкового так и не нашел. Может плохо искал? Мне нравится сервис Ivideon. Я о нем узнал через просмотр вебкамеры с видом на горки, на которые я езжу периодически кататься на сноуборде: http://ryazan-gora.ru/complex#video-content Все здорово: и сервис приятный и удобный, и бесплатно камеру можно транслировать. Только вот с Raspberry Pi 2 Ivideon не дружит, о чем они не единожды упомянули на своем форуме. Пичаль... Но в процессе поиска я нашел серию замечательных статей на хабре о таком чудесном дополнении для nginx как nginx-rtmp-module. Почитать можно тут, тут и тут. Получается, что все, что мне нужно, это сервак с настроенным nginx! И не каких тебе, Wowza и прочих монстров мира стримминга! По этому идем дальше: Настройка nginx-rtmp-module на выделенном сервере Пару слов о сервере. Когда вышел закон о хранении персональных данных мне, как наверное и большинству других владельцев серверов, пришлось переехать с дешевых европейских на их аналоги (или чуть более слабые, чтобы по деньгам не получилось перерасхода) в РФ. Я, когда озадачился этой темой, поспрашивал мнения своих более опытных коллег в этом вопросе. И многие посоветовали использовать сервис flops.ru. Если честно, то я не сколько не пожалел о своем выборе и до сих пор пользуюсь их услугами и всем своим клиентам рекомендую, если кто ищет куда пристроить свою CRM-систему. Дело в том, что эти ребята предоставляют очень удобную возможность для разворачивания серверов в облаке. Под облаком тут понимается видимо выделение машины не в виде железки или виртуального пространства внутри физического сервера, а выделение пространства в целом большом каскаде серверов, соединенных в один мега-кластер. Я не являюсь спецом по облачным технологиям и не смогу объяснить технически что же у них за сервис такой. Про это они писали на хабре. Например тут. Но могу немного рассказать с точки зрения пользователя: Хотите вы провести нечеловеческие эксперименты над своим боевым сервером, установить что то на него, какой то модуль или плагин или ПО, но не знаете, рухнет у вас там все после этого или жить будет. Вы просто заходите в панель управления и КЛОНИРУЕТЕ свой сервер. Система создает вам точную копию вашего сервака со всеми файлам и настройками. Просто он будет доступен под другим IP. Вы проводите свои тесты на нем, что угодно делаете. Боевой то остался в виде оригинала и никак не страдает. Потом вы все протестировали, результат вас устроил (а может и нет). И вы можете уже по отработанному сценарию делать изменения на боевом не боясь все угробить (на клоне то у вас все вышло!). А клон можно удалить. При этом вы переплатите за второй сервер только за то время, пока он у вас был. Уложились в пару часов, значит и заплатите только за пару часов. Я же для реализации того, о чем тут пишу, создал просто пустой сервер с ОС Ubuntu последней. Новые сервера создаются быстро! Реально быстро. С момента нажатия кнопки "Создать" до момента, когда тебя пускают по ssh проходит порядка 10-15 секунд! СЕКУНД! КАРЛ! Пока тестировал я их создал и потом удалил наверное штук 10: мне показалось это проще - что то не получается установить - чем искать где что успело криво установиться и удалять это - проще удаляем сервер и создаем новый! делов на полминуты! В общем итак: у нас есть чистая свеже-установленная Ubuntu и ssh-root-доступ в нее. В итоге нам нужно установить на нее nginx с поддержкой модуля nginx-rtmp-module. По идее nginx можно установить командой # apt-get install nginx Но как туда запихать поддержку nginx-rtmp-module я так и не нашел. По этому решил ставить nginx из исходников. Сначало ставим git: # apt-get install git После установки GIT-а переходим в каталог с исходниками: # cd /usr/src/ и качаем последнюю версию nginx из git-репозитория: # git clone git://anonscm.debian.org/collab-maint/nginx.git после скачивания у нас появится папка nginx, в которую мы и переходим: # cd nginx/ далее в эту папку мы качаем исходники nginx-rtmp-module из его git-репозитория: # git clone https://github.com/arut/nginx-rtmp-module.git После окончания закачки в нас должна образоваться папка nginx-rtmp-module. Далее нужно установить несколько модулей, которые будут требоваться при установке nginx. Может кто то подправит и не все они нужны, но я делал так: # apt-get install dpkg-dev # apt-get install openssl # apt-get install libssl-dev # apt-get install libperl-dev Далее устанавливаем nginx с поддержкой nginx-rtmp-module: # ./configure --add-module=/usr/src/nginx/nginx-rtmp-module --with-http_ssl_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-stream --with-stream_ssl_module --with-threads --without-http_rewrite_module # make # make install По идее все должно установиться. Так же хочу обратить ваше внимание, что в процессе выполнения установки там где то будет указан список путей где будут лежать те или иные важные для nginx файлы. У меня это выглядело вот так: nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx modules path: "/usr/local/nginx/modules" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp" Я скопировал этот блок, чтобы потом использовать данные из него при настройке nginx. Для меня было неожиданностью, что после установки nginx из исходников не появился автоматом такой привычный уже и нужный файл как /etc/init.d/nginx. Напомню, что запуск, перезапуск и остановку nginx удобно производить при помощи команд # /etc/init.d/nginx start # /etc/init.d/nginx restart # /etc/init.d/nginx stop /etc/init.d/nginx - это по факту текстовой файл с bash-командами. Мы можем самостоятельно создать такой файл и указать ему права на выполнение. Для этого я создал новый файл: nano /etc/init.d/nginx А в качестве содержимого вставил в него то, что находится в этом файле на одном из моих рабочих серверов: # nginx path prefix: "/usr/local/nginx" # nginx binary file: "/usr/local/nginx/sbin/nginx" # nginx modules path: "/usr/local/nginx/modules" # nginx configuration prefix: "/usr/local/nginx/conf" # nginx configuration file: "/usr/local/nginx/conf/nginx.conf" # nginx pid file: "/usr/local/nginx/logs/nginx.pid" # nginx error log file: "/usr/local/nginx/logs/error.log" # nginx http access log file: "/usr/local/nginx/logs/access.log" # nginx http client request body temporary files: "client_body_temp" # nginx http proxy temporary files: "proxy_temp" # nginx http fastcgi temporary files: "fastcgi_temp" # nginx http uwsgi temporary files: "uwsgi_temp" # nginx http scgi temporary files: "scgi_temp" #!/bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $local_fs $remote_fs $network $syslog $named # Required-Stop: $local_fs $remote_fs $network $syslog $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin/nginx:/usr/local/nginx/sbin:/usr/local/nginx DAEMON=/usr/local/nginx/sbin/nginx NAME=nginx DESC=nginx # Include nginx defaults if available if [ -r /etc/default/nginx ]; then . /etc/default/nginx fi STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/5/KILL/5}" test -x $DAEMON || exit 0 . /lib/init/vars.sh . /lib/lsb/init-functions # Try to extract nginx pidfile PID=$(cat /usr/local/nginx/conf/nginx.conf | grep -Ev '^\s*#' | awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1) if [ -z "$PID" ] then PID=/run/nginx.pid fi # Check if the ULIMIT is set in /etc/default/nginx if [ -n "$ULIMIT" ]; then # Set the ulimits ulimit $ULIMIT fi # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON -- \ $DAEMON_OPTS 2>/dev/null \ || return 2 } test_nginx_config() { $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1 } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PID --name $NAME RETVAL="$?" sleep 1 return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { start-stop-daemon --stop --signal HUP --quiet --pidfile $PID --name $NAME return 0 } # # Rotate log files # do_rotate() { start-stop-daemon --stop --signal USR1 --quiet --pidfile $PID --name $NAME return 0 } # # Online upgrade nginx executable # # "Upgrading Executable on the Fly" # http://nginx.org/en/docs/control.html # do_upgrade() { # Return # 0 if nginx has been successfully upgraded # 1 if nginx is not running # 2 if the pid files were not created on time # 3 if the old master could not be killed if start-stop-daemon --stop --signal USR2 --quiet --pidfile $PID --name $NAME; then # Wait for both old and new master to write their pid file while [ ! -s "${PID}.oldbin" ] || [ ! -s "${PID}" ]; do cnt=`expr $cnt + 1` if [ $cnt -gt 10 ]; then return 2 fi sleep 1 done # Everything is ready, gracefully stop the old master if start-stop-daemon --stop --signal QUIT --quiet --pidfile "${PID}.oldbin" --name $NAME; then return 0 else return 3 fi else return 1 fi } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart) log_daemon_msg "Restarting $DESC" "$NAME" # Check configuration before stopping nginx if ! test_nginx_config; then log_end_msg 1 # Configuration error exit 0 fi do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; reload|force-reload) log_daemon_msg "Reloading $DESC configuration" "$NAME" # Check configuration before reload nginx # # This is not entirely correct since the on-disk nginx binary # may differ from the in-memory one, but that's not common. # We prefer to check the configuration and return an error # to the administrator. if ! test_nginx_config; then log_end_msg 1 # Configuration error exit 0 fi do_reload log_end_msg $? ;; configtest|testconfig) log_daemon_msg "Testing $DESC configuration" test_nginx_config log_end_msg $? ;; status) status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $? ;; upgrade) log_daemon_msg "Upgrading binary" "$NAME" do_upgrade log_end_msg 0 ;; rotate) log_daemon_msg "Re-opening $DESC log files" "$NAME" do_rotate log_end_msg $? ;; *) echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}" >&2 exit 3 ;; esac : Это то, что получилось в результате подстановки в нужные места путей до файлов, которые мы скопировалии ранее. Кстати эти все пути я и указал вверху файла в комментариях. Делаем файл исполняемым: # chmod +x /etc/init.d/nginx Теперь мы можем запускать/останавливать nginx привычным способом. Надо еще добавить вызов этого скрипта из автозагрузки. Но я этого не делал, потому описывать тут не буду. Если нужно, то информацию о этом можно найти в интернете, ее там много. Из настроек нам осталось лишь настроить nginx на прием RTMP-потока. Для этого ищем конфигурационный файл nginx. Как правило по умолчанию лежит конфиг лежит в /etc/nginx/nging.conf. Но при установке nginx из исходников папка /etc/nginx вообще создана не была! По этому где же находится файл с конфигурацией мы можем посмотреть в нашем ранее скопированном блоке с путями, про который я говорил. В моем случае это: nginx configuration file: "/usr/local/nginx/conf/nginx.conf" Открываю этот файл на редактированию и добавляю в него блок rtmp { server { listen 1935; application myapp { live on; } } } Этот блок распологаю прямо НАД блоком http, чтобы получилось вот так: #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } rtmp { server { listen 1935; application myapp { live on; } } } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; Хотя порядок следования возможно и не важен... После этого запускаем nginx: # /etc/init.d/nginx start Проверить работоспособность можно в браузере вызвав IP-адрес сервера. Если все нормально, то сервер отдаст примерно следующее: Это говорит о том, что у нас все хорошо и все работает. Давайте перейдем к финальной части нашего повествования: Установка плеера JWPlayer на сайте и начало трансляции с камеры Raspberry Pi 2 Папка, которая является DOCUMENT_ROOT для нашего сервера, находится тут: # cd /usr/local/nginx/html/ Файл index.html отдает ту надпись, которую вы видите на картинке сверху (Welcome to nginx!). Создание красивого сайта с менюхами и прочим оставим за рамками этой статьи. Все, что мне нужно было, это увидеть свою клетку с дегусятинами на этой странице с приветствием. Я качаю JWPlayer пихаю его в папку /usr/local/nginx/html/jwplayer. Кстати, поиск JWPlayer-а тоже был какой то неоднозначный. Я пытался найти где его можно скачать на официальном сайте, но сходу что то не разобрался. А сидеть и долго и упорно тыркать их сайт у меня уже не было терпения (на финальную прямую вышел как никак )) ). По этому прошерстив кучу ссылок на всякие летитбит и прочие сайты-качалки скачал-таки какую то версию в rar-архиве, который распаковал и перенес в нужную мне папку на сервере. Какая это была ссылка я уже не помню. Если надо будет - поищу. Все, файлы JWPlayer есть на сайте. Теперь осталось его встроить на страницу отредактировав файл index.html и настроить на прием данных: <p><em>Thank you for using nginx.</em></p> <script type="text/javascript" src="/jwplayer/jwplayer.js"></script> <div id="container">Loading the player ...</div> <script type="text/javascript"> jwplayer("container").setup({ file: "rtmp://176.112.197.199/myapp/mystream", provider: "rtmp", width: 640, height: 480, rtmp: { bufferlength: 1 } }); </script> Как вы видите я вставил код прям после слов "Thank you for using nginx." Так же обращаю ваше внимание на переменную file. Там указан путь до сервера. myapp - это то, что указали в конфиге nginx.conf, а mystream видимо может служить обозначением той или иной трансляции. Нам осталось лишь запустить трансляцию с видео-камеры на Raspberry Pi отправив поток по адресу, указанному в нашем параметре file. Для этого заходим в малинку и в командной строке выполняем: # raspivid -o - -t 0 -vf -hf -fps 30 -b 6000000 -rot 90 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -strict experimental -f flv rtmp://176.112.197.199/myapp/mystream Начнется отдаваться поток по указанному адресу. При этом будет видно примерно следующее: ffmpeg version N-78371-g1354603 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 4.9.2 (Raspbian 4.9.2-10) configuration: --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree libavutil 55. 17.100 / 55. 17.100 libavcodec 57. 24.102 / 57. 24.102 libavformat 57. 25.100 / 57. 25.100 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 31.100 / 6. 31.100 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100 Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, s16le, from '/dev/zero': Duration: N/A, bitrate: 1411 kb/s Stream #0:0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s Input #1, h264, from 'pipe:': Duration: N/A, bitrate: N/A Stream #1:0: Video: h264 (High), yuv420p, 1920x1080, 25 fps, 25 tbr, 1200k tbn, 50 tbc Output #0, flv, to 'rtmp://176.112.197.199/myapp/mystream': Metadata: encoder : Lavf57.25.100 Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 1920x1080, q=2-31, 25 fps, 25 tbr, 1k tbn, 1200k tbc Stream #0:1: Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s Metadata: encoder : Lavc57.24.102 aac Stream mapping: Stream #1:0 -> #0:0 (copy) Stream #0:0 -> #0:1 (pcm_s16le (native) -> aac (native)) [flv @ 0x29749f0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly [h264 @ 0x2950450] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8) frame= 1010 fps= 25 q=-1.0 size= 24692kB time=00:00:40.37 bitrate=5009.5kbits/s speed= 1x Обновляем страничку на нашем сервере. Видим окошко с плеером и жмем кнопку в нем на начало трансляции: УРААА!!! Оно работает!!! Правда я заметил, что задержка все равно есть! Порядка 6-7 секунд. Неприятно, но не критично. Надеюсь я еще найду способ ее уменьшить. Но это все равно однозначно лучше, чем задержка Youtube порядка 40 секунд или даже больше! Вот такой вот получился отчет о подключении видео с Raspberry Pi 2 на сайт. В планах добавить еще камер, подсветки, разных штук типа замера скорости вращения колеса, автокормилки ништячками и прочего. Но о этом напишу в другой раз...
  3. Клиент заказал разработку канбан (https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BD%D0%B1%D0%B0%D0%BD)-доски для того, чтобы на ней можно было распределять по статусам Задачи, Проектные задачи и Обращения. Работа выполнялась в нескольких частях: Первая часть: Вторая часть: Третья часть:
×
×
  • Create New...