我正在开发一个 Android 应用程序来监控一些 IP 摄像机。
我正在使用MjpegView 类 http://code.google.com/p/android-camera-axis/source/browse/trunk/serealisation/src/de/mjpegsample/MjpegView/?r=33流式传输视频。
我有三台相机。
- Camera 1: A public camera i found on internet, without user/password.
- Camera 2: A public camera but this one require username/password.
- Camera 3: The camera I’m going to use finally in my app. It will also ask for credentials.
我的主要活动中的代码如下:
public class MainActivity extends Activity {
private MjpegView mv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Camera 1
String URL = "http://216.62.222.101/mjpg/video.mjpg";
//Camera 2
// String URL = "http://user:[email protected] /cdn-cgi/l/email-protection/cgi/mjpg/mjpg.cgi";
//Camera 3
// String URL = "http://MyIp:MyPort/mjpg/video.mjpg";
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
mv = new MjpegView(this);
setContentView(mv);
mv.setSource(MjpegInputStream.read(URL));
mv.setDisplayMode(MjpegView.SIZE_BEST_FIT);
mv.showFps(true);
}
public void onPause() {
super.onPause();
mv.stopPlayback();
}
我可以毫无问题地传输相机 1。当我使用相机 2 或 3 运行该应用程序时,没有任何错误,也没有警告,但我得到的最多的是黑屏。我认为这是身份验证的问题,但如果我将其从相机中删除,我会得到相同的结果,黑屏。
相机之间有什么区别,使得其中一些相机可以工作,而另一些则不能?
预先感谢您的任何帮助。
- - 编辑 - -
我在使用相机 2 运行应用程序时发现了一些奇怪的事情。
我发现了一个异常MjpegView
类在调用方法时MjpegInputStream.readMjpegFrame
。
更深入地观察我注意到该方法getEndOfSeqeunce
始终返回 1,而相机 1(运行良好的相机)返回更高的值(66 到 68 之间)。
我希望这能让某人了解这里发生的事情......
最后我解决了!
我不知道为什么第一次尝试流式传输该相机并删除身份验证时它不起作用。但今天我又尝试了一次,现在成功了。
所以现在问题出在身份验证上。无法像在浏览器中那样在 URL 中添加凭据。
我刚刚修改了MjpegInputStream
在中设置凭据HTTPClient
:
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(new AuthScope(host, AuthScope.ANY_PORT), new UsernamePasswordCredentials(username, password));
res = httpclient.execute(new HttpGet(URI.create(url)));
是的,终于可以工作了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)