Прямая трансляция видео с камеры Raspberry Pi в приложение для Android - PullRequest
1 голос
/ 19 сентября 2019
  1. У меня есть несколько устройств Raspberry Pi с встроенной камерой в моем доме и офисе (ИЗДАТЕЛИ).- Издатель (Pi) находится в локальной сети за брандмауэром / маршрутизатором и подключен к Интернету.
  2. У меня есть веб-сервер EC2 (БРОКЕР).Он общедоступен через публичный IP-адрес.
  3. У меня есть приложение для 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/

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

Какое решение подходит, зависит в основном от того, просматриваете ли вы видео в собственном приложении (например, VLC) и что вы подразумеваете под «живым» - обычно «живое вещание» использует HLS, который обычно добавляет не менее 5и часто ближе к 30 секундам задержки, когда он загружает и воспроизводит последовательности коротких видеофайлов.

  • Если вы можете допустить задержку, HLS - самое простое решение.

  • Если вы хотите что-то в режиме реального времени (<0,300 секунды с задержкой) и просматриваете видео через собственное приложение, RTSP - самое простое решение. </p>

  • Если выхотел бы что-то в режиме реального времени и хотел бы просмотреть его в веб-браузере, Broadway.js, Media Source Extensions (MSE) и WebRTC - это три доступных решения.Broadway.js ограничен H.264 Baseline и работает только прилично с поддержкой холста с GPU-ускорением - поддерживается не во всех браузерах.MSE также не поддерживается во всех браузерах.WebRTC имеет лучшую поддержку, но также является самой сложной из трех.

Для видео в реальном времени от Raspberry Pi, который работает в любом браузере, взгляните на Alohacam.io (полное раскрытие: я автор).

0 голосов
/ 20 сентября 2019

В основном, с raspvid / ffmpeg у вас есть простая IP-камера.Таким образом, любая архитектура, применимая в этом случае, будет работать для вас.Например, посмотрите на эту архитектуру , где вы устанавливаете Nimble Streamer на свой компьютер AWS, затем обрабатываете этот поток и получаете URL для воспроизведения (HLS или любой другой подходящий протокол).Этот URL может быть воспроизведен в любом аппаратном / программном проигрывателе по вашему выбору и также вставлен в любой веб-проигрыватель.

Так что ваш подход 3 - это HLS вместо WerRTC.

...