- У меня есть несколько устройств Raspberry Pi с встроенной камерой в моем доме и офисе (ИЗДАТЕЛИ).- Издатель (Pi) находится в локальной сети за брандмауэром / маршрутизатором и подключен к Интернету.
- У меня есть веб-сервер EC2 (БРОКЕР).Он общедоступен через публичный IP-адрес.
- У меня есть приложение для Android на моем телефоне.Он имеет подключение к интернету через сеть 4G.(ПОДПИСЧИК / ПОТРЕБИТЕЛЬ / КЛИЕНТ)
Я пытаюсь просмотреть прямую трансляцию каждой из камер малины в моем приложении для Android.Проблема скорее концептуальная, чем техническая.Я не могу решить, каким должен быть правильный подход и наиболее эффективный способ достижения этого с точки зрения затрат и задержек.
Подходы, я выяснил, основываясь на моих исследованиях по этому вопросу: -
Подход 1:
1. Потоковая камера в RTSP / RTMP в пиустройство через raspvid / ffmpeg
2. Иметь код в устройстве pi, который читает поток RTSP, сохраняет его в AWS S3
3. Иметь промежуточное ПО, которое транскодирует поток RTSP и сохраняет его в формате, доступном для мобильного приложения.через S3 url
Подход 2:
1. Потоковая камера в RTSP / RTMP в устройстве pi через raspvid / ffmpeg
2. Имейте код вустройство pi, которое читает поток RTSP, передает его на сервер удаленного сбора кадров (ImageZMQ).EC2 можно использовать здесь.
3. Наличие промежуточного программного обеспечения, которое транскодирует кадры в поток RTSP и сохраняет его в формате на S3, который доступен для мобильного приложения через общедоступный URL-адрес S3
подход 3:
1. Запустите потоковую передачу камеры в формате WebRTC, запустив веб-браузер.
2. Отправьте поток на медиа-сервер, такой как Kurento.EC2 можно использовать здесь.
3. Создание уникального общедоступного URL-адреса webrtc для каждого потока
4. Доступ к видео webrtc с помощью мобильного приложения
Подход 4:
1.Потоковая камера в RTSP / RTMP в устройстве pi через raspvid / ffmpeg
2. Захватите поток через клиент Amazon Kinesis, установленный на устройствах.
3. Публикация потока Kinesis в облаке AWS
4. Создать Lambda-хранилище для перекодирования и сохранить его на S3
5. Предоставить мобильному приложению доступ к видеопотоку через общедоступный S3 url
Подход 5: - (Довольно сложный, включающий серверы STUN / TURN для обхода NAT)
1. Потоковая передача камеры в RTSP / RTMP на устройстве pi через raspvid / ffmpeg
2. Захватите поток и отправьте его на медиасервер как gstreamer.EC2 можно использовать здесь.
3. Используйте live555-прокси или модуль RTMP ngnix.EC2 можно использовать здесь.
4. Создайте уникальную общедоступную ссылку для каждого устройства, но работающую на том же порту
5. Дайте мобильному приложению доступ к видеопотоку по ссылке на устройство
Я открыт длялюбой формат видео, если я не использую какое-либо стороннее коммерческое решение, такое как wowza, antmedia, dataplicity, aws kinesis.Самое важное ограничение, которое у меня есть, это то, что все мои устройства не работают, и я могу получить к ним доступ только через ssh.Поэтому я исключил любую такую опцию, которая включает ручную настройку или взаимодействие с настольным интерфейсом ИЗДАТЕЛЕЙ (Pis).Я могу создавать сценарии для автоматизации всего этого.
Конечная цель - я хочу иметь публичные URL-адреса для каждого из камер Raspberry PI, но все они работают на одном и том же сокете / номере порта, как показано ниже: -
rtsp://cam1-frontdesk.mycompany.com:554/
rtsp://cam2-backoffice.mycompany.com:554/
rtsp://cam3-home.mycompany.com:554/
rtsp://cam4-club.mycompany.com:554/