从Android上的IP摄像头接收视频流

时间:2012-05-21 12:52:20

标签: android ffmpeg android-mediaplayer gstreamer ip-camera

我有一台IP摄像机,它是MJPEG格式的流媒体视频。现在我的目标是接收它并在我自己的自定义Android应用程序中显示它。为此,我在android平台上有三个编程选择:

  1. 使用内置的Anrdroid MediaPlayer类
  2. 在本机C中使用FFMPEG库并通过JNI
  3. 访问它
  4. 在Android上使用GStreamer端口接收流
  5. 那么请建议一个更好的解决方案?

    我没有使用FFMPEG或GStreamer的经验。那么这样做的可行性是什么?

2 个答案:

答案 0 :(得分:1)

使用gstreamer

我在beagleboard上使用了gstreamer,它拥有1GHz处理器,能够以30 fps的速度从2台摄像机拍摄图像,并具有极低的CPU处理能力。

Gstreamer能够合并图像,添加字符串,更改格式。并在流中向您展示您想要的内容。您唯一需要做的就是互相添加black boxes

您可以动态和静态添加黑匣子。

如果您不打算更改您的信息流取决于您计划中的输入,我建议使用static one。但我不确定它是否适用于android ..

答案 1 :(得分:1)

要测试第3个选项(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);