Подтвердить что ты не робот

Передача видео в реальном времени на сервер с помощью Android

Мы должны записывать видео в реальном времени с помощью камеры Android и отправлять их на сервер, затем другие пользователи будут читать их через браузер или что-то еще.

У меня есть Googled и поиск в SO, и есть несколько примеров о приложении видеопотока, например:

1 Android-eye: https://github.com/Teaonly/android-eye

2 Spydroid-ipcamera: https://code.google.com/p/spydroid-ipcamera/

Однако, похоже, что у них разные среды, большинство приложений запустит HTTP-сервер для потоковых запросов, затем клиент посетит страницу через локальную сеть и увидит видео.

Тогда источником видеопотока и сервером являются оба устройства: enter image description here

Но нам нужна интернет-поддержка: enter image description here

Так что интересно, есть ли альтернативные идеи.

4b9b3361

Ответ 1

Я вижу, что вы правильно спроектировали три этапа на второй диаграмме.

Итак, вам нужно определить, как выбирать между этими протоколами и как их взаимодействовать.  Никто не может дать вам полное решение, но, выполнив корпоративный проект по потоку Android-видео, я попытаюсь выправить ваше зрение к вашей цели.

enter image description here

На вашем снимке есть три части, я подробно изложу слева направо:

1. Устройство Android Streamer

Основываясь на моем опыте, я могу сказать, что Android хорошо передает потоки камеры через RTP из-за родной поддержки, конвертируя ваше видео в FLV дает вам головную боль. (Во многих случаях, например, если позже вы хотите доставить поток на устройства Android.)

Поэтому я бы предложил создать нечто вроде spyDroid.

2. Сервер потоковой передачи

Есть такие инструменты, как Wowza Server, который может получить поток источника и помещать его на выходе сервера для других клиентов. Я полагаю VLC также может это сделать, используя меню "Файл → Стрим", а затем RTSP-видеопоток из вашего приложения на основе spyDroid. Но у меня есть не пробовал это лично.

Также не сложно выполнить собственный собственный сервер стримеров.

Я приведу вам пример:

Для реализации HLS-сервера вам понадобятся только три вещи:

  • Видеофайлы, сегментированные на 10 секций MPEG2. (т.е. файлы .ts)
  • Плейлист m3U8 из кусков.
  • Веб-сервер с простым WebService, который доставляет список воспроизведения клиентам (ПК, Android, iPhone, в основном на каждом устройстве) через HTTP. Затем клиенты просмотрят файл списка воспроизведения и запросят соответствующие куски в соответствии с их сроками. Поскольку почти все игроки имеют встроенную поддержку HLS.

3. Клиентская сторона

Основываясь на наших комментариях, я предлагаю вам захотеть углубиться в потоковое видео Android.

Чтобы завершить проект, этот большой, вам нужно гораздо больше исследований. Например, вы должны иметь возможность отличать RTP от RTSP и понимать, как они связаны друг с другом.

Прочитайте мой ответ здесь, чтобы получить представление о состоянии потокового видеопотока и, пожалуйста, не стесняйтесь спрашивать больше.

Надеюсь, что вы получили общую картину предстоящего путешествия,

Удачи и получайте удовольствие

Ответ 2

Довольно общий вопрос, но я постараюсь дать вам направление для исследования:

Прежде всего вам понадобится ответить на несколько вопросов:

1) Какова природа и цель видеопотока? Это приложение безопасности, где важны детали в неподвижных файлах (тогда вам нужно будет использовать что-то вроде кодека MJPEG), или оно будет отображаться только в движении?

2) Являются источником потока, сервером и клиентами в одной и той же сети, так что RTSP может использоваться для более точного времени, или будет задействована WAN что-то более стабильное, как HTTP?

3) Каково количество одновременных выходных соединений? Другими словами, стоит ли платить за что-то вроде Wowza с надкодирование надстройки (и, возможно, nDVR) или Flussonic или достаточно простого решения, такого как ffserver?

Чтобы сократить длинный рассказ, для дешевого и грязного решения для пары зрителей вы можете использовать что-то вроде IP-камераffserverVLC для Android и не писать ваше собственное программное обеспечение.

Ответ 3

Вы можете справиться с этим так:

Подготовьте предварительный просмотр камеры так, как описано здесь. Объект Camera имеет метод setPreviewCallback в который вы регистрируете обратный вызов предварительного просмотра. Этот обратный вызов предоставляет буфер данных (массив байтов) в формате YUV, который можно передать на ваш сервер.