简体   繁体   English

将RTSP流保存到android中的mp4文件

[英]Save a RTSP stream to mp4 file in android

I am working on a project where I need to read input stream from an IPCamera. 我正在开发一个项目,我需要从IPCamera读取输入流。 I am able to fetch this in through an rtsp url. 我可以通过rtsp url获取此信息。

Display the IPCamera stream. 显示IPCamera流。 I am able to do same by using - 我可以通过使用 -

    videoView = (VideoView) this.findViewById(R.id.videoView1);
    MediaController mc = new MediaController(this);
    videoView.setMediaController(mc);
    videoView.setVideoURI(Uri.parse("rtsp://xxxxxxxx/camera1"));
    videoView.requestFocus();

Now I want to record this stream to an MP4 file. 现在我想将此流记录到MP4文件中。 For same I am using mediarecorder.Here I am stuck. 同样我使用mediarecorder.Here我被卡住了。

    MediaRecorder mediaRecorder = new MediaRecorder();
    //mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
    mediaRecorder.setOutputFile("rtsp://xxxxxxxxx/camera1");
    try {
        mediaRecorder.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    mediaRecorder.start();

Thanks 谢谢

Use ffmpeg . 使用ffmpeg

  1. Add ffmpeg dependency. 添加ffmpeg依赖项。

     compile 'nl.bravobit:android-ffmpeg:1.1.5' 
  2. Record Stream. 记录流。

     String RTSP_URL = "rtsp://<your_rtsp_url>"; final File targetFile = new File( getExternalStoragePublicDirectory( Environment.DIRECTORY_MOVIES ) + "/recording1.mp4" ); final FFmpeg ffmpeg = FFmpeg.getInstance(this); String[] ffmpegCommand = new String[]{ "-i", RTSP_URL, "-acodec", "copy", "-vcodec", "copy", targetFile.toString() }; final FFtask ffTask = ffmpeg.execute( ffmpegCommand, new FFcommandExecuteResponseHandler() { @Override public void onStart() {} @Override public void onProgress(String message) {} @Override public void onFailure(String message) {} @Override public void onSuccess(String message) {} @Override public void onFinish() {} } ); final Timer timer = new java.util.Timer(); TimerTask timerTask = new TimerTask() { @Override public void run() { ffTask.sendQuitSignal(); } }; timer.schedule( timerTask, 30000 ); // Will stop recording after 30 seconds. 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM