在Android上获取IP Camvideostream(MJEPG)

我目前正在做一组AndAR项目,我是负责videostream入Android手机的人。 我find了一台D-Link DCS-920 IP摄像机,我发现它使用MJPEG编解码器作为实时videostream,networking服务器使用Jview查看实况stream。 据我所知,MJPG不是支持Android操作系统的文件types,所以我提出了一个想法,而不是使用ImageView,我使用WebView来stream式传输video。 我实现了一个非常简单的概念,它的工作原理! 但问题是,刷新率是可怕的。 我得到的video图像(例如: http://sofzh.miximages.com/android/image.jpg : http://sofzh.miximages.com/android/image.jpg )在WebView上查看和实现一个定时器来控制刷新率(应该设置为30fps,这是每33ms刷新),但它只能上升到500毫秒的间隔,任何较低的间隔,我发现它不会更平滑,有时图像不会加载和连接是不稳定的(例如:下降)。 难道这是我刷新速度超过它可以收到? 但在Web服务器Jview上没有问题! 试图findjview的源代码,但我没有希望。 无论如何,这是我写的代码

 package org.example.test; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.webkit.WebView; import android.widget.Button; import android.widget.EditText; public class Webview extends Activity { public WebView webView; public Timer autoUpdate; public String url; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webView = (WebView) findViewById(R.id.webview); webView.getSettings(); final EditText urlText = (EditText) findViewById(R.id.urlText); //Buttons//////////////////------------ final Button connectB = (Button)findViewById(R.id.connectButton); connectB.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //Actions goes here url = urlText.getText().toString(); webView.loadUrl(url); timerSetup(); } }); final Button exitB = (Button)findViewById(R.id.exitButton); exitB.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //Actions goes here finish(); } }); } //refresh timer//////////////----------------- public void timerSetup(){ autoUpdate = new Timer(); autoUpdate.schedule(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { //Actions goes here webView.loadUrl(url); } }); } }, 0, 500);//refresh rate time interval (ms) } } 

无论如何,我可以得到至less15fps的videostream/有更快的刷新率? 有没有这样的事情,我可以使用MJPEG查看器/源代码来显示这些图像?

这是应用程序的屏幕截图http://sofzh.miximages.com/android/video.jpg.html (没有足够的点张贴图片):(

我只需要使videostream在15-30fps左右。 任何build议/帮助将非常赞赏:)谢谢!

Solutions Collecting From Web of "在Android上获取IP Camvideostream(MJEPG)"

而不是Arduino,你可以使用树莓派,它应该有足够的CPU能力来控制车辆,并在同一时间转换videostream。 当然,你需要把你所有的Arduino软件移植到Raspberry …

MJPEG是向移动设备传送运动video的非常低效的方式,因为每个帧都是压缩的,因为它是独立的图片。 对于一个不需要video的应用程序(有人问上周在观看等待线的照相机),每秒钟推动一个静态帧的解决scheme听起来不错。

如果您需要运动video,我build议您在MJPEG上将您的networking服务器转码为支持帧到帧压缩的支持的video格式。 这会导致无论是通过用户的3G连接,还是从服务器到所有客户端,都会推送更less的数据。 你应该只需要运行一个代码转换引擎来支持所有的客户端 – 你可以使用同一个android和iphone设备,但是如果你的摄像头输出的话,你也可以为平板电脑和电脑提供更高的分辨率输出足以certificate这一点。

在android上,如果我们用CPU解码一个jpeg,它将花费40-100ms。 如果我们想要播放mjpeg到15-30fps,我们需要硬件JPEG解码器。

有一个有用的以前的SO讨论和这个伟大的代码 。 你会尝试让我们知道,如果这对你有用。

您可以使用MjpegView类直接显示mjpegstream。 https://code.google.com/p/android-camera-axis/source/browse/trunk/serealisation/src/de/mjpegsample/MjpegView/MjpegView.java?r=33

你将不得不在这个类上实现一些AsyncTasks来正常工作。

祝你好运