Получение видеопотока с IP камеры на андроиде

У меня есть IP-камера, которая транслирует видео в формате MJPEG. Теперь моя цель — получить его и отобразить в моем собственном приложении для Android. Для этого у меня есть три альтернативы программирования на платформе Android:

  1. Использование встроенного класса Android MediaPlayer
  2. Использование библиотеки FFMPEG в родном C и доступ к ней через JNI
  3. Использование порта GStreamer на Android для получения потока

Поэтому, пожалуйста, предложите лучшее решение?

У меня нет опыта работы с FFMPEG или GStreamer. Так какова целесообразность этого?


person Bhanu Challa    schedule 21.05.2012    source источник
comment
Чтобы добавить несколько деталей, я хочу получать поток на Samsung Galaxy Tab 10.1 (под управлением Android 3.2 Honeycomb), а IP-камера передает потоковое видео RTSP (TCP через UDP в MPEG-4) с определенным URL-адресом и на указанный номер порта. А теперь предложите вариант из списка...   -  person Bhanu Challa    schedule 23.05.2012
comment
Чтобы обновить прогресс, я попробовал вариант 1 (используя MediaPlayer) с URL-адресом в указанном формате для потоковой передачи RTSP. Но он вылетает с ошибкой подготовки IOException.: status=0x1. Есть идеи по этому поводу??   -  person Bhanu Challa    schedule 23.05.2012
comment
Чтобы проверить, поддерживается ли конкретный поток, я проверил веб-сайт Android, а также установил несколько приложений для Android, таких как VPlayer и IPCamViewer, для проверки потока. Они умеют играть без проблем. Это означает, что формат видео поддерживается, так в чем еще может заключаться проблема?   -  person Bhanu Challa    schedule 23.05.2012
comment
Я застрял в похожей ситуации, не могли бы вы сообщить мне решение, если вы смогли это исправить. Идеальное решение - использовать только Gstreamer, но я застрял в создании и компиляции Gstreamer.   -  person abhy    schedule 25.07.2012
comment
@abhy, у вас есть код GStreamer, чтобы сделать то же самое? Я также изучил этот вариант и мог бы собрать библиотеку из этих инструкций. Но не удалось заставить код работать.... если он у вас есть, поделитесь им со мной, и я могу проверить эту альтернативу. Иначе мы оба зря теряем время....   -  person Bhanu Challa    schedule 26.07.2012
comment
Привет! Спасибо за ответ. Я работаю только над той ссылкой Androgenizer, которую вы указали выше. Кстати, это то, что вы ищете: gstreamer.freedesktop.org/modules/gst- android.html Кроме того, я не могу понять, как связать вещи с Androgenizer. Если я буду следовать инструкциям Androgenizer, как вы думаете, нужно ли нам писать собственные классы JNI, или они будут построены автоматически. Для справки я также нашел код VLC wiki.videolan.org/AndroidCompile , не знаю, будет полезно или нет.   -  person abhy    schedule 27.07.2012
comment
@ajeetvijayvergiya ... да, ваша помощь очень ценна .. не могли бы вы опубликовать рабочую копию кода .. это беспокоило очень давно !!!   -  person Bhanu Challa    schedule 29.10.2012
comment
Я нашел следующую [тему о потоковой передаче MJPEG][1] [1]: stackoverflow.com/questions/3205191/android-and-mjpeg/ Посмотрите, поможет ли это вам.   -  person Chris Margonis    schedule 13.04.2013
comment
Вы пытались загрузить URL-адрес в веб-просмотре? если это так, вы можете интегрировать простой веб-просмотр для потоковой передачи видео.   -  person Emel Elias    schedule 18.08.2014
comment
Используйте этот stackoverflow.com/questions/3205191/android-and-mjpeg, это может вам помочь   -  person Vaishali Sutariya    schedule 22.08.2014
comment
@abhy, у меня это работает на C++. Если хотите, могу поделиться кодом.   -  person Bhanu Challa    schedule 22.09.2014
comment
@BhanuChalla Привет! Здорово знать, что ты сделал это. Будет здорово, если вы поделитесь кодом или выложите его в pastebin, или, если он большой, вы можете выложить его на git. Сейчас не требуется, хотя и на моей стороне, но, возможно, это поможет кому-то другому или, может быть, мне в будущем. Я ценю, что вы заботитесь о старых темах. Спасибо.   -  person abhy    schedule 30.09.2014
comment
@abhy, обязательно сделаю это. Спасибо.   -  person Bhanu Challa    schedule 30.09.2014


Ответы (2)


Используйте для этого gstreamer.

Я использовал gstreamer на beagleboard с процессором 1 ГГц для получения изображения с 2 камер со скоростью 30 кадров в секунду с очень низкой вычислительной мощностью процессора.

Gstreamer умеет объединять изображения, добавлять строки, менять форматы. И легко представляет вам то, что вы хотите, в потоке. Единственное, что вам нужно сделать, это добавить черные ящикидруг друга.

Вы можете добавлять черные ящики как динамически, так и статически.

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

person ibrahim demir    schedule 24.08.2014

Чтобы протестировать третий вариант (gstreamer), вы можете использовать это приложение: https://play.google.com/store/apps/details?id=pl.effisoft.rpicamviewer2. Вы также можете открыть предварительный просмотр gstreamer из своего кода, используя следующий код:

Intent intent = new Intent("pl.effisoft.rpicamviewer2.PREVIEW");
int camera =0;

//--------- Basic settings
intent.putExtra("full_screen", true);

intent.putExtra("name"+camera, "My pipeline name");
intent.putExtra("host"+camera, "192.168.0.1");
intent.putExtra("port"+camera, 5000);
intent.putExtra("description"+camera, "My pipeline description");
intent.putExtra("uuid"+camera, UUID.randomUUID().toString() );
intent.putExtra("aspectRatio"+camera, 1.6);
intent.putExtra("autoplay"+camera, true);

//--------- Enable advanced mode
intent.putExtra("advanced"+camera, true);   //when advanced=true, then     custom_pipeline will be played
                                        //when advanced=false, then pipeline will be generated from host, port (use only for backward compatibility with previous versions)
intent.putExtra("custom_pipeline"+camera, "videotestsrc ! warptv ! autovideosink");

//--------- Enable application extra features
intent.putExtra("extraFeaturesEnabled"+camera, false);

//--------- Add autoaudiosink to featured pipeline
intent.putExtra("extraFeaturesSoundEnabled"+camera, false);

//--------- Scale Video Stream option
intent.putExtra("extraResizeVideoEnabled"+camera, false);
intent.putExtra("width"+camera, 320);       //used only when extraResizeVideoEnabled=true
intent.putExtra("height"+camera, 200);      //used only when extraResizeVideoEnabled=true

//--------- Add plugins
ArrayList<String> plugins = new ArrayList<String>();
intent.putExtra("plugins"+camera, plugins);

intent.setPackage("pl.effisoft.rpicamviewer2");
startActivityForResult(intent, 0);
person zuko    schedule 29.07.2016