Android – потоковая камера как поток RTMP

Я хочу захватить поток камеры с устройства Android и передать его на сервер с RTMP (сервер не в моем распоряжении). Я еще не понял, как создать поток данных с самой камеры, но это касается более поздней проблемы.

На данный момент есть две проблемы: я хочу поддерживать API 9+, а RTMP не является родным, поддерживаемым Android.

Я осмотрел и нашел это сообщение SO. Конвертируйте видео входной поток в RTMP и https://github.com/yixia/VitamioBundle . Первый предложил библиотеку , в которой практически нет документации. Последнее, вероятно, поддерживает его (?), Но для этого требуется API 14+.

Есть ли приличные примеры или библиотеки там, что поддерживает потоковое RTMP с Android-устройства? Я также прочитал кое-что о преобразовании RTSP или FFMPEG, если это жизнеспособный путь, то я думаю, этого будет достаточно.

Изменить 1:

Я нашел эту библиотеку (она очень похожа на упомянутую выше) и попыталась работать. Я импортировал его в Android Studio и написал некоторый код, но он, похоже, рушится внутренне с ошибкой java.lang.NoClassDefFoundError RTSP Codec Factory . Похоже, что это не слишком хорошо работает на Android.

Кроме того, я столкнулся с Adobe AIR несколько раз. Я не хочу кодировать в Action Script 3 (AS3), поскольку эта библиотека будет просто (небольшой) частью родного приложения. Если Adobe Air имеет библиотеку, о которой я не знаю, то я бы с радостью ее интегрировал, если это возможно.

Solutions Collecting From Web of "Android – потоковая камера как поток RTMP"

В принятом ответе на вопрос, который вы связали, кто-то предлагает использовать JavaCV.

Он требует API 8 или новее и имеет класс FFmpegFrameRecorder .

Ссылка на github:

https://github.com/bytedeco/javacv

У них даже есть полный образец захвата flv (он довольно большой, поэтому я не буду вставлять его здесь): https://github.com/bytedeco/javacv/blob/master/samples/RecordActivity.java

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

 private String ffmpeg_link = "/mnt/sdcard/stream.flv"; 

с

 private String ffmpeg_link = "rtmp://<server>:<port>/stream"; 

Вы должны взглянуть на spydroid ; Он делает именно то, что вы ищете. Их сайт можно найти здесь: https://code.google.com/p/spydroid-ipcamera/

Они предоставляют библиотеку, которую вы можете использовать, а также объяснение различных вариантов потоковой передачи и некоторых примеров кода. Указанную информацию можно найти здесь: https://github.com/fyhertz/libstreaming

Если вы можете публиковать на своем устройстве Android с помощью протокола, поддерживаемого ffmpeg (см. Список поддерживаемых протоколов ), вы можете использовать следующую команду для передачи видео на ваш сервер:

 ffmpeg -re -i <input link> -vcodec h264 -ar 44100 -f flv "rtmp://<host>/<publication>"