Кстати, насколько я понял из Вашего скрипта, во время проблем с трансляцией камера даже не пингуется, так?
Запустите это в терминале, чтобы проверить поведение.
exec_static /usr/local/bin/ffmpeg -timeout 5 -i rtsp://admin:123...@192.168.0.126:1006/mpeg4 -vcodec copy -an -f flv rtmp://localhost:1935/cam1/stream 2>>/mnt/cam1.log;
ffmpeg version 3.1.1 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 4.8.3 (crosstool-NG linaro-1.13.1-4.8-2014.01 - Linaro GCC 2013.11) 20140106 (prerelease) configuration: --enable-cross-compile --cross-prefix=/home/pi/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- --arch=armhf --target-os=$ libavutil 55. 28.100 / 55. 28.100 libavcodec 57. 48.101 / 57. 48.101 libavformat 57. 41.100 / 57. 41.100 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 47.100 / 6. 47.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 1.100 / 2. 1.100 libpostproc 54. 0.100 / 54. 0.100[rtsp @ 0x1835260] Unable to open RTSP for listeningrtsp://admin:123...@192.168.0.126:1006/mpeg4: Cannot assign requested addressexec_static /usr/local/bin/ffmpeg -i rtsp://admin:123...@192.168.0.126:1006/mpeg4 -vcodec copy -an -f flv rtmp://localhost:1935/cam1/stream 2>>/mnt/cam1.log;
ffmpeg version 3.1.1 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 4.8.3 (crosstool-NG linaro-1.13.1-4.8-2014.01 - Linaro GCC 2013.11) 20140106 (prerelease) configuration: --enable-cross-compile --cross-prefix=/home/pi/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- --arch=armhf --target-os=linux --prefix=/home/pi/ffmpeg/build --enable-gpl --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libfdk-aac --enable-nonfree --extra-cflags=-I/home/pi/ffmpeg/build/include --extra-ldflags=-L/home/pi/ffmpeg/build/lib --extra-libs=-ldl --pkg-config-flags=--static libavutil 55. 28.100 / 55. 28.100 libavcodec 57. 48.101 / 57. 48.101 libavformat 57. 41.100 / 57. 41.100 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 47.100 / 6. 47.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 1.100 / 2. 1.100 libpostproc 54. 0.100 / 54. 0.100[rtsp @ 0x1835210] max delay reached. need to consume packet[rtsp @ 0x1835210] RTP: missed 15 packets[h264 @ 0x1838110] left block unavailable for requested intra mode[h264 @ 0x1838110] error while decoding MB 0 11, bytestream 51023[h264 @ 0x1838110] concealing 2769 DC, 2769 AC, 2769 MV errors in I frame[rtsp @ 0x1835210] max delay reached. need to consume packet[rtsp @ 0x1835210] RTP: missed 4 packetsInput #0, rtsp, from 'rtsp://admin:123...@192.168.0.126:1006/mpeg4': Metadata: title : RTSP/RTP stream from Network Video Server comment : mpeg4 Duration: N/A, start: 0.080000, bitrate: N/A Stream #0:0: Video: h264 (Main), yuv420p, 1280x720, 25 tbr, 90k tbn, 180k tbc[tcp @ 0x1838840] Connection to tcp://localhost:1935 failed (Connection refused), trying next address[flv @ 0x1897280] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.Output #0, flv, to 'rtmp://localhost:1935/cam1/stream': Metadata: title : RTSP/RTP stream from Network Video Server comment : mpeg4 encoder : Lavf57.41.100 Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 1280x720, q=2-31, 25 tbr, 1k tbn, 90k tbcStream mapping: Stream #0:0 -> #0:0 (copy)Press [q] to stop, [?] for help[rtsp @ 0x1835210] max delay reached. need to consume packet[rtsp @ 0x1835210] RTP: missed 3 packetsframe= 43 fps=0.0 q=-1.0 size= 620kB time=00:00:02.20 bitrate=2309.4kbits/s speed=4.23x ...Добрый день.Заменил "killall -INT ffmpeg" на "kill -KILL ffmpeg". Проверю - отпишусь. Может быть надо было так: "killall -KILL ffmpeg"?
Кстати, насколько я понял из Вашего скрипта, во время проблем с трансляцией камера даже не пингуется, так?- Нет, дело не в этом. Скрипт направлен на то, чтобы отследить потерю-восстановление связи с камерой (например ее отключили с розетки, а потом включили через время, или отключили Ethernet-кабель, а потом подключили обратно), и после восстановления связи он должен сделать все, чтобы запись с камеры продолжилась.
Запустите это в терминале, чтобы проверить поведение.Запустил, только не в терминале, а добавил вывод ffmpeg в log-файл.Значит, если в "/etc/nginx/nginx.conf" строка такая:
exec_static /usr/local/bin/ffmpeg -timeout 5 -i rtsp://admin:123...@192.168.0.126:1006/mpeg4 -vcodec copy -an -f flv rtmp://localhost:1935/cam1/stream 2>>/mnt/cam1.log;То запись не идет, вот содержимое log-файла:
Но, если в "/etc/nginx/nginx.conf" в этой строке убрать "-timeout 5":
exec_static /usr/local/bin/ffmpeg -i rtsp://admin:123...@192.168.0.126:1006/mpeg4 -vcodec copy -an -f flv rtmp://localhost:1935/cam1/stream 2>>/mnt/cam1.log;
То запись идет, вот содержимое log-файла:
почитайте документацию
почитайте документациюЧитал, в том то и дело что не про ffmpeg а про nginx-rtmp. Я в nginx-rtmp и в ffmpeg новичок, можно еще 2 вопроса?
1. Есть ли в nginx-rtmp опция для удаления самого старого файла из указанной папки, когда свободное место на диске, на котором лежит эта папка менее, например, 1 Гб? Потому что когда место на диске закончилось, он создает новые файлы по 0 байт а старые не затирает. Там есть опция "record_max_size 51200K;", но она просто делает файлы по 50 Мб, - не то что нужно.
2. nginx-rtmp не записывает файлы на съемный диск с файловой системой FAT32 (/mnt/disc), как сделать так чтобы он писал на этот диск?К примеру Midnight Commander при копировании *.flv файлов из "/mnt" в "/mnt/disc" выдает ошибку "Cannot chown target file "/mnt/disc/strea~--15-33-46.flv"Operation not permitted (1)", но там есть кнопка "Skip all", после ее нажатия копируются все файлы.
Вы бы озвучили Вашу задачу, а то запросто окажется, что Вы пытаетесь микроскопом гвозди забивать :(
Используйте внешние инструменты, хотя бы find
покажите вывод команд mount, ls -la /mnt
proc on /proc type proc (rw,relatime)sysfs on /sys type sysfs (rw,relatime)none on /dev type devtmpfs (rw,relatime,size=380812k,nr_inodes=95203,mode=755)/dev/mmcblk0p2 on / type ext4 (rw,noatime,nodiratime,errors=remount-ro,data=ordered)tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)debugfs on /sys/kernel/debug type debugfs (rw,relatime)fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)/dev/sda1 on /mnt/disc type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=ascii,shortname=mixed,quiet,errors=continue)tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime)/dev/mmcblk0p1 on /media/boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=continue)rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)nfsd on /proc/fs/nfsd type nfsd (rw,relatime)tmpfs on /run/user/107 type tmpfs (rw,nosuid,nodev,relatime,size=102716k,mode=700,uid=107,gid=113)tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=102716k,mode=700,uid=1000,gid=1000)total 88drwxrwxrwx 4 root root 12288 Aug 17 17:02 .drwxr-xr-x 21 root root 4096 Aug 4 16:22 ..-rw-r--r-- 1 root root 1702 Aug 17 16:35 11.sh-rw-r--r-- 1 orangepi orangepi 0 Aug 17 17:10 cam1.log-rw-r--r-- 1 root root 0 Aug 17 17:10 cam2.log-rw-r--r-- 1 root root 0 Aug 17 17:10 cam3.logdrwxr-xr-x 2 root root 32768 Aug 17 17:11 discdrwxrwxrwx 2 root root 32768 Aug 17 16:34 mp4Вы бы озвучили Вашу задачу, а то запросто окажется, что Вы пытаетесь микроскопом гвозди забивать :(Мне нужно организовать запись RTSP-стримов с 5-ти IP-камер в файлы *.flv на Винт, который в кармане, который подключен через USB к микрокомпьютеру, который в одной локалке с этими камерами. вот...
Используйте внешние инструменты, хотя бы findвы имеете в виду внешний скрипт в котором используется find?
покажите вывод команд mount, ls -la /mnt
ls -la /mnttotal 88
drwxr-xr-x 2 root root 32768 Aug 17 17:11 disc
Покажите Ваш /etc/fstab
/dev/mmcblk0p2 / ext4 errors=remount-ro,noatime,nodiratime 0 1/dev/mmcblk0p1 /media/boot vfat defaults 0 0tmpfs /tmp tmpfs nodev,nosuid,mode=1777 0 0UUID=6DF7-F18F /mnt/disc vfat quiet 0 0PS. Вообще это азы...
А что подмонтировано для записи?
из-за дисковой подсистемы
А что подмонтировано для записи?Винт 80 Гб в кармане подключенный к Orange Pi PC, на котором и установлен nginx. Когда то устанавливал Nimble Streamer в надежде писать ним, но триал закончился и он видимо мешал работе компьютера. Сделал apt-get remove nimble и процесс kswapd0 перестал загружать на 100% процессор.
Но файлы все равно иногда попадаются "неполные", должны быть 225 Мб, а попадается по 138 Мб, другие тоже должны быть по 187 Мб, а попадаются тоже по 138 Мб, воспроизвести их тоже не получается до конца. Процессор при этом загружен на 30-40%, памяти вроде хватает.В чем еще может быть проблема?
nimblestreamer для работы не требует лицензии. Лицензия нужна только для панели управления им.
Лучше всё же писать архив сразу ffmpeg-ом и сразу чанками для HLS