Наш подход
Настройте веб-сервер ngnix rtmp на AWS EC ubuntu 16.04. Успешно завершена потоковая передача с одного клиента (RPi Camera). Теперь мы хотим отправить на этот сервер прямую трансляцию с нескольких камер Pi, которая будет отображаться в клиентском приложении Android.
Проблема, с которой мы сталкиваемся
Мы не можем передавать потоковую передачу с нескольких камер Pi с разными raspberry pi 3 на сервер nginx rtmp. Мы не можем отсоединить веб-сокет камеры, когда он не используется (когда потоковая передача с камеры закрыта). Мы хотим назначить этот доступный веб-сокет другой камере, которая должна сделать новый запрос на подключение для потоковой передачи на веб-сервере nginx.
Наши ожидания
Мы хотим настроить сервер nginx rtmp с несколькими клиентами (пользователь Raspberry Pi / Android APP) одновременно.
Наша установка
Наш файл конфигурации установки на сервере nginx rtmp на базе Linux выглядит следующим образом: -
Сторона сервера
#user nobody;
worker_processes 1;
error_log logs/rtmp_error.log debug;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
keepalive_timeout 60s;
server {
listen 80;
server_name 0.0.0.0;
location /stat.xsl {
root /var/www/;
}
location /rtmpstat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
}
}
rtmp {
server {
listen 1935;
buflen 1ms;
application 000000002c23b846 {
live on;
}
application LaoD6Ga59p3qvCTRR5D {
live on;
}
#next
}
}
Сторона клиента
#!/bin/sh
YELLOW='\033[1;33m'
RED='\033[0;31m'
SET='\033[0m'
echo "${RED}RTMP${SET}"
echo "${RED}RESOLUTION ${SET}"
read size
else
sudo ssh -i camera_nginx.pem ubuntu@34.221.76.181 "sed -r -i 's|#next|\t\tapplication $1 {\
\n\t\t\t live on;\
\n\t\t}\n\t\t#next|g' /usr/local/nginx/conf/nginx.conf"
fi
if [ $size -eq 1 ]; then
raspivid -n -o - -t 0 -vf -hf -w 1920 -h 1080 -fps 20 -b 6000000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h2$
elif [ $size -eq 2 ]; then
elif [ $size -eq 2 ]; then
raspivid -n -o - -t 0 -vf -hf -w 1920 -h 1080 -fps 20 -b 4000000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h2$
elif [ $size -eq 3 ]; then
raspivid -n -o - -t 0 -vf -hf -w 640 -h 480 -fps 20 -b 1000000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264$
elif [ $size -eq 4 ]; then
raspivid -n -o - -t 0 -vf -hf -w 640 -h 360 -fps 20 -b 500000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 $
else
echo "Improper resolution"
fi
Мы воспроизводим потоковое видео по следующему URL-адресу rtmp:
rtmp: // ip-адрес сервера / идентификатор_камеры / live
Используйте команду «exec_kill_signal» для rtmp, как показано ниже.
rtmp {
server {
listen 1935;
chunk_size 4096;
buflen 1ms;
application cam_id {
live on;
allow publish 127.0.0.1;
allow publish all;
allow play all;
record all;
record_path /home/video_recordings;
record_unique on;
hls on;
hls_nested on;
hls_path /home/hls;
hls_fragment 10s;
dash on;
dash_path /home/dash;
dash_nested on;
exec_kill_signal closeStreaming;
}
}
}
Интегрируйте приведенный ниже код в клиентскую программу / приложение, чтобы закрыть потоковую передачу.
on_die () {
# kill all children
pkill -KILL -P $$
}
trap 'on_die' closeStreaming