2012-05-21 2 views
9

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

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

Итак, пожалуйста, предложите лучшее решение?

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

+0

Чтобы добавить несколько деталей, я хочу, чтобы получить поток на Samsung Galaxy Tab 10.1 (под управлением Android 3.2 Honeycomb) и IP-камера потокового RTSP видео (TCP по протоколу UDP в формате MPEG-4) с определенным URL-адресом и на выделенном порту no. Теперь предложите вариант из списка ... –

+0

Чтобы обновить прогресс, я попробовал вариант 1 (используя MediaPlayer) с URL-адресом в указанном формате для потока RTSP. Но он падает, бросая исключение IOException «Подготовить не удалось: status = 0x1». Любые идеи по этому поводу? –

+0

Чтобы проверить, поддерживается ли конкретный поток или нет, я проверил сайт Android, и я также установил несколько приложений для Android, таких как VPlayer и IPCamViewer, для проверки потока. Они могут играть без проблем. Это означает, что поддерживается формат видео, и где еще может быть проблема? –

ответ

1

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

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

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

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

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

0

Чтобы проверить третий вариант (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); 
Смежные вопросы