我目前正在尝试使用android studio开发一个应用程序,该应用程序连接两个IP摄像头并同时流式传输它们。
我目前在使用OpenCV video capture
连接我的IP相机时遇到问题,使用以下url,制造商确认该url是正确的
rtsp://(myUsername):(myPassword)@192.168.0.34:554/stream1
这个url也适用于VLC播放器,但当我运行应用程序时,我没有收到连接或错误消息,检查连接是否与capture.isOpened().
打开
我使用的相机是tp-link tapo 100
如果有人有什么建议,那就太好了,谢谢。
videoCapture = new VideoCapture();
videoCapture.open("rtsp://(myUsername):(myPassword)@192.168.0.34:554/stream1");
if (!videoCapture.isOpened()) {
System.out.println("ERROR CONNECTING TO CAMERA");
} else {
System.out.println("video is captured!");
}
请发布您从logcat获得的错误日志open cv不像通常的http
链接那样处理rtsp
链接,您需要使用帧,然后将这些帧转换为视频
尝试使用MediaPlayer,您只需要配置XML并为额外的相机添加即可。
代码
公开课MainActivity扩展了Activity实现了MediaPlayer。OnPreparedListener,SurfaceHolder。回调{
final static String USERNAME = "admin";
final static String PASSWORD = "camera";
final static String RTSP_URL = "Your URL Goes Hear";
private MediaPlayer _mediaPlayer;
private SurfaceHolder _surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Set up a full-screen black window.
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);
// Configure the view that renders live video.
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
_surfaceHolder = surfaceView.getHolder();
_surfaceHolder.addCallback(this);
_surfaceHolder.setFixedSize(1024, 600);
}
/*SurfaceHolder.Callback*/
@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
{
// Specify the IP camera's URL and auth headers.
_mediaPlayer.setDataSource(context, source, headers);
// Begin the process of setting up a video stream.
_mediaPlayer.setOnPreparedListener(this);
_mediaPlayer.prepare();
}
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);
}
/*MediaPlayer.OnPreparedListener*/
@Override
public void onPrepared(MediaPlayer mp)
{
_mediaPlayer.start();
}