OpenCV Android Studio Java IP摄像头未连接



我目前正在尝试使用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();
}

最新更新