尝试在android中传输IP摄像头时出现黑屏

尝试在android中传输IP摄像头时出现黑屏,android,streaming,mjpeg,ip-camera,Android,Streaming,Mjpeg,Ip Camera,我正在开发一个android应用程序来监控一些IP摄像头。 我正在使用流媒体播放视频 我有三台照相机 -摄像头1:我在互联网上找到的一个公共摄像头,没有用户/密码。 -摄像机2:公共摄像机,但这台需要用户名/密码。 -摄像头3:我将在我的应用程序中最终使用的摄像头。它还将要求提供凭据。 我的主要活动中的代码如下: 公共类MainActivity扩展活动{ 私家车; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedIn

我正在开发一个android应用程序来监控一些IP摄像头。 我正在使用流媒体播放视频

我有三台照相机

    -摄像头1:我在互联网上找到的一个公共摄像头,没有用户/密码。
    -摄像机2:公共摄像机,但这台需要用户名/密码。
    -摄像头3:我将在我的应用程序中最终使用的摄像头。它还将要求提供凭据。
我的主要活动中的代码如下:

公共类MainActivity扩展活动{
私家车;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//摄像机1
字符串URL=”http://216.62.222.101/mjpg/video.mjpg";
//摄像机2
//字符串URL=”http://user:user@iprobocam.marmitek.com/cgi/mjpg/mjpg.cgi”;
//摄像机3
//字符串URL=”http://MyIp:MyPort/mjpg/video.mjpg";
requestWindowFeature(窗口。功能\u无\u标题);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);
mv=新视图(本);
setContentView(mv);
mv.setSource(MjpegInputStream.read(URL));
mv.setDisplayMode(MjpegView.SIZE\U最佳匹配);
mv.showFps(真);
}
公共无效暂停(){
super.onPause();
mv.stopPlayback();
}
我可以毫无问题地流式传输摄像头1。当我使用摄像头2或3运行应用程序时,没有错误,也没有警告,但我得到的最多是一个黑屏。我认为这是身份验证的问题,但如果我将其从摄像头中删除,我会得到相同的结果,即黑屏

使一些相机工作而其他相机不工作的相机之间有什么区别

提前感谢您的帮助

---编辑---

我在使用摄像头2运行应用程序时发现了一些奇怪的事情。 当调用方法
MjpegInputStream.readMjpegFrame
时,我在
MjpegView
类中捕捉到一个异常。 深入观察,我注意到方法
getendofseqenue
总是返回1,而Camera 1(工作正常的方法)返回更高的值(介于66和68之间)

我希望这能让别人知道这里发生了什么…

我终于解决了

我不知道为什么在我第一次尝试删除身份验证时它不起作用。但是今天我又尝试了一次,现在它起作用了

因此,现在的问题是身份验证。不可能像在浏览器中那样在URL中添加凭据

我刚刚修改了
MjpegInputStream
,以在
HTTPClient
中设置凭据:

DefaultHttpClient-httpclient=newdefaulthttpclient();
httpclient.getCredentialsProvider().setCredentials(新的AuthScope(主机、AuthScope.ANY_端口)、新的UsernamePasswordCredentials(用户名、密码));
res=httpclient.execute(新的HttpGet(URI.create(url));

是的,它终于起作用了

如果您不想输入主机名,它也起作用

CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("username", "password");
provider.setCredentials(AuthScope.ANY, credentials);
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.setCredentialsProvider(provider);
res = httpclient.execute(new HttpGet(URI.create(url)));