我正在写一个android应用程序,显示从我的ip摄像头流。我面临的问题是,当我在浏览器中输入摄像头的url并经过身份验证时,它会显示一个显示流的html页面,url为
http://192.168.1.103:81你可以
我已经做了很多谷歌搜索,并尝试了几个代码,但他们都失败了,因为他们假设url为http://ip:port/video.mjpeg之类的东西在我的情况下,我没有视频,但一个html页面流视频,因此无法获得流编程。请帮助我完成我的期末论文设计。提前感谢!!(((
package com.example.ipcam;
import java.util.HashMap;
import java.util.Map;
import com.example.ipcam.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends Activity implements MediaPlayer.OnPreparedListener , SurfaceHolder.Callback {
final static String USERNAME = "admin";
final static String PASSWORD = "";
final static String Rtsp_URL = "http://192.168.1.103:81/index.htm";
private MediaPlayer _mediaPlayer;
private SurfaceHolder _surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.setBackgroundDrawableResource(android.R.color.black);
setContentView(R.layout.activity_main);
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
_surfaceHolder = surfaceView.getHolder();
_surfaceHolder.addCallback(this);
_surfaceHolder.setFixedSize(320, 240);
}
@Override
public void surfaceChanged(SurfaceHolder sh, int f, int w, int h) {}
@Override
public void surfaceCreated(SurfaceHolder sh){
_mediaPlayer=new MediaPlayer();
_mediaPlayer.setDisplay(_surfaceHolder);
Context context = getApplicationContext();
Map<String, String>headers = getRtspHeaders();
Uri source = Uri.parse(Rtsp_URL);
try{
_mediaPlayer.setDataSource(context, source, headers);
_mediaPlayer.setOnPreparedListener(this);
_mediaPlayer.prepareAsync();
}
catch (Exception e) {
}
}
@Override
public void surfaceDestroyed(SurfaceHolder sh) {
_mediaPlayer.release();
}
private Map<String, String> getRtspHeaders() {
Map<String, String> headers = new HashMap<String, String>();
String basicAuthValue = getBasicAuthValue(USERNAME, PASSWORD);
headers.put("Authorization", basicAuthValue);
return headers;
}
private String getBasicAuthValue(String usr, String pwd) {
String credentials = usr + ":" + pwd;
int flags = Base64.URL_SAFE | Base64.NO_WRAP;
byte[] bytes = credentials.getBytes();
return "Basic " + Base64.encodeToString(bytes, flags);
}
@Override
public void onPrepared(MediaPlayer mp) {
_mediaPlayer.start();
}
}
我试过http://ijoshsmith.com/2014/01/25/video-streaming-from-an-ip-camera-to-an-android-phone
http://visitor:visitor@888.888.888.888:88/videostream.cgi
使用这个来自动登录到摄像机,访问者是访问者的用户名和密码