#ffmpeg #rtsp #nest-device-access
Вопрос:
Используя API доступа к устройствам Google Nest, я могу сгенерировать поток RTSP-камеры с помощью GenerateRtspStream
команды и впоследствии остановить поток с помощью StopRtspStream
команды. Имеет смысл, однако по умолчанию эти потоки работают только в течение 5 минут, поэтому API также содержит другую команду: ExtendRtspStream
.
На первый взгляд, это звучит так, как будто он должен «расширить» поток, который вы изначально создали, однако эти URL-адреса потока RTSP включают auth
параметр запроса, и расширение потока просто выдает новый токен для использования для этого, что означает, что URL-адрес для потока меняется каждый раз, когда он расширяется. Таким образом, на самом деле поток вообще не расширяется, так как URL-адрес, который вы используете для доступа к потоку, все равно становится недействительным, и вам нужно перезапустить его с новым URL-адресом, чтобы продолжить просмотр потока. Так в чем же смысл? Вы также можете просто вызвать GenerateRtspStream
команду и переключиться на нее, как только истечет срок действия первой. Возможно, есть какой-то способ плавно изменить URL RTSP в середине потока, о котором я не знаю, используя FFMPEG? Или иметь прокси-сервер, который транслирует статический RTSP-URL и плавно переключает фактический URL-адрес каждый раз, когда он расширяется?
Напыщенная речь начинается здесь: я действительно надеюсь, что такое поведение на самом деле является ошибкой или недосмотром в дизайне API, и это ExtendRtspStream
должно поддерживать один и тот же URL-адрес столько, сколько необходимо, потому что ужасно бессмысленно иметь поток RTSP, который остается живым максимум в течение 5 минут. Черт возьми, было бы полезнее иметь API, который просто возвращает последний снимок одного изображения с камеры каждые 10 секунд или около того, но, увы, для этого тоже нет API.
Комментарии:
1. Вы нашли способ расширить поток, не делая его недействительным?
2. Нет, я не смог найти никого, с кем можно было бы связаться, чтобы подтвердить, является ли такое поведение преднамеренным или нет (и если да, то как они ожидают, что кто-то действительно будет его использовать).
3. Я понимаю. Ну, по крайней мере, это согласуется с тем, что SDM API ужасно использовать.
4. FWIW, мое решение состояло в том, чтобы параллельно запустить другого подписчика с интервалом ~3 минуты (3 минуты, потому что для запуска канала может потребоваться некоторое время). Меня интересует только звук, поэтому я провожу перекрестную корреляцию между соседними клипами, чтобы найти, когда они перекрываются, и объединяю клипы для одного непрерывного сегмента.
5. Умно! Это то, к чему, как вы думаете, вам не придется прибегать, но я рад, что вы нашли способ это сделать