{imgicourl}{zamok}
<< предыдущая заметкаследующая заметка >>
25 января 2021
LiveStream Raspberry+ffmpeg+nginx

Знакомые попросили сделать видеотрансляцию для промышленного станка с температурой, наложенной на изображение. За два дня узнал много интересного и научился делать трансляции. Моделька смотрит из окна (жми на кнопки).

Для тех, кому это может быть полезно (а в основном для себя, чтобы позже мог зайти в этот пост), я подробно расскажу, как настроить Raspberry, собрать трансляционный nginx на сервере, как сделать правильные настройки ffmpeg, как подключить датчик температуры и вообще оборудовать всё полезными скриптами, чтобы само жило и не висло.

Одновременно у меня есть и вопросы к вам. В основном вопрос почему у меня не заработала встроенная Raspberry-камера, ну и может кто-то даст совет по организации интернет-радио, раз уж мы увлеклись трансляциями.

Итак, для начала смотрим видео:

Две кнопки — потому что есть два разных формата веб-вещания, один для для мобильных устройств и Айфонов HLS, другой — для стационарных компьютеров DASH (Firefox, например, отказывается показывать HLS). Андроид показывает оба варианта, но HLS плавнее. Поскольку есть JS-плеер, который поддерживает HLS даже там, где его нет, то формат DASH предлагаю не рассматривать вовсе, дабы не плодить сущностей и машинного времени.

Ну а теперь кому интересно — расскажу по порядку, как я это настраивал. Там несложно.

Raspberry

Берется Raspberry 3, хотя лучше бы 4. Берется сама простая прошивка Raspberry Pi OS Lite, накатывается на карточку:

sudo dd if=Raspberry.iso of=/dev/mmcblk0 status=progress

Логин «pi», пароль «raspberry». При первом включении потребуется дисплей HDMI или телевизор, иначе не настроить. Это вообще праздник, потому что мне Юра принес кучу Raspberry с выжженными дисплейными портами (для наших задач не нужно), пришлось выбрать рабочую и согнать отца с телевизора на пять минут, у меня дисплей не поддерживает HDMI. Настраивается в консоли через sudo raspi-config, а именно:

1. Настраиваем WiFi (я подключил LAN, но пусть будет): «1 System Options» -> «S1 Wireless LAN»

2. Идем в «3 Interface Options», чтобы включить доступ по SSH «P2 SSH», интерфейс датчика если собираемся его подключить «P7 1-Wire» и интерфейс камеры, если она есть «P1 Camera»

3. В конце обязательно расширяем систему на всю флешку, потом перезагрузимся: «6 Advanced Options» -> «A1 Expand Filesystem»

Настройка закончена.

nginx

Для веб-ретрансляций удобнее всего использовать nginx на любом принадлежащем вам сервере, лучше большом, мощном и далёком. Как это сделать?

Выкиньте нахуй и навсегда Apache2 «sudo apt remove apache2» и поставьте nginx «sudo apt install nginx». Это вообще давно пора было всем сделать. Но сам по себе из коробки nginx работать как видеострим не будет, его надо пересобрать самому с дополнительными опциями и модулем. Поэтому поставив штатный со всей обвязкой, уберите сам файл «sudo mv /usr/sbin/nginx /usr/sbin/nginx.old» и займитесь сборкой новой версии:

# Устанавливаем всё, что понадобится для сборки:

sudo apt-get install libpcre3 libpcre3-dev libssl-dev

# Качаем последние исходники nginx, распаковываем:

wget http://nginx.org/download/nginx-1.17.8.tar.gz

# Качаем модуль трансляции, распаковываем рядом:

wget https://github.com/arut/nginx-rtmp-module/zipball/master -O nginx-rtmp-module-master.zip
unzip nginx-rtmp-module-master.zip -d nginx-rtmp-module-master

# заходим в папку исходников nginx, запускаем конфигурацию, но специальную:

cd nginx
./configure --prefix=/usr --add-module=../nginx-rtmp-module-master/ \
--pid-path=/var/run/nginx.pid --conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log \
--with-http_ssl_module

# собираем и устанавливаем

make

sudo make install

sudo cp ../nginx-rtmp-module-master/stat.xsl /etc/nginx/

# запускаем

sudo service nginx start

Теперь нужно прописать правильные секции: sudo mcedit /etc/nginx/nginx.conf

Начинаться он должен так:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

rtmp_auto_push on;

rtmp {
    record all;
    live on;
    server {
        listen 1935;
        application streamer {
            hls on;
            hls_path /tmp/hls;
            hls_fragment 5s;
        }
    }
}

[...]

Мы завели канал по имени streamer, где будем создавать любое количество нужных нам трансляций. И включили HLS. Чтобы дать браузерам посетителей доступ к файлам трансляций в /tmp, надо пойти уже в другой файл — файл описания сайта /etc/nginx/sites-enabled/default.conf и добавить туда доступ к /tmp/hls внутрь секции server:

server {
listen 80;
    listen [::]:80 ipv6only=on default_server;
    server_name lleo.me *.lleo.me;
    index index.html index.htm index.php;

    location /hls {
        root /tmp;
    }

[...]

Настройка закончена.

ffmpeg

Трансляцию готовим с помощью утилиты ffmpeg. Она умеет делать всё с видео и аудио. В нашей задаче:

1. Брать живое видео с камеры

2. Наложить звук из файла mp3, зациклив его (трансляция без звуковой дорожки обычно нигде не работает)

3. Наложить на изображение титры из файла text.txt, указав, что он обновляемый (мы параллельно будем его ежесекундно обновлять другими стредствами)

4. Заливать полученное на трансляционный сервер, которым может быть Youtube или наш удаленный nginx.

Создаем на Raspberry скрипт трансляции /home/pi/lleo/streamGon.sh

#!/bin/sh

while true ; do

/usr/bin/ffmpeg -f video4linux2 -i /dev/video0 \
\
-filter_complex "amovie='/home/pi/lleo/sea.mp3':loop=999,asetpts=N/SR/TB,\
aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.8" \
\
-vf drawtext="fontfile=OpenSans.ttf:textfile='/tmp/text.txt':reload=1:fontsize=28:\
fontcolor=white:borderw=3:bordercolor=black:x=10:y=10" \
\
-vcodec h264_omx -preset ultrafast \
-c:v h264_omx -x264opts "keyint=24:min-keyint=24:no-scenecut" -r 24 \
-bf 1 -b_strategy 0 -sc_threshold 0 -pix_fmt yuv420p \
-c:a aac -b:a 128k \
\
-f flv rtmp://lleo.me/streamer/moe_okno

done
}

Обратите внимание, что мы используем на Raspberry аппаратный кодек h264_omx вместо классического libx264, что снижает нам загрузку процессора раз в пять (спасибо Кириллу за совет).

Вспомогательные скрипты

Отдельно готовим титры — я написал демона /home/pi/lleo/temperTextStart.php для постоянного обновления файла титров /tmp/text.txt

#!/usr/bin/php

<?php

exec("/usr/bin/ls /sys/bus/w1/devices",$o);
if(sizeof($o)!=2) die('Error Wire');
$unit=$o[0];

while(1) {
    $T=trim(file_get_contents("/sys/bus/w1/devices/".$unit."/temperature"));
    $T=floor(1*$T/10)/100;
    $T2=exec("/usr/bin/vcgencmd measure_temp");
    $T2=preg_replace("/[^\d\.]+/s",'',$T2);
    $Z=exec("/usr/bin/cat /proc/loadavg");
    list($Z,)=explode(' ',$Z,2);
    $Z=floor($Z*100/2.2);
    $D=date("Y-m-d H:i:s");
    $o="$D\nДатчик: ${T}°C\nПроцессор: ${T2}°C\nЗагрузка: ${Z}\%";
    file_put_contents("/tmp/text.txt",$o);
    usleep(200000);
}

?>

Чтобы все работало и перезапускалось в случае крэша само, пишу следящего демона демонов /home/pi/lleo/GoneDaemon.sh

#!/bin/bash

фрагмент для остановки «/home/pi/lleo/GoneDaemon.sh stop»
if [ "X${1}" == "Xstop" ] ; then

S=`/usr/bin/ps awuux | /usr/bin/grep [t]emperTextStart.php | /usr/bin/awk '{print $2}'`
echo "--> $S"
if [ "X$S" != "X" ] ; then
    echo "Stop temperTextStart.php: kill -9 $S"
    kill -9 $S
fi

S=`/usr/bin/ps awuux | /usr/bin/grep [s]treamGon.sh | /usr/bin/awk '{print $2}'`
echo "--> $S"
if [ "X$S" != "X" ] ; then
    echo "Stop streamGon.sh: kill -9 $S"
    kill -9 $S
fi

S=`/usr/bin/ps awuux | /usr/bin/grep '/[u]sr/bin/ffmpeg' | /usr/bin/awk '{print $2}'`
echo "--> $S"
if [ "X$S" != "X" ] ; then
    echo "Stop /usr/bin/ffmpeg: kill -9 $S"
    kill -9 $S
fi

exit
fi

#раскомментарить exit
#exit
#--------------------------------------------------

S=`/usr/bin/ps awuux | /usr/bin/grep [t]emperTextStart.php | /usr/bin/awk '{print $2}'`

if [ "X$S" == "X" ] ; then
    /home/pi/lleo/temperTextStart.php &
fi

S=`/usr/bin/ps awuux | /usr/bin/grep [s]treamGon.sh | /usr/bin/awk '{print $2}'`

if [ "X$S" == "X" ] ; then

    S=`/usr/bin/ps awuux | /usr/bin/grep '/[u]sr/bin/ffmpeg' | /usr/bin/awk '{print $2}'`
    if [ "X$S" != "X" ] ; then
        echo "Stop /usr/bin/ffmpeg: kill -9 $S"
        kill -9 $S
    fi

    /home/pi/lleo/streamGon.sh &

fi

И прописываю его в «crontab -e» чтобы работал каждые 5 секунд (с долями минут в кронтабе сложно, поэтому так):

* * * * * for ((i=0;i<12;i++)); do /usr/bin/bash /home/pi/lleo/GoneDaemon.sh & /usr/bin/sleep 5; done

Плеер на сайте

Итак, удаленная Raspberry делает видеопоток и гонит на трансляционный сервер. Тот его разбивает на кусочки для веб-трансляции. Чтобы смотреть на сайте, нужен плеер. Плеера, увы, два — я пока не понял, как сделать один и для десктопов и для мобильных. Для мобильного формата HLS достаточно было бы вставить ссылку на автоматические сознанный заголовок потока:

<!doctype html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
</head>
<body>
<center>
   <video id='video' controls></video>
</center>

<script>
if(Hls.isSupported()) {
    var video = document.getElementById('video');
    var hls = new Hls();
    hls.loadSource('/hls/moe_okno.m3u8');
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() { video.play(); });
}
</script>

</body></html>

Датчик температуры

Датчик температуры подключить к Raspberry проще простого. Называется он DS18B20, стоит копейки. Имеет смысл брать в варианте герметичного шланга. Подключается к трём пинам на плате, но между двумя проводками (сигнальным и +5) надо впаять резистор 4.7 килоом:

Чтобы прочитать датчик температуры, надо найти его на шине как номер устройства:

$ ls /sys/bus/w1/devices
28-011936686716  w1_bus_master1

И можно читать его (будет небольшая задержка):

$ cat /sys/bus/w1/devices/28-011936686716/temperature
3250

Полученное значение температуры делить на 1000 (да, в Москве сегодня за окном +3). Не обольщайтесь, точность у него не тысячные доли градуса, а ± 0.5

Трансляция на Ютуб

Тем же способом можно делать онлайн-трансляцию на Ютуб. Для этого на Ютубе надо выбрать «создать трансляцию» и взять в открывшейся странице личный ключ типа такого: secm-2qtw-qdez-vqfr-263w Далее все то же самое, но трансляционный сервер Ютуба с ключом. Я играл со своего компа с такими настройками кодеков (напоминаю, без звуковой дорожки не заработает):

ffmpeg -f video4linux2 -i /dev/video0 \
-filter_complex "[...]" \
-vf drawtext="[...]" \
-c:v libx264 -shortest -preset ultrafast -crf 24 -g 3\
-f flv rtmp://a.rtmp.youtube.com/live2/secm-2qmw-qdez-vrfr-263w

Что не понравилось: Не нашел способа создавать трансляцию автоматически. Надо копошиться руками на сайте, потом запустить трансляцию, и только тогда она стартует всякий раз c новым URL. При сбое потока длиной секунд в пять — решительно завершится. И тогда надо на сайте создавать руками новую, а одновременно на компе отключать и включать заново поток, что является сигналом нового старта. В этом смысле свой сервер лучше.

Интернет-радио

Любопытно, что при помощи того же ffmpeg и тех же потоков можно сделать, например, интернет-радио:

while true; do
ffmpeg -re -i "`find /r/mp3/ДЕТСКИЕ -type f -name '*.mp3'|sort -R|head -n 1`" -vn -c:a aac -ar 44100 -ac 2 -f flv rtmp://localhost/streamer/radio;
done

Встраивается так же, только тэг AUDIO вместо VIDEO. Я уже было подумал создать поэтически-музыкальную радиостанцию, как мы когда-то хотели с Янгом (Алекс, давай создадим?), но мне пока не понравилась технология. Что мне не понравилось? Глючит, заедает при смене песни. Чисто веб-решение, нет нормального непрерывного mp3-потока. Если кто-то здает, как сделать иначе — скажите.

Проблема с камерой

Вы наверно заметили, что изображение пиздец какое хуевое? Это потому, что была наспех найдена в хламе под диваном помоечная USB-камера двадцатилетней давности. Для Raspberry существует камера-чип на шлейфе в специальный разъем (Raspberry Pi Camera rev. 1.3 камера, 5Мп. OmniVision OV5647), но она у меня загадочным образом НЕ ЗАРАБОТАЛА. Причем, раньше на Raspberry 2, помнится, работала. То ли в камере что-то повредилось (хотя при загрузке системы она два раза моргает своим красным светодиодом), то ли что-то поломали сборщики Raspberry OS последней заливки. Но камера не детектится на всех имеющихся у меня Raspberry:

$ vcgencmd get_camera
supported=1 detected=0

Если кто-то с таким сталкивался, подскажите.

На этом Шехерезада закончила дозволенные речи и отправилась по делам.

PS: Как вы понимаете, камера в этом посте будет работать не всегда, конечно я ее отключу через денек-другой.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Windows Firefox
 Киев
9
0
Firefly
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
---При первом включении потребуется дисплей HDMI или телевизор, иначе не настроить
Достаточно создать пустой файл ssh на FAT32 разделе и SSH будет включен поумолчанию
Linux Ubuntu Firefox
 Москва
1
0
LLeo
О, спасибо.
Linux Firefox
 Северск
1
0
asldlaskjldk
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Автоматически создавать трансляции на YouTube можно, но нужен доступ к API, который нужно получить тоже где-то на сайте Гугла.
Linux Safari Chrome
 Москва
5
0
LLeo
Спасибо, буду знать.

Доступ АПИ у меня был - я планировал автоматом залить свои старые телепередачи. Но забросил это дело из-за копирайтных скандалов, когда Ютую принялся находить рекламные паузы, отбивки и обрезки клипов сетки вещания.

Вообще после того, как Ютуб нашел у меня в ролике про полет на параплане авторскую музыку в шуме ветра... Я сильно сомневаюсь, что надо ему доверять трансляции, особенно локального назначения :)
Linux Safari Chrome
 Москва
0
0
AllaDimm
Аналогичный случай был в нашей деревне https://www.drive2.ru/b/2868378/
Windows Safari Chrome
 Домодедово
1
0
id
Супер! Спасибо!

Еще более огромное спасибо (точнее прямо огроменное) получит тот, кто подскажет, как вышеописанное доработать до совместимости с ONVIF (с тем, чтобы самый обычный NVR увидел бы эту Pi как "обычную IP камеру").
Linux Safari Chrome
 Москва
0
0
LLeo
Я не знаю, что такое NVR, но попробуй поднять nginx на самой Raspberry и получишь поток.
Windows Safari Chrome
 Домодедово
0
0
id
NVR это обычный IP видеорегистратор. А поток нужен не абы какой, а в формате ONVIF. Надеюсь, кто-нибудь сейчас подскажет...


P.S. Насчет камеры... а ты случайно не используешь для 1wire тот же самый GPIO, что используется для управления камерой?
(вопрос, проенаблил ли ты ее в raspi-config, полагаю, излишний?)
Linux Safari Chrome
 Москва
1
0
LLeo
Нет.

Я пробовал поднимать камеру и с отключенным Wire, а также пробовал переносить на другой пин.

В конфиге конечно включена пишет же supported: 1
Linux Safari Chrome
 Москва
3
0
AllaDimm
«А поток нужен не абы какой, а в формате ONVIF.»
Поправьте меня если я ошибаюсь. У «обычной IP камеры» обычно RTSP поток, а ONVIF нужен что-бы камера неким стандартным образом могла поведать нам (или тому же NVR) о том что это за поток и где его искать.
Windows Safari Chrome
 Домодедово
0
0
id
Сам себе отвечю.

Если я правильно разглядел твою картинку, Даллас ты цепляешь на 4-й сверху контакт в левом ряду. Это GPIO4.

А теперь гуглим пинаут камеры, и видим какие GPIO она использует:

GPIO28 SDA
GPIO29 SCL
GPIO22 CAMIO0 (Power enable)
GPIO4 CAMIO1 (Led indicator)

И, мне кажется, вот она и проблема?
В той методичке, по которой ты подключаешь Даллас, не упомянута случайно возможность перенести его на другой пин?
Linux Safari Chrome
 Москва
1
0
LLeo
Попытки поднять камеру были до подключений датчиков. Я поэтапно это строил.

Неисправность камеры не связана:

- с датчиками (разобраться с камерой пытался ещё до них)

- с моими особыми настройками (на голой системе не взлетела)

- с настройками rasp-config (включил камеру там)

- с неисправностью Raspberry (пробовал на разных)

- с неправильным подключением камеры (слот и ориентация правильные, диод в процессе загрузки одиночно мигает в два момента)

- обрывом или замыканием шлейфа (прозванивал от контрольных точек платы до контрольных точек камеры)
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Видел на ютубе проект типа motion2onvif который генерит события видеоаналитики ( движения в кадре ) на основе вывода линуксового детектора движения motion.
А зачем вам onvif в применении к описанной леонидом задаче?
Windows Firefox
 Санкт-Петербург
0
0
ВД
Самый дешёвый способ архивации — ip-видеорегистратор. Дешевле NASов аналогичных параметров. А с онвифом гораздо меньше трахотни по интеграции.
Windows Safari Chrome
 Нижний Новгород
6
0
И
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
По первой кнопке вижу титры и слышу море на фоне черного экрана. По второй ничего не происходит.
Браузер Vivaldi на движке Chromium.
Windows Firefox
 Израиль
2
0
braintunic
> прописываю его в «crontab -e» чтобы работал каждые 5 секунд (с долями минут в кронтабе сложно, поэтому так):

Совершенно незачем перенагружать cron-сервис, заставляя его запускать каждую минуту по 12 параллельных cron-процессов, как делаешь ты:
* * * * * /usr/bin/bash /home/pi/lleo/GoneDaemon.sh
* * * * * ( /usr/bin/sleep 5 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 10 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 15 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 20 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 25 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 30 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 35 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 40 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 45 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 50 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )
* * * * * ( /
usr/bin/sleep 55 ; /usr/bin/bash /home/pi/lleo/GoneDaemon.sh )

Вполне достаточно запускать один cron-процесс, и уже в нём запускать твою задачу, сколько требуется, вот так:
* * * * * for ((i=0;i<12;i++)); do /usr/bin/bash /home/pi/lleo/GoneDaemon.sh & /usr/bin/sleep 5done
Linux Safari Chrome
 Москва
0
0
LLeo
Спасибо, исправлю!
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
И еще очень желательно ввести pid файл и проверку что отсутвует уже выполняющаяся 5 секунд назад запущенная копия
Windows Safari Chrome
 Санкт-Петербург
0
0
ВД
PID-файл — это костыль. Достаточно задать вопрос "а зачем он нужен?". Тривиальный ответ — "чтобы несколько демонов не плодить" — вызывает следующий вопрос: "чем плохи несколько демонов?" И вот тут уже ответ по существу: "они подерутся за ресурсы". Ну, там, сокет какой-нибудь, память и т.п. Соответственно, вместо PID-файла лучше пользоваться прямо этим самым ресурсом: ежели ресурс свободен, запускаем нового демона, если занят, а работа стоит — прибиваем того, кто этот ресурс занимает, ну и так далее.
Safari Chrome
 Mt Laurel
4
0
agathpher
небольшой bashhuck, вот это

/usr/bin/ps awuux | /usr/bin/grep temperTextStart.php | /usr/bin/grep -v grep

можно заменить на это:

/usr/bin/ps awuux | /usr/bin/grep [t]emperTextStart.php
Linux Safari Chrome
 Москва
0
0
LLeo
А как это работает?
Linux Firefox
 Пенза
8
0
qwerty блинн которого сайт забыл
эта магия регулярных выражений.
понятна только тем кто регулярно выражается :)
Windows Firefox
 Израиль
9
0
braintunic
Всё просто.
Команда 'grep' переводит "[s]tring" в "string", поэтому команда 'grep' правильно находит нужный нам "string".

Зато теперь в выводе команды 'ps' оказывается подстрока "grep [s]tring" и вот эта строка (которую мы и хотим отбросить) уже не находится командой 'grep [s]tring' (поскольку 'grep' перевёл "[s]tring" в "string").
Linux Safari Chrome
 Москва
0
0
LLeo
Супер!
Linux Ubuntu Firefox
 Воронеж
0
0
selivan
Классная фишка, спасибо!
Mac Safari
 Израиль
0
0
braintunic
Маленькие радости для незнакомых с pgrep ;)
Linux Ubuntu Firefox
 Воронеж
1
0
selivan
А если я ещё и пользователя процесса видеть хочу, или время запуска? pgrep не всё умеет.
Linux Ubuntu Firefox
 Москва
0
0
LLeo
Только ни хера не работает ваша команда.

grep [t]emperTextStart.php - НЕ РАБОТАЕТ

grep '[t]emperTextStart.php' - вот так работает
Windows Firefox
 Тула
5
0
stream
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Скобочки - это wildcard в bash. Их (wildcard) несколько больше, чем привычных "*" и "?". Если ты запускаешь команду из того же каталога, где находится этот php файл то wildcard сработает и bash сожрет их, передав чистое имя файла. Поэтому такие конструкции надо обязательно кавычить для надежности.
Linux Firefox
 Москва
1
0
Фыва Jr Олдж
И желательно именно в одинарные кавычки чтобы случайно не раскрылось какое-нибудь '$a' если где-то в environment затясалась переменная с именем 'a'. Хотя это уже паранойя. Но я всегда в подобных вещах использую именно одинарные кавычки. На всякий случай.
Mac Safari
 Израиль
0
0
braintunic
> Хотя это уже паранойя. Но я всегда в подобных вещах использую именно одинарные кавычки. На всякий случай.

Никакая это не паранойя, в отличие от 95% твоих остальных комментов ;)
Это даже не обсуждается.
Только одинарные кавычки, они же апострофы!
(если не требуется принудительное раскрытие ${}, $(), $(()), или `` в экранированном выражении).
Linux Firefox
 Москва
0
0
Фыва Jr Олдж
Разве в остальных 95% комментов я выступаю за Навального, то есть веду себя явно шизофренично-параноидально? Вот ведь я какой!

Естественно апострофы, а не "обратные галочки", это даже оппозиционеру тупому понятно.
Mac Safari
 Израиль
0
0
braintunic
Ты сам это сказал! ;)
Вот твоя цитата, как есть, буква в букву:
> я выступаю за Навального

$ echo “$(run Навального в президенты\!)”
Linux Firefox
 Москва
0
2
Фыва Jr Олдж
Не надо выдёргивать отдельные слова и фразы из комментария, изменяющие его начальную мысль, не надо уподобляться роликам Навального и ФБК :-/
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
1
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ага , или просто pidof startTemplate.php
Linux Ubuntu Firefox
 Воронеж
0
0
selivan
Который не сработает, потому что запущенная команда - /usr/bin/php, а файл startTemplate.php - просто первый из её параметров.
Mac Safari
 Израиль
0
0
braintunic
Не так уж сложно добавить флаг ‘-x’ ;)
Linux Safari Chrome
 Москва
0
0
gevor
У меня мильон лет назад была проблема с камерой RPi. Много времени потратил, пока не прочел, что была партия Малинок с дефектом - не работал порт камеры как надо, и мне как раз не повезло.

Мб тебе не повезло с твоими Малинками (хотя вероятность невелика, да).
Linux Firefox
 Москва
0
0
lavart
Про камеру - либо забыл в config.txt прописать
start_x=1
gpu_mem=128

Либо не контачит. Разъёмчик там довольно привередливый.
Проверь с обоих сторон, с запасным шлейфом, и воткнутость самого модуля на плате.
Linux Safari Chrome
 Москва
0
0
LLeo
С камерой совсем интересно. Она прекрасно работает на Raspberry 1B с любой прошивкой.

Но совершенно отказывается работать на Raspberry 3/4 с той же самой карточкой прошивки.

Гугления интернета не привели ни к чему. Все эти способы и опции давно пробовал. Удивлен.
Linux Firefox
 Москва
0
0
lavart
Так, а start_x.elf и bcm*-rpi-3-*.dtb какого года?
Если скачано давно или карточка изначально стояла в 1B то может просто быть несовместимая прошивка GPU.
Камерой занимается не Linux, а встроенная в GPU ось, так что проблему надо искать в /boot

И именно проверь, а не предположи - когда проблема выглядит бредово, 9 из 10 случаев что-то из заведомо правильного оказалось неправильным.

И ещё - что пишет "vcgencmd version" и "cat /proc/cpuinfo |grep Revision"?
Linux Safari Chrome
 Москва
0
0
LLeo
Прошивка сегодняшняя. В 1B работает с камерой, в 3 и 4 нет. Одна и та же прошивка.
Linux Safari Chrome
 Москва
0
0
LLeo
Жаль, камеры нет нормальной. А то у меня ещё много идей.

Firefox
 Санкт-Петербург
2
0
Kirill
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
http://www.rwpbb.ru/ вот дедок в этих делах непревзойденный мастер. На заплеванной сцене райклуба, он буквально творит чудеса. И сайты у вас ровесники, что исчезающая редкость. Может сдинозавритесь :-))
Linux Ubuntu Firefox
 Нижний Новгород
1
0
rekcuFniarB
Интернет-радио я делал на связке icecast2 + liquidsoap, можно автоматизировать по всякому.

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

Liquidsoap тут в принципе не обязателен, если такая серьёзная автоматизация не требуется, можно обойтись кроном и icecast клиентами попроще, да и ffmpeg умеет стримить на icecast.

> Firefox, например, отказывается показывать HLS

Нативно не поддерживает, но через JS можно. Есть готовые плееры, которые всё делают сами, предоставляя единый API. Типа такого: https://www.mediaelementjs.com/
Там просто подключив этот плеер, дальше просто в src <audio> или <video> прописывать ссылку на hls поток (m3u8), а плеер всё подхватит сам.
Windows Firefox
 Израиль
0
0
braintunic
Интересно, раньше ты индифферентно относился к рекомендациям по улучшению bash-кода, а сегодня тепло поблагодарил за две рекомендации.
Ну тогда вот ещё предложение!

Чтобы определить 'pid' бегущего процесса по его имени, вовсе не обязательно использовать такие монструозные конструкции, как трижды сделано в твоём скрипте:
/usr/bin/ps awuux | /usr/bin/grep temperTextStart.php | /usr/bin/grep -v grep | /usr/bin/awk &#39;{print $2}'

Вполне достаточно использовать простую команду 'pgrep':
pgrep -f temperTextStart.php

Или можно использовать другую простую команду 'pidof', с тем же результатом:
pidof -x temperTextStart.php

Кроме того, если тебе надо убить процесс (или процессы) по имени, не обязательно сначала определять 'pid' процесса, можно это сделать сразу, командой 'pkill', вот так:
pkill -9 ffmpeg

(но чтобы убить bash-процесс, надо ещё добавить флаг '-f').
Windows Safari Chrome
 Израиль
3
0
б
я предпочитаю использовать killall вместо pkill
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Не во всех дистрах есть
Linux Ubuntu Firefox
 Нижний Новгород
0
0
rekcuFniarB
> -9

Лучше сперва попробовать не так жестоко.
Mac Safari
 Израиль
0
0
braintunic
Это ведь не generic, а пример по конкретному скрипту Леонида, где используется ‘kill -9’ (будем считать, что есть основания).
Mac Safari Chrome
 Нижний Новгород
0
0
tartaglia
> по улучшению bash-кода

Я, как человек ленивый, давно стремлюсь делать то, что везде работает. По крайней мере, работает без изменений в OS X и Linux. Я считаю, что некорректно требовать от неграмотных админов что-то ставить сверх общего минимума, и до последнего времени этим минимумом были bash, python2 и perl5. (В OS X изначально есть Ruby2, что само по себе забавно, но его нет в минимальной установке Linux.) То есть я хорошо знаю все эти языки, в том числе Ruby, но мне нужен один универсальный, чтобы программы работали везде сразу, без дополнительных настроек — в том числе без общения с неграмотными админами (а они все неграмотные).

И вот я вижу, что в OS X bash заменяется на zsh — хуже того, bash ограничен v3, где нет массивов, то есть он не годится для нормального скрипта. Поймите меня правильно, даже bash5 — говно, но с этим можно было бы мириться, если бы он везде был в наличии.

И python, то есть python2 (который, как всем тут известно, с этого года не поддерживается больше) пишет в OS X «WARNING: Python 2.7 is not recommended. Future versions of macOS will not include Python 2.7.». Но я не могу использовать в универсальных скриптах python3, потому что он отсутствует в минимальной установке Linux.

Получается, что меня, с моим желанием делать универсальные скрипты, загоняют под perl5. Который я нежно люблю уже лет двадцать пять, который морально устарел, которого никто не знает и который я сам никому не стал бы рекомендовать в наше просвещённое время, время отрезвления от пагубной отравы OOP, время разваливающейся демократии и созревшего для размножения делением Интернета.

Что вы на это выразите, товарищ? Как жить дальше?

ЗЫ. Я всеми пятью своими концами (голову условно считаем началом) приветствую, что LLeo удалил политическое обсуждение предыдущего поста. Моё уважение к нему поднимется до небес, если он заодно удалит нахуй все свои политические же стиховысеры.

ЗЗЫ. Галич был очень огорчён, узнав, что его кумир Солженицын считает галичевские срывающие покровы вирши говном. Не отнимешь, коллег-либерастов (Бродского и т.п.) Исаич оценивал объективно. Впрочем, даже у Пушкина и Тютчева стишки на злобу дня получались не слишком хорошо.
Mac Safari
 Израиль
1
0
braintunic
> Как жить дальше?

Это вы, батенька, разбаловались вконец!
Вспоминаю времена где-то 1996-2000, когда только начинался Linux, но зато цвели и пахли разнообразные Unix системы: от IBM, HP, SUN, SGI, Digital, BSD.
И у каждой из них был свой shell по умолчанию: у одних Bourne shell, у других Korn shell, у третьих csh, у четвёртых tcsh, у пятых уже bash.

И все эти шеллы надо было знать, и надо было как-то писать универсальные скрипты, которые бы работали на каждой из этих систем ... и работали ведь!
Mac Safari Chrome
 Нижний Новгород
1
0
tartaglia
Право, не знаю — может, у вас там климат хорош. Я как-то не рассчитываю прожить столько, сколько прошло с времён очаковских и покоренья Крыма. Пока действует закон Мура (Винни всем в помощь), в IT нельзя оперировать сроками, превышающими один-два года. Я живу здесь и сейчас.

ЗЫ. Что-то я начинаю ненавидеть слова «пара» и «двое». Их суют куда ни попадя совершенно без толку. Надеюсь, они сдохнут. В смысле, слова сдохнут.
Windows Firefox
 Санкт-Петербург
1
0
ВД
Перл в те времена входил в базовую систему (по крайней мере, FreeBSD). Из портов приходилось даже less ставить, а перл был.
Mac Safari
 Emirates Integrated Telecommunications
0
0
Хах
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
perl5 очень хорош, и знают его до сих пор многие. Даже достаточно молодые люди.
Windows Firefox
 Израиль
2
0
Павел бывший Пашка
Первая кнопка - никакого видео, черный квадрат и цифирь наверху.
(Windows-10/Firefox)
Черный прямоугольник и никакой цифири
(Windows-10/Chrome, Windows-10/Edge)
Вторая кнопка (Андроид-10/Chrome) - Что-то вроде пустого окна плеера, никакой цифири.
... "Воля ваша, профессор, а что-то вы несуразное придумали" (С)
(Помнится, когда я неудачно прыгнул с 10-метровой вышки и еле выплыл, мелкотня мне кричала: дядь, а ты еще на DOS-6.2.2 попробуй!)
Linux Safari Chrome
 Белоруссия
0
0
Alex
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
У меня так:
С телефона, приложение Samsung Internet.
Пока открыта эта запись дневника - слышен шум моря.
Если нажать первую кнопку - то открывается окно, где возможно хочет проиграться какое-то видео, но нет. Шум моря все еще слышен.
При нажатии на вторую кнопку - вообще ничего не происходит, но шум моря продолжается.
Upd: прозвучала цитата Оноре де Бальзака, фоном - шум моря. Красота!
Windows Firefox
 Израиль
0
0
Павел бывший Пашка
Соленые брызги, надеюсь, не летят?
Mac Safari
 Москва
0
0
shkuter
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
https://github.com/google/shaka-player гугловский плеер
Linux Safari Chrome
 Москва
2
0
LLeo
Гугловское не хочу. Они его через полтора года отключат или сделают регистрацию с парольным ключом и бесплатными 1000 просмотрами в месяц. Не хочу связываться с ними вообще. Имел опыт с речевым технологиями и картами. Все быстро поломалось и запросило денег и ключей, жаль своего потраченного времени на изучение их хуйни.
Mac Safari
 Москва
0
0
shkuter
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
так там опенсорсная библиотека, скачал, подключил локально и пользуйся
Linux Safari Chrome
 Washington
2
0
telepatus
Жаль, что сам станок явно засекречен. Но видимо это очень важный станок.



Linux Safari Chrome
 Москва
0
0
LLeo
Не удовлетворю.

Но да, примерно так я себе и представляю ту страну и тот станок.
Windows Firefox
 Санкт-Петербург
0
0
ВД
DS1820-то туда хоть влезет, или ты нам в следующий раз расскажешь, как термопару к малинке подключать?
Linux Safari Chrome
 Москва
0
0
LLeo
Куда влезет?
Windows Safari Chrome
 Санкт-Петербург
0
0
Онанимус
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
В станок.
Windows Firefox
 Москва
3
0
Dim.
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
В случае неисправности hdmi-шной части малины или недоступности телика вполне удобно подключаться по UART.
Linux Safari Chrome
 Москва
0
0
LLeo
Кстати, да, я и забыл про это.
Linux Ubuntu Firefox
 Германия
0
0
gehrmann
Предположу, может, лучше было взять альтернативное решение?
Например, techage IP-камера с их андроид-приложением + попадающий в кадр экранчик с температурой. Всё же, сношений куда меньше выйдет.
Linux Safari Chrome
 Москва
1
1
LLeo
Мне в таких случаях всегда интересно: а вы отдаете себе отчёт, что пришли в пост, где подробнейшим образом изложено уже готовое решение, и предложили взамен накупить дорогих пользовательских товаров и связать их изолентой, говном и палками дабы получить сиюминутный (нерасширяемый) функционал, которым готовые предметы не обладают?
Linux Safari Chrome
 Москва
1
0
LLeo
Ну и всегда мне в таких случаях интересно, куда пойдет ваша мысль если завтра заказчик попросит добавить в противоположном углу маленький анимированный логотип завода, снизу - бегущую строку со статистикой по цехам. Предложите развесить в кадре на изоленте ещё три дисплея внутри печи обжига? :) Или придёте с повинной к директору и скажете, что купленная камера за 450$ умеет только в Андроид и ТикТок и ещё кошачьи ушки на портреты накладывать, а за всем остальным надо обращаться к ее разработчикам в Сингапур, а мопед не ваш? :)
Windows Firefox
 Екатеринбург
0
0
MaDsKiLlS
А что именно работает на клиенте — конкретно плеер, или плеер в браузере? Если не секрет, конечно.
Linux Safari Chrome
 Москва
0
0
LLeo
У системы нет конкретного клиента как конечной цели, основная цель писать архив. Но в любой момент любой начальник или рабочий должен иметь возможность зайти из любого места по интернету с любого устройства и понаблюдать за процессом в полностью реальном времени. Это может быть личный айфон, ноутбук, домашний комп друга, интернет-кафе во Вьетнаме, планшет сына на даче и т.п.
Windows Firefox
 Екатеринбург
0
0
MaDsKiLlS
Я почему спросил — если начинаются всякие анимированные логотипы и бегущие строки, возможно, стоит их накладывать на клиенте?
Linux Safari Chrome
 Москва
0
0
LLeo
Бегущих строк нет. Я просто о том, что есть решение задачи архитектурное, а есть симптоматическое. Я сторонник решать архитектурно, а не набирать в ближайшем салоне электроники готовых разноцветных мыльниц и пытаться из них связать изолентой что-то похожее с виду на сегодняшний функционал. Хотя бы потому, что мне интереснее и полезно изучать базовые принципы, а не коммерческие протоколы мыльниц-однодневок.
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
3
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Грамотное решение задач архитектурно, это собрать задачу из имеющихся на рынке готовых компонентов, связанных между собой общепринятыми индустриальными стандартами.

Камера с ethernet/pie/rtsp/onvif/rtmp это нормальный отраслевой стандарт. Сегодняшняя сиюминутная камера на этом отраслевом стандарте завтра заменяется на такую же другую с ним работающую.
А пытаться собрать для заказчика решение на убогой малинке обматанной торчащими проводами и изолентой это удел школьника 3 класса, который яркая личность, презрел все стандарты и пойдет своим путем. С своей вовсе не сиюминутной нетленкой, жестко привязанной к распберри 3/4 и молулю камеры n , который ой, что то не заводится.
Ну ничего, начальник заказчика через 5 лет если надо слазает потом в исходники и все перепишет
Windows Safari Chrome
 Санкт-Петербург
0
0
Михайлов
Преемник ничего не будет "переписывать" просто выкинет всё это и попросту заменит на набор (!) , но совершенно стандартных модулей и оборудование в пром. исполнении.
Windows Firefox
 Латвия
0
0
Heisenberg2
С архитектурной точки зрения, данное решение тоже не без изъянов.

PS
Кстати, штатные 1wire либы обычно грузят проц т.к. используют циклы ожидания. Это может создавать неудобства. Плюс сама шина не слишком помехоустойчивая. Я обычно для более менее серьезных применений использую переходник на uart/485.
Linux Safari Chrome
 Москва
0
0
LLeo
Да, сами удивлен. Не могли написать нормальный опрос без цикла...
Windows Firefox
 Латвия
0
0
Heisenberg2
Линукс не является операционной системой реального времени (с небольшими оговорками).

По этому либо аппаратный буфер, либо страдания. Либо протоколы без жестких временных интервалов (напр. I2C).
Windows Firefox
 Санкт-Петербург
1
0
ВД
Есть хак, позволяющий таймить 1wire при помощи UART. Вкратце — tx и rx соединяются друг с другом и с шиной при помощи монтажного ИЛИ, а скорость передачи/приёма выбирается 115200 бод, так что байт 0xFF воспринимается на шине как логическая единица, а 0x00 — как логический 0.
Windows Firefox
 Латвия
0
0
Heisenberg2
Ну я и говорю - или аппаратный буфер или страдания.

А в данном случае и буфер и страдания.
Windows Safari Chrome
 Санкт-Петербург
0
0
Михайлов
Если принципы "базовые", то обтачивание грецкого ореха, в надежде, что с орехом следующей версии срастется "уже купленная пользовательская" камера... это наивно и на той же коленке сделанное. Потом выяснится, что всё, тобою написанное, начинают сравнивать с другим промышленным ПО (намного дороже), и догадайся, в чью пользу получится сравнение. И почему. Особенно, если на смену нынешнему заказчику придет вменяемый менеджер, который про LLC Lleo и слыхом не слыхивал.
Linux Safari Chrome
 Россия
0
0
LLeo
Задайте своему психотерапевту вопрос: почему вас это так волнует?

Ну, какой-то Леня сделал за два дня какое-то решение задачи и поделился в дневнике готовой пошаговой инструкцией. Решение не работает? Работает, как можно видеть прямо на странице. Кто-то пришел к вам за советом и помощью? Да вроде нет, все работает. Леня первый, кто делает решение на одноплатных компьютерах? Да нет, они для этого и были придуманы.

Тогда почему вас так бомбит и так подгорает написать, что все плохо и лично вы бы купили фирменного говна (или, наоборот, нашли в помойке старый ноутбук) и сделали все иначе? Так сделайте, поговорим.

Вот у меня уже на этой системе, помимо датчиков, идут три круглосуточные трансляции в сеть и кормушка с дистанционно-управляемым дозатором.



А что интересного сделали за эти два дня вы?
Windows Firefox
 Латвия
0
0
Heisenberg2
По уму снимать должна камера, обрабатывать и писать - NVR, который может по совместительству быть web сервером для удаленных клиентов.
Linux Ubuntu Firefox
 Москва
0
0
LLeo
А информацию с датчиков станка кто будет снимать для наложения на видео? Отдельное устройство для снятия датчиков с отправкой потока на удаленный сервер?
Windows Firefox
 Санкт-Петербург
0
0
ВД
Ещё один забытый секрет погибшей цивилизации: полвека назад телеметрию передавали в звуковом канале. Который, кстати, прекрасно записывается dvrом безо всяких php скриптов.
Windows Firefox
 Латвия
0
0
Heisenberg2
Тут много вариантов. Зависит от ваших персональных приоритетов. Но в целом - да, некое устройство.

Хотя "ip-камеры с датчиком температуры" мне попадались, но логику их работы и прочие нюансы я не изучал. ONVIF вроде имеет опции для канала температуры и прочей телеметрии (могу ошибаться давно его листал).

Вот к примеру:
https://aliexpress.ru/item/32951498064.html

Есть камеры с портом для телеметрии, вряд ли туда можно воткнуть напрямую именно 18b20, но переходник с чего угодно на что угодно на любом микроконтроллере делается за пол вечера.
Linux Ubuntu Firefox
 Москва
1
0
LLeo
Спасибо, интересная ссылка.

Но что мне не нравится в таких вещах - это что они обычно закрыты на свою узкую задачу, а нередко еще имеют какое-то свое собственное программное обеспечение.

Объясню.

Основная задача в том, чтобы складывать ролики с температурой на устройство хранения (винчестер 4Тб). Совершенно непонятно, есть ли способ делать это именно с этим изделием, заточенным под наблюдение за няней (как гласит рекламная картинка). Сама камера точно не умеет работать с внешним накопителем, у нее даже разъема нет, она может только кидать motion detect на свою относительно небольшую флешку. Возможно есть способ поставить рядом серверок (Raspberry Pi) и заставить его тянуть с камеры видео и архивировать на внешний диск. Но возникает здравый вопрос - зачем тогда именно эта камера, если серверок Raspberry Pi у меня прекрасно работает и без нее? Но возможно даже этого способа нет, если у камеры не окажется открытых протоколов, а лишь собственный формат вещания и "приложение просмотра для Андроид и Windows", как указано в описании.

Не говорю уже про датчик - в моем случае датчик должен измерять температуру жидкого раствора, поэтому выбран герметичный датчик на шнуре. Удастся ли разломать ту коробочку на micro-usb шнуре и приколхозить свой датчик - загадка. Этот USB может оказаться стандартным rs232, и тогда можно спаять свою схему Wire (спасибо, еще и паять схему) и подключить датчик. А может оказаться просто тупо собственной распайкой через фабричный USB-разъем контактов какого-то своего датчика, не совместимого с нужным.

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

То есть в моем случае это означает:

1. для начала выложить стоимость Raspberry (2500-3000 руб) за неизвестный науке девайс для няни

2. дополнить его Raspberry, потому что без нее все равно не организовать сервер хранения больших объемов видео в локальном помещении (не покупая терабайты и сервера в облаках Амазона и не нагружая местную слабую сеть, круглосуточно гоняя поток видео за океан)

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

4. с неплохой вероятностью убедиться, что для поставленной задачи устройство непригодно и подарить его кому-то, у кого Windows и кто реально хочет наблюдать за няней и температурой батареи в детской

Вопрос: на хрена мне это, если у меня за полтора вечера все и так уже работает как было нужно на основе популярных инструментов и открытых архитектур?
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Камера стоит от 1000р .
Ну допустим в взрывозащищенном корпусе с индустриальным диапазоном температур и poe питанием чуть дороже, но она в любом случае дешевле, чем рабочее время специалиста, потраченное на ковыряние в этом.
Любые бегущие строки без проблем накладывются на трансляционном сервере , но и в некотопых камерах есть такой функционал
Windows Firefox
 Санкт-Петербург
1
0
ВД
Не готовое это решение, а всего лишь демонстратор технологий. Для готового решения придётся потрахаться с реалтаймом (заменить в скрипте вызов date на встроенный во ffmpeg localtime, потом сообразить, что нужен gmtime, наткнуться на race condition при перезапуске демона и т.д. и т.п.). А в конце концов плюнуть и гонять ffmpeg на nginxном сервере, дав ему на вход поток со стандартной китайской ip-камеры с несравнимо лучшим качеством картинки, универсальным креплением в комплекте и ценою в половину той малинки.
Linux Safari Chrome
 Москва
1
0
LLeo
Что значит этот поток слов?

Зачем вы столько думаете про date, time и localtime, если вывод даты вообще не входит в задачу. В задаче вывод данных с датчика, расположенного внутри станка вместе с изображением происходящего там.

И кому нужна китайская локальная камера рядом с nginx, если nginx за океаном, а станок в цеху? Лица админов транслировать из американского дата центра с тамошним локальным временем? :)
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
1
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Вы просто получили ответ практика, уже прошедшего этот путь.
Но теперь китайские камеры есть и сразу с rtmp уже лет 7
Windows Safari Chrome
 Санкт-Петербург
0
0
Михайлов
Это тебе товарищь пытается разъяснить за риалтайм. Термины относятся не к показу времени на экране, а к организации того самого реалтайма.
Windows Safari Chrome
 Санкт-Петербург
0
0
ВД
Да и показ времени в углу картинки, как я понял из слов про архивирование, тоже в задачу входит.
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
1
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Рыдаю в голос.

Леонид серьезно считает костыли на малинке готовым решением, а заводскую камеру в нормальном корпусе и отлаженным готовым функционалом "соплями и изолентой".
Linux Ubuntu Firefox
 Москва
0
0
LLeo
Вы рыдаете в голос лишь потому, что думаете, будто в "китайской камере RTMP" стоит не тот же самый процессор avr с теми же самыми либами от ffmpeg, а божественный кристалл с четырьмя ногами: питание, земля, провод от камеры и антенна WiFi. Магический кристалл конечно работает надежнее, это же магия.
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
В серийном производстве на отладку костылей обычно тратят больше времени чем вы можете себе позволить штучно это раз.

Два там меньше разьемных соединений, а это слабое место малинки.

То есть вы делаете прототип, а у них уже продукт
Linux Ubuntu Firefox
 Москва
0
0
LLeo
К сожалению, продукт не выполняет поставленной задачи: не умеет снимать информацию с датчиков и накладывать на видео. Ну и не умеет управлять станком, если в будущем это понадобится. А в остальном прекрасный продукт IP Camera. Для удаленного наблюдения за няней - лучше не придумать. Разве что старый мобильник с установленным IP Webcam подешевле выйдет и поумнее. Но если не нашлось в коробке старого мобильника с разбитым экраном, то ваще покупайте камеру, не раздумывая.
Linux Ubuntu Firefox
 Германия
0
0
gehrmann
Ллео, мне искренне жаль, что вы уже вложились в решение. Я и сам часто вдохновлён больше, когда делаю всё сам. Но я лишь предложил вариант, как можно было бы пойти на этапе подбора технологий. И в данном случае IP-камера за 40$ в герметичном корпусе (фактически, даже дешевле, чем RPi с корпусом и модулями) выглядит для меня куда более отлаженным решением. Если не хотите инакомыслия, то так и скажите. Иначе чего нам тут распинаться в комментариях?
Linux Safari Chrome
 Москва
0
0
LLeo
К сожалению, ваше решение не годится.

Задача была не в том, чтобы поставить какую-нибудь камеру для наблюдения. А в том, чтобы архивировать на диск видео с наложенными на него сообщениями от датчиков техпроцесса. Также требовался удаленный просмотр в реальном времени. Возможно в будущем - управление техническими устройствами (тэнами, вентиляторами).

Да, вы можете купить готовую камеру за 40$. Нет, это не будет решением задачи.

Не обижайтесь.
Linux Ubuntu Firefox
 Германия
0
0
gehrmann
Раз речь о мониторинге ТЭНов, возможно, экономия эл-ва не требуется. В таком случае я бы взял б/у десктоп типа "тонкого клиента" или ноутбук: стандартные архитектуры мощнее, и под них проще собирать или писать софт. А расширение функциональности на дешёвых arduino/stm32. Но это лишь дискуссия, так что не надо, Леонид, меня утешать, что вы мой взгляд отвергаете : )
Linux Safari Chrome
 Россия
0
0
LLeo
Вместо Raspberry вы бы купили ноутбук. Понятно.
Linux Ubuntu Firefox
 Германия
0
0
gehrmann
Б/У ноут. Тут цена у него будет, например, на мой любимый x220, как за новую распберри пи с финтифлюшками.
Linux Safari Chrome
 Россия
0
0
LLeo
Удивительные комментаторы.

Один кричит, что надо купить фирменную камеру, фирменный термометр, фирменный хостинг, фирменное облачное пространство и фирменного специалиста, который все это сделает.

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

Предприятие в Германии находится, если что. Я на нем не был никогда, только продукцию видел.

Моя задача послать им спецификацию комплектующих для самостоятельной закупки, а также мою настроенную прошивку системы для запуска. Количество устройств мне неизвестно. Собственно, задача на момент написания поста выполнена, поделился решением для всех желающих. Если у вас есть более удачное решение - соберите его и напишите такую же подробную инструкцию, всем будет полезно.
Mac Safari
 Израиль
0
0
braintunic
> Удивительные комментаторы

Обычные комментаторы.
- Ты просишь помочь с аккордами для шестиструнной гитары?
- Тупица! Возьми семиструнную!
Когда-то было иначе?)
Linux Safari Chrome
 Россия
0
0
LLeo
Если бы я просил помочь - тогда ещё понятно. Я наоборот, написал инструкцию.
Linux Ubuntu Firefox
 Германия
0
0
gehrmann
Я понимаю, что вашу призму, через которую вы смотрите на мир, мне уже не изменить. Но для меня существует большая разница между дискуссией, в которой участники помогают топикстартеру взглянуть на проблематику шире, и попыткой унизить топикстартера своим эго. Второй подход мне чужд, и я прошу интерпретировать мой посыл верно.
Windows Safari Chrome
 Санкт-Петербург
0
0
ВД
Это точно такие же костыли, как малинка, разве что деревянные, а не алюминиевые.
Linux Firefox
 Москва
1
0
lavart
Застал наконец светлое время суток...
А почему качество ultrafast? Выглядит жутковато, и аппаратный кодек способен на большее в реальном времени.
Linux Safari Chrome
 Москва
0
0
LLeo
А какой надо? Я пока думаю поставить в качестве камеры, которой у меня пока нет толком, смартфон старый с ip webcam. Но что-то он по домашнему вайфаю не сильно тянет потоки.
Linux Firefox
 Москва
0
0
lavart
Пробуй medium, fast, veryfast в таком порядке.
ultrafast для макс производительности, у него получается и битрейт толстый, и качество низкое.
Linux Firefox
 Москва
0
0
Фыва Jr Олдж
Ура! По первой кнопке я наконец-то увидел девятиэтажный дом! Вчера, как тут многие уже говорили, кроме "шума моря", даты-времени, показаний какого-то датчика, температуры процессора и процентов загрузки, всего этого на чёрном фоне, ничего не было.
Mac Safari Chrome
 Москва
1
0
Sol
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ну, шум моря-то никуда не делся, хоть камера теперь и транслирует.
Mac Safari Chrome
 Киев
0
0
Ivan K
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Рекомендую перевести файловую систему распбери в read only (есть куча мануалов, как это сделать правильно учтя нюансы) - иначе флешка умрет через 1-3 месяца.
А камера скорее всего мертвая, но чтоб сказать точнее - нужна еще одна 100% рабочая. Я б предложил тебе свою, но из Киева в СПб или Мск это делать бессмысленно. Потому могу мультиметром измерить падения напряжения на сигнальных выводах рабочей камеры, и написать тут. Если у тебя будет сильно отличаться, то 100% камера не рабочая.
Linux Safari Chrome
 Москва
0
0
LLeo
А что там флешка пишет в себя? Наверно она монтированная как noatime, проверю. А так у нее телодвижений быть не должно.

Камера рабочая: на Raspberry 1B она прекрасно работает с любой прошивкой, в том числе с толку же самой флешкой.
Mac Safari Chrome
 Киев
0
0
Ivan K
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Насколько мне известно, там журналируемая файловая система. А значит любой чих приводит к записи на карточку, даже обычное обращение к файлу (на чтение) обновляет таймстемп последнего обращения. Потому даже дорогие карточки убиваются довольно быстро. Потому можно перевести /var на ramdrive, а основную систему перевести в RO.
Про камеру - пробовал ли обновлять firmware (через rpi-update)? Иногда помогает
Linux Firefox
 Москва
1
0
Фыва Jr Олдж
> Рекомендую перевести файловую систему распбери в read only

А /var/log/* куда будет записываться? Или на распбери такого нет? Не верю!
Windows Firefox
 Fremont
0
0
Korj
На RAM-drive, в этом и весь цимес. И потом по cron-у и при shutdown скидываться на карточку.
Я когда-то для этого использовал anything-sync-daemon (вспомнил как он назывался, найдя мой комментарий из 2013 года - http://lleo.me/dnevnik/2013/08/18#157214), сейчас может уже поновее решения есть.
https://github.com/graysky2/anything-sync-daemon
Ну или не мучиться, и купить карточку Sandisk Extreme Pro, например. Должна долго жить.
Windows Safari Chrome
 Санкт-Петербург
1
0
Онанимус
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Давным-давно, ещё в прошлом веке, был такой протокол syslog. Сетевой. Сейчас это уже почти забытый секрет угасшей цивилизации. На той малинке, небось, systemd царствует.
Linux Firefox
 Германия
1
0
Igelko
это, а зачем писать следящего демона демонов?
есть supervisord, который на питоне или сейчас в принципе можно жить на штатном системном systemd, если слегка потанцевать с бубном вокруг конфигов для сервисов.
Windows Firefox
 Израиль
0
0
Павел бывший Пашка
Сейчас видна тьма и пара огонечков. Windows-10/Firefox
И цифирь, время движется
И баба бубнит по-английски.
Что интересно, баба какая-то прилипчивая. Закрыть окно не нашел как, перезагрузил страницу, окошко закрылось, а баба бубнила еще долго. Даже как-то страшновато.
Mac Safari Chrome
 Washington
0
0
fenster
Это прозвучит банально, но я вот с камерой регулярно получал detected=0 тупо при использовании плохого ribbon cable. Заказал моток новых за три копейки, меняю по необходимости. Это, конечно, не объясняет, почему работает на старой Pi и не работает на новой, но кабель я бы на всякий случай поменял для гарантии, ну или хотя бы прозвонил тестером все 15 контактов.
Linux Ubuntu Firefox
 Москва
0
0
LLeo
Прозванивал. Писал выше об этом.
Windows Safari Chrome
 Санкт-Петербург
1
0
bolshakovdmitry
Интересно, а кто-нибудь подсчитывает количество слушателей такого радио? Является ли оно средством массовой информации, если слушателей более 3000? Должно ли сразу после подключения 3001 слушателя лицензироваться либо блокироваться? Я в принципе "за" поголовное транслирование всего подряд, поскольку это заполнит бесполезно пустующие носители дата центров имени Яровой.
Linux Safari Chrome
 Russia Moscowa Tverskaya-Yamskaya1
0
0
Johnyуууу
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
На что только не пойдет человек, чтоб просто не включить в розетку готовую ip-камеру с rtmp протоколом от 1000р и тот же готовый ble-териометр/гидрометр за 140р

Ну типа это хобби, собрать велосипед самому, ладно.

Тогда предлагаю слить обратно по dd образ настроенной малинки и залить в плату с горелым hdmi
Windows Safari Chrome
 Домодедово
0
0
id
Вчера на iOS работало "мобильное". Сегодня оба говорят Can't play HLS.
:(
Linux Ubuntu Firefox
 Москва
0
0
LLeo
Не обращай внимания, я там перезапускаю сервисы, экспериментирую.
Сейчас у меня Raspberry 3 тянет все три трансляции:

- с USB-камеры

- со старого мобильника с приложением IP Webcam по WiFi, с которого ретранслирует поток rtsp в rtmp на сервер (nginx не умеет pull rtsp)

- ну и тестовое радио с папкой детских песен

Добиваюсь надежности при разнообразных ошибках, отключениях, обрывах WiFi и отсоединении камер.
Linux Ubuntu Firefox
 Москва
0
0
LLeo
Что любопытно: с мобильника, переделанного в WiFi камеру, поток тянется лучше всего почему-то без UPD, по TCP (опция -rtsp_transport tcp ):

ffmpeg -y -re -rtsp_transport tcp -i rtsp://192.169.1.273:8080/h264_pcm.sdp

По умолчанию (ро UDP) прямо счетчик секунд постоянно застревал и прыгал на долгие секунды. Удивительно. Вероятно, в мобильнике что-то не очень хорошо с прохождением UDP.
Windows Safari Chrome
 Санкт-Петербург
0
0
ВД
Ещё бы надо проверить надёжность при долговременной работе. Ну, там, утечки памяти, уход часов и т.п.
Windows Safari Chrome
 Санкт-Петербург
0
0
bolshakovdmitry
"...заалеет сердечная рана.." (поёт)
Windows Safari Chrome
 Санкт-Петербург
1
0
bolshakovdmitry
Насчёт PHP скриптов, строчка «if(sizeof($o)!=2)»
потенциально чревата проблемами при переходе на php 8. Вместо sizeof() нужно будет использовать что-то другое, для разных случаев разное.
Mac Safari Chrome
 Новая Зеландия
0
0
Повар полуночник
А без самосборки не работает? Есть же модуль

apt-get install nginx-plus-module-rtmp

и потом. load_module modules/ngx_rtmp_module.so; в конфиге
Linux Ubuntu Firefox
 Москва
0
0
LLeo
Вы что-то путаете. Готового модуля nginx-plus-module-rtmp нету не то, что на Raspberry Pi, но даже на моей стандартной десктопной Убунте. Да и зачем он, если его сборка занимает несколько минут и работает везде, где я пробовал?
Mac Safari Chrome
 Новая Зеландия
0
0
Повар полуночник
а, вот такой зато есть libnginx-mod-rtmp проверил на распбериане только что. Лучше не копмилировать чтобы иметь возможность обновляться, а то из убунты слакварь какая-то получится.
Windows Firefox
 Симферополь
0
0
Aaaaa
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
По поводу трансляции на Youtube
«При сбое потока длиной секунд в пять — решительно завершится»

На самом деле на Youtube есть возможность сделать так, чтобы трансляция не завершалась автоматически, а ждала, когда поток от encoder пойдет опять. Максимальное время ожидания 4-6 часов. Точнее не могу сказать. Но при перерыве чуть более 4 часов у меня трансляция не завершается. Если, конечно, поток выключается на полдня, тогда только руками создавать новую трансляцию.
Windows Safari Chrome
 Москва
0
0
Granit P-rparim
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Вообще не понимаю тутошних комментариев.

Хотя я сам не чураюсь троллинга, Леонид на него так смешно ведется, но тут-то что троллить?

Поставлена задача, она решена, решена красиво и дёшево, непохоже чтобы это решение не подходило бы, если вдруг потребуются дополнительные фишки, типа IP68 или подобного - есть простор для расширения, все классно.

всего комментариев: 140

<< предыдущая заметка следующая заметка >>

рекламная лирика