我有一个 IP 摄像机,它以 MJPEG 格式传输视频。现在我的目标是接收它并将其显示在我自己的自定义 android 应用程序中。为此,我在 android 平台上有三种编程选择:
- 使用内置的 Android MediaPlayer 类
- 在本机 C 中使用 FFMPEG 库并通过 JNI 访问它
- 在android上使用GStreamer端口接收流
所以请提出一个更好的解决方案?
我没有使用 FFMPEG 或 GStreamer 的经验。那么这样做的可行性如何呢?
我有一个 IP 摄像机,它以 MJPEG 格式传输视频。现在我的目标是接收它并将其显示在我自己的自定义 android 应用程序中。为此,我在 android 平台上有三种编程选择:
所以请提出一个更好的解决方案?
我没有使用 FFMPEG 或 GStreamer 的经验。那么这样做的可行性如何呢?
使用gstreamer。
我在 beagleboard 上使用了 gstreamer,它具有 1GHz 处理器,用于以 30 fps 的速度从 2 个摄像头拍摄图像,并且 CPU 处理能力非常低。
Gstreamer 能够合并图像、添加字符串、更改格式。并在流中轻松呈现您想要的内容。您唯一需要做的就是相互添加黑匣子。
您可以动态和静态地添加黑盒。
如果您不打算更改流取决于程序中的输入,我建议使用static one。但我不确定它是否适用于android..
要测试第三个选项(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);