Запись видео с камер: различия между версиями
Kekaloav (обсуждение | вклад) |
Kekaloav (обсуждение | вклад) |
||
Строка 19: | Строка 19: | ||
#url камеры | #url камеры | ||
CAMURL="rtsp://subaccount:Subxxxxx@10.xx.xx.xx" | CAMURL="rtsp://subaccount:Subxxxxx@10.xx.xx.xx" | ||
#укажите номер кабинета | |||
CAB="302" | |||
#формат даты можно установить по вкусу прочитав man date | |||
DATE=`date +%F-%H-%M` | |||
#файл куда писать. например в самба шару | #файл куда писать. например в самба шару | ||
FILE="/home/share/ | FILE="/home/share/${DATE}-${CAB}-%02d.mp4" | ||
#длительность записи в секундах | #длительность записи в секундах | ||
LEN=4000 | LEN=4000 | ||
#длительность одного файла (программа нарезает запись как Вам надо) | |||
SEGMENT=3600 | |||
ffmpeg -i ${CAMURL} -vcodec copy -acodec copy -map 0 -t ${LEN} -f segment -segment_time | ffmpeg -i ${CAMURL} -vcodec copy -acodec copy -map 0 -t ${LEN} -f segment -segment_time ${SEGMENT} -segment_format mp4 ${FILE} >/dev/null 2>/dev/null & | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Пояснение: знак & в конце означает запустить программу и выйти в shell - то есть по сути сделать программу резидентной или демоном. НО! это работает долго только если программа ничего не выводит (иначе при закрытии shell, когда некуда будет выводить, команда закроется). Чтобы этого не происходило, вывод перенаправлнен в /dev/null - то есть в пустоту. Обратите внимание, Linux имеет два выводных потока - обычный, так называемый stdout и ошибок stderr. И перенаправлять надо оба, что и сделано. Если есть желание почитать что выводит программа, можно перенаправить вывод в файл (только чтобы он был в каталоге, доступном для записи) | Пояснение: знак & в конце означает запустить программу и выйти в shell - то есть по сути сделать программу резидентной или демоном. НО! это работает долго только если программа ничего не выводит (иначе при закрытии shell, когда некуда будет выводить, команда закроется). Чтобы этого не происходило, вывод перенаправлнен в /dev/null - то есть в пустоту. Обратите внимание, Linux имеет два выводных потока - обычный, так называемый stdout и ошибок stderr. И перенаправлять надо оба, что и сделано. Если есть желание почитать что выводит программа, можно перенаправить вывод в файл (только чтобы он был в каталоге, доступном для записи) |
Версия 10:54, 13 декабря 2022
Для записи с IP камер во время диагностики МЦКО удобно использовать например моноблок учителя. Чтобы ничего не забыть прописываем в crontab (файл /var/spool/cron/teacher) расписание диагностик на день, и комп сам их включит и выключит запись через заданное время, а файлы заботливо сложит в указанный Вами каталог, который можно и расшарить.
Также можно писать видео с аналогового видеорегистратора DAHUA (RVI), а также другие с программой стандарта ONVIF по сети. Регистратор при этом используется как конвертор сигнала, наличие в нем HDD по сути необязательно.
URL в случае DAHUA/RVI (возможно не всех моделей - сверяйте с данными производитедя) имеет вид rtsp://admin:<pass>@<ip>:554/cam/realmonitor?channel=4&subtype=0, subtype - поток высокого (0) или низкого (1) разрешения
URL в случае IP регистратора HIKVISION вид rtsp://<user>:<pass>@<ip>:554/ISAPI/Streaming/Channels/102 (Здесть 1- номер канала 2- низкое разрешение) высокое разрешение (1 вместо 2) записывается в H265
Благодаря отстутвию перекодировки, загрузка процессора минимальна, однако формат файла определеный. Для настроенных на ЕЦХД камер в кабинетах информатики это кодек H264. Файл проигрывается проигрывателем VLC
#!/bin/bash
#Данный скрипт удобно запускать из crontab
#url камеры
CAMURL="rtsp://subaccount:Subxxxxx@10.xx.xx.xx"
#укажите номер кабинета
CAB="302"
#формат даты можно установить по вкусу прочитав man date
DATE=`date +%F-%H-%M`
#файл куда писать. например в самба шару
FILE="/home/share/${DATE}-${CAB}-%02d.mp4"
#длительность записи в секундах
LEN=4000
#длительность одного файла (программа нарезает запись как Вам надо)
SEGMENT=3600
ffmpeg -i ${CAMURL} -vcodec copy -acodec copy -map 0 -t ${LEN} -f segment -segment_time ${SEGMENT} -segment_format mp4 ${FILE} >/dev/null 2>/dev/null &
Пояснение: знак & в конце означает запустить программу и выйти в shell - то есть по сути сделать программу резидентной или демоном. НО! это работает долго только если программа ничего не выводит (иначе при закрытии shell, когда некуда будет выводить, команда закроется). Чтобы этого не происходило, вывод перенаправлнен в /dev/null - то есть в пустоту. Обратите внимание, Linux имеет два выводных потока - обычный, так называемый stdout и ошибок stderr. И перенаправлять надо оба, что и сделано. Если есть желание почитать что выводит программа, можно перенаправить вывод в файл (только чтобы он был в каталоге, доступном для записи)
Поправка от автора МОС: на МОС есть особенность - процессы, запущенные пользователем останавливаются при его выходе. Для корректного функционирования записи эту особенность поведения (она зависит от дистрибутива Linux) надо заблокировать. для этого нужно устрановить пакет systemd-settings-disable-kill-user-processes.