Closed satsis closed 2 years ago
Стрим открывается удалённо через VLC плеер по ссылке rtsp://admin:PASS@195.123.213.13:554/Streaming/Channels/101/
Там где стоит бот ffmpeg -loglevel verbose -i "rtsp://admin:PASS@195.123.213.13:554/Streaming/Channels/101/" -c:v copy -c:a copy -t 10 /tmp/test_cam_video.mp4
ffmpeg version 4.2.7-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configuration: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
[tcp @ 0x561e7d693a00] Starting connection attempt to 195.123.213.13 port 554
[tcp @ 0x561e7d693a00] Successfully connected to 195.123.213.13 port 554
[rtsp @ 0x561e7d691700] SDP:
v=0
o=- 1665939201836179 1665939201836179 IN IP4 192.168.0.31
s=Media Presentation
e=NONE
b=AS:5050
t=0 0
a=control:rtsp://195.123.213.13:554/Streaming/Channels/101/
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=x-dimensions:1920,1080
a=control:rtsp://195.123.213.13:554/Streaming/Channels/101/trackID=1
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z01AKJpXA8ARPywgAADhAAAr8hCA,aPqOIA==
a=Media_header:MEDIAINFO=494D4B48010200000400000100000000000000000000000081000000000000000000000000000000;
a=appversion:1.0
[rtsp @ 0x561e7d691700] setting jitter buffer size to 500
[rtsp @ 0x561e7d691700] UDP timeout, retrying with TCP
[rtsp @ 0x561e7d691700] method PAUSE failed: 551 Option not supported
[rtsp @ 0x561e7d691700] Could not find codec parameters for stream 0 (Video: h264, 1 reference frame, none(left)): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, rtsp, from 'rtsp://admin:PASS@195.123.213.13:554/Streaming/Channels/101/':
Metadata:
title : Media Presentation
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264, 1 reference frame, none(left), 90k tbr, 90k tbn, 180k tbc
Output #0, mp4, to '/tmp/test_cam_video.mp4':
Output file #0 does not contain any stream
Якщо порт 8023 прокидується на 80-й порт (адмін-панель), то відповідно вам ще треба прокинути і на RTSP-порт 554. Загалом, треба щоб запрацювала команда ffmpeg:
ffmpeg -loglevel verbose -i "rtsp://admin:PASS@195.123.213.13:554/Streaming/Channels/101/" -c:v copy -c:a copy -t 10 /tmp/test_cam_video.mp4
А конкретно ця не працює мабуть тому, що порт 554 ззовні недоступний.
Якщо порт 8023 прокидується на 80-й порт (адмін-панель), то відповідно вам ще треба прокинути і на RTSP-порт 554. Загалом, треба щоб запрацювала команда ffmpeg:
Справа в тому, що відео працює нормально будь де. На телефоні бо в программі на компі. Порти прокунуті. rtsp://admin:PASS@195.123.213.13:554/Streaming/Channels/101/ цю ссилку я відкриваю с іншого міста в vlc плеері і вона працює. бот кидає скрини по команді. Він не пише відео. у другій мессагі я скинув лог команди В мене прокинуті порти и на веб и на RTSP - tcp
А якщо спробувати прямо вказати -rtsp_transport tcp
?
ffmpeg -loglevel verbose -rtsp_transport tcp -i "rtsp://..."
Output #0, mp4, to '/tmp/test_cam_video.mp4': Metadata: title : Media Presentation encoder : Lavf58.29.100 Stream #0:0: Video: h264 (Main), 1 reference frame (avc1 / 0x31637661), yuv420p(progressive, left), 1920x1080 (0x0), q=2-31, 25 fps, 25 tbr, 90k tbn, 90k tbc Stream mapping: Stream #0:0 -> #0:0 (copy) Press [q] to stop, [?] for help [mp4 @ 0x55941d592040] Non-monotonous DTS in output stream 0:0; previous: 0, current: -18000; changing to 1. This may result in incorrect timestamps in the output file. [mp4 @ 0x55941d592040] Non-monotonous DTS in output stream 0:0; previous: 1, current: -14400; changing to 2. This may result in incorrect timestamps in the output file.
Так пише.
А у вас остання версія бота, чи котрась із попередніх? Оскільки зараз в боті при записі такого відео цей параметр -rtsp_transport
обов'язковий і береться з конфігу (по замовчуванню tcp
).
# Video Gif Command. Hardcoded aac audio to mitigate any issues regarding
# supported formats for mp4 container.
FFMPEG_CMD_VIDEO_GIF = (
f'{_FFMPEG_BIN} {_FFMPEG_LOG_LEVEL} '
'{rtsp_transport} '
'-i {video_source} '
'-c:v copy -c:a aac '
'-t {rec_time} '
'{filepath}'
)
Стара версія була. Що таке api_id and api_hash strings to the same keys ? Дуже багато незрозумілого для мене. Як оновити, навіщо оці параметри і де їх брати.
Там одразу посилання в тексті. Коли зайдете, вони будуть показані на сторінці. Це потрібно для бібліотеки, котра працює з АРІ телеграму напряму, тому може завантажувати місткі файли до 2гб (якщо ви преміум користувач, то ще більші).
Наприклад, якщо ви будете використовувати функціонал DVR, то він може вам аплоадити відео з ваших камер у вашу телеграм групу, в якій буде бот.
Creating hikvision_srs_server ... error
ERROR: for hikvision_srs_server Cannot start service hikvision-srs-server: driver failed programming external connectivity on endpoint hikvision_srs_server (8f9c2029889bc8c35f96a8010305a1ed80bb2ad4a1eae946b6ca44e457f9bad2): Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use
ERROR: for hikvision-srs-server Cannot start service hikvision-srs-server: driver failed programming external connectivity on endpoint hikvision_srs_server (8f9c2029889bc8c35f96a8010305a1ed80bb2ad4a1eae946b6ca44e457f9bad2): Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use ERROR: Encountered errors while bringing up the project.
Порт 8080 вже кимось зайнятий, можете змінити тут https://github.com/tropicoo/hikvision-camera-bot/blob/master/docker-compose.yml на 8081 (в самому кінці файлу, там де 8080 до двокрапки)
Нова версія бота кидає чомусь по 2 скрина і також 2 скрина високої якості по команді. і все также не робить запис відео
hikvision_camera_bot | 2022-10-17 01:03:32,724 - [DEBUG] - [OutboundEventDispatcher:33] - Outbound event: SendTextOutboundEvent(event=<Event.SEND_TEXT: 'send_text'>, text='Failed to record /tmp/cam_1-2022-Oct-17--01-03-32-r6x4.mp4 on Podyezd.\nEvent type: record_videogif\nCheck logs.', parse_mode=pyrogram.enums.ParseMode.HTML, message=pyrogram.types.Message
А це вже дивно, там ще інші логи мають бути, від ffmpeg, чому запис відвалився.
Можливо також скиньте ваш конфіг, лише логін/пароль приберіть і айпі камер
А це вже дивно, там ще інші логи мають бути, від ffmpeg, чому запис відвалився.
Можливо також скиньте ваш конфіг, лише логін/пароль приберіть і айпі камер
hikvision_camera_bot | 2022-10-17 01:03:32,583 - [INFO] - [asyncio:1640] - run shell command 'ffmpeg -loglevel error -rtsp_transport tcp -i "rtsp://log:pass@host:8882:555/Streaming/Channels/101/" -c:v copy -c:a aac -t 10 /tmp/cam_1-2022-Oct-17--01-03-32-r6x4.mp4': <_UnixSubprocessTransport pid=14 running>
смущает 2 порта сразу в логе
Як правильно вказати порт веб, якщо він інакший? в цьому і була проблема схоже.
Без веб порта у вас працює відео, проте не працюють фото і навпаки?
Без веб порта у вас працює відео, проте не працюють фото і навпаки?
так
І підкажіть як правильно зупинити все, щоб перечитати новий конфіг
Щодо порта, я завтра впиляю новий конфіг-параметер, а зараз можна спробувати змінити цю 13-ту лінійку https://github.com/tropicoo/hikvision-camera-bot/blob/69c3ae1e80cc358b7e9f16c86ee16b61be366d53/hikcamerabot/clients/hikvision/enums.py#L13
PICTURE = ":8882/ISAPI/…
А зупинити все це в терміналі docker-compose stop -t 0
, потім так як в інструкції запускаєте
Так не вийде. В мене дві камери. Краще завтра візьму обнову. Дякую.
І чому шле по дві мессаги? Одна с помилкою, друга з відео. Як відключити chat_users ? Може питання в тому, що однакові id у параметрах chat_users, alert_users, startup_message_users ?
Не повинно слати дві месаги, щось відбувається не так. В логах повинно писати всі дії, коли щось відбулось не так, якщо память не підводить.
Чат юзерс і решта по факту повинні містити айдішку вашого юзера, воно розділено на три змінні, бо я, наприклад, шлю алерти в окрему групу, а коли рестартую, не хочу щоб воно слало стартап меседж в ту групу, а лише персонально мені.
PICTURE = ':{port}ISAPI/Streaming/channels/102/picture?snapShotImageType=JPEG'
"rtsp_port": 555,
"port": 8882,
тут я зробив так і робить. Но так і є проблема с подвійними мессагами
Мені знається що я не зупинив старий скрипт і він якось робе у фоні. Навіть після ребуту. Треба ждати ваш фікс і підкажіть як все вбити щоб не робило в фоні
В терміналі заходите в папку з ботом, пишете docker-compose stop -t 0
, а потім docker ps
і дивитесь, чи контейнер з ботом виконується. Його там немає бути.
Дякую. Другий контейнер прибив. Буду чекати фікс, бо управління і картинки не роблять. Тіки відео. Треба виносити порт управління окремо в конфіг.
Пробуйте оновитись
Щодо двійних меседжів - якщо в логах немає нічого підозрілого, то для експерименту можна видалити ось цю лінійку і перезапустити. В теорії, при дублікатному меседжі в логах у вас буде помилка, а в телеграмі не дублікатне фото чи відео.
Якщо так, це проблема бібліотеки, котра працює з телеграм АРІ, або проблема з самим телеграм АРІ, котре може дропнути чи резетнути з'єднання не приславши відповідь назад, хоча контент вам доставить.
Щодо двійних меседжів - якщо в логах немає нічого підозрілого, то для експерименту можна видалити ось цю лінійку і перезапустити. В теорії, при дублікатному меседжі в логах у вас буде помилка, а в телеграмі не дублікатне фото чи відео.
Це був мій косяк. Я не прибив старий контейнер докера і він працював надалі. Я закинув новій скрипт і створив новий контейнер. Запускав ще одну копію з іншим конфігом.
Бот запрацював. Але не роблять команди /md_on_cam_1 /md_off_cam_1 /ld_on_cam_1 /ld_off_cam_1
/tg_on_cam_1 - робе. Telegram stream successfully enabled
На старої версії робило.
hikvision_camera_bot | 2022-10-17 16:09:49,491 - [ERROR] - [ServiceAlarmMonitoringTask:40] - Failed to connect to cam_1 alert stream. Retrying in 0.5 seconds...
Спробуйте оновитись
Дуже дякую. Команди запрацювали. Но в логах помилка не зникла. hikvision_camera_bot | 2022-10-17 22:39:13,184 - [ERROR] - [ServiceAlarmMonitoringTask:40] - Failed to connect to cam_1 alert stream. Retrying in 0.5 seconds... hikvision_camera_bot | 2022-10-17 22:39:13,686 - [INFO] - [ServiceAlarmMonitoringTask:27] - Starting alert pusher task for camera: "Podyezd"
Не працює по руху (
Спробуйте ще раз оновити
Велике дякую!!! На перший погляд супер. Помилок в логах немає. Відео прийшло по детекції руху.
Якщо буде хвилина, розкажіть будь ласка про трансляцію в групу телеграм. Яким чином транслює і як буде віглядати? Це постійне відео чи кусками? В чому різниця від 10 секундних роліків?
І як це відрубити? 🚨 Alert on "cam_1 - Podyezd": Motion Detection те що приходить без відео.
Стрім в телеграм працює як і будь-який стрім - береться відео-потік з камери і відсилається на телеграм сервер, який прописаний в livestream-templates.json
:
"telegram": {
"tpl_kitchen": {
"channel": 101,
"restart_period": 39600,
"restart_pause": 1,
"url": "rtmps://dc4-1.rtmp.t.me/s",
"key": "xxxx-xxxx-xxxx-xxxx"
},
"tpl_basement": {
"channel": 101,
"restart_period": 39600,
"restart_pause": 1,
"url": "rtmps://dc4-1.rtmp.t.me/s",
"key": "xxxx-xxxx-xxxx-xxxx"
}
},
Спершу треба в самій групі стартувати стрім (там покаже ваш персональний ключ, котрий потрібно прописати в key
) і лише після цього включити в боті.
Там є приколи з цим - на різних камерах відео-потік енкодається з різними параметрами і є такі, котрі телеграм не підтримує і треба робити повний ре-енкодінг, що являється ресурсоємким процесом для пристрою, на якому крутиться бот. Наприклад, якщо ваша камера видає відео-потік з pixel format yuvj420p
, то телеграм не буде показувати відео, лише якщо буде yuv420p
. У вас, судячи по всьому, yuv420p
, значить повезло.
По замовчуванню відео- та аудіо-потік з камери просто копіюється "as is" на rtmp-сервер телеграму. А там вже вам або покаже відео, або ні.
Можна пробувати міняти опції в encoding-templates.json
для телеграму, наприклад замінити "acodec": "copy"
на "acodec": "aac"
, якщо не допомогло, значить проблема в відео.
{"direct":
"kitchen_telegram": {
"null_audio": false,
"loglevel": "error",
"vcodec": "copy",
"acodec": "copy",
"asample_rate": -1,
"format": "flv",
"rtsp_transport_type": "tcp"
},
}
І як це відрубити? 🚨 Alert on "cam_1 - Podyezd": Motion Detection те що приходить без відео.
Треба нову змінну в конфіг
Також є SRS (рестрім-сервер), який включається в конфігу. Ваша камера це сервер на слабкому залізі, відповідно, якщо ви законектитесь до камери декількома процесами ffmpeg (наприклад стрім на ютуб, стрім в телеграм групу та відео-алерти), то камера може підвиснути і ffmpeg-процеси повилітають і будуть перезапущені.
Суть SRS-сервера в контексті бота конектитись до вашої камери і брати звідти відео-потік без ре-енкодінга, далі всі інші ffmpeg-процеси конектяться на цей сервер і беруть звідти відео-потік, він спеціально заточений на такі штуки і все працює майже без навантаження на процесор. В результаті камера не висне і можна стрімити куди завгодно.
Дуже дякую за пояснення. Телеграм працює. Перевірив трансляцію. Все добре. Тілки ключа дає с ПК, с телефона ні. Алерти відключив.
Є питання по цьому
"video_gif": {
"on_demand": {
"channel": 101,
"record_time": 10,
"rewind_time": 10,
"tmp_storage": "/tmp",
"loglevel": "quiet",
"rtsp_transport_type": "tcp"
},
"on_alert": {
"channel": 101,
"record_time": 10,
"rewind_time": 10,
"rewind": false,
"tmp_storage": "/tmp",
"loglevel": "quiet",
"rtsp_transport_type": "tcp"
}
Одна камера вмене по детекції, друга по лінії Якщо по лінії то пише роліки 10 секунд один (як треба) Якщо по детекції то пише 20 сек та 2 поспіль.
Раніше на старой версії писало по 10 і там і там.
rewind
. Це коли на SRS-сервері ~10 секунд кешуються в HLS-stream і можна отримати відео на 20 секунд (10 перед детекшном і 10 після як у вас в конфігу, де сам детекшн буде по середині відео).
Там ще є команда /getvideor_cam_1
яка в теорії просто покаже вам відео "з минулого" і "поточного".delay
, скільки секунд чекати між повторним тригером алерта. Тобто спрацював моушн детекшн, ми стартуємо запис відео і 15 секунд ігноруємо повторні алерти (камера спамить ними алерт-стрім) і потім знову пишемо і так по колу, поки алерт-стрім перестане містити детекшн-алерт.
"alert": {
"delay": 15,
В себе я щойно перевірив, мені шле по 1 відео що лінія, що моушн.
Дякую. Мабудь так и є.
Я так розумію вмене стартували одразу і детекція і лінія на одній камері хоча в конфігу так
"alert": {
"delay": 15,
"motion_detection": {
"enabled": true,
"sendpic": false,
"fullpic": false,
"send_videogif": true,
"send_text": false
},
"line_crossing_detection": {
"enabled": false,
"sendpic": false,
"fullpic": false,
"send_videogif": true,
"send_text": false
},
і ще буває така помилка при старті
hikvision_camera_bot | 2022-10-18 12:54:17,407 - [WARNING] - [asyncio:1894] - Executing <Task pending name='Task-1' coro=<main() running at /app/./bot.py:12> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.10/asyncio/futures.py:385, Task.task_wakeup()] created at /usr/local/lib/python3.10/asyncio/base_events.py:429> cb=[_run_until_complete_cb() at /usr/local/lib/python3.10/asyncio/base_events.py:184] created at /usr/local/lib/python3.10/asyncio/tasks.py:636> took 0.277 seconds
Це не помилка, все нормально
Дуже дякую за все. Здоров'я мирного неба!
Подскажите как удалённо подключиться? Во внутренней сети работало. Сервак теперь вне дома. Как подключить если камеры проброшены с разными портами?
What if port forwarding is done and the ports are different? One port is forwarded to 8022 and the other to 8023
"host": "http://141.121.124.216:8023",
or
`hikvision-camera-bot_1 | 2022-10-16 13:50:18,542 - [ERROR] - [RecordVideoTask:68] - Failed to validate /tmp/cam_1-2022-Oct-16--13-50-18-wfc6.mp4: File does not exist hikvision-camera-bot_1 | 2022-10-16 13:50:18,543 - [ERROR] - [RecordVideoTask:51] - Failed to record /tmp/cam_1-2022-Oct-16--13-50-18-wfc6.mp4
`