Отправить данные камеры дрона из моего приложения на сервер (а затем на клиент)

Мне нужно отправить некоторые видеоданные с камеры дрона на сервер, а затем на клиентскую веб-страницу. Я работаю над приложением для Android, которое взаимодействует с дроном - оно успешно получает вывод камеры дрона и отображает его. У меня уже есть сервер Java (использующий Легкий HTTP-сервер Java), работающий с клиентской веб-страницей которые можно было бы использовать для этой цели. Я придумал два возможных метода:

h264 и Wowza
У меня есть метод обратного вызова, доступный с камеры дрона, который предоставляет массив байтов в кодировке h264. Это должно быть доступно для потоковой передачи через RTP, однако я не нашел никаких библиотек Android/Java для поддержки потоковой передачи из имеющегося у меня источника (libstreaming поддерживает потоковую передачу только с камеры). Если бы можно было передавать входящие массивы байтов h264 в Wowza, я мог бы выяснить, как получить доступ к Wowza от клиента и визуализировать поток. Этот метод не требует использования существующего сервера.

Выборка растровых изображений. Выходные данные камеры отображаются в виде текстур в приложении для Android. Это может быть выбрано для создания растровых изображений, которые могут быть закодированы как Base64 и отправлены на сервер. Затем сервер передает клиенту последнее растровое изображение, и клиент визуализирует растровое изображение с использованием закодированного Base64:

document.getElementById('drone_feed')
            .setAttribute(
                'src', 'data:image/png;base64,' + cameraBase64String
            );

Я успешно реализовал второй метод - представление текстуры сэмплируется каждые 100 мс, а клиент получает текущее закодированное изображение с сервера каждые 100 мс. Очевидно, что этот метод дает очень низкую задержку и низкий FPS, но он работает.

Итак, у меня есть два вопроса:
1. Возможен ли первый метод (h264 и Wowza), и если да, то как я могу передать входящие видеобуферы h264 в Wowza?
2. Если первый метод невозможен возможно, я могу сделать второй метод более эффективным, или есть альтернативный метод, который я не рассматривал?


person DaBigJoe    schedule 31.07.2018    source источник


Ответы (1)


Вы можете сделать это, используя OpenGL с Android GoCoder SDK, чтобы получить кадры с дрона, а затем переслать их в Wowza Streaming Engine или в облако.

Примеры можно найти здесь:OpenGL

person Rose 48    schedule 06.08.2018
comment
Это похоже на возможное решение. Не могли бы вы рассказать подробнее о том, как «захватить кадры» из ленты дрона? Пример, который вы предоставили, взят из GLSurfaceView, а не из TextureView, хотя доступна реализация GLTextureView здесь< /а>. - person DaBigJoe; 06.08.2018