将RTSP流保存到android中的mp4文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将RTSP流保存到android中的mp4文件相关的知识,希望对你有一定的参考价值。
我正在开发一个项目,我需要从IPCamera读取输入流。我可以通过rtsp url获取此信息。
显示IP摄像机流。我可以通过使用 -
videoView = (VideoView) this.findViewById(R.id.videoView1);
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoURI(Uri.parse("rtsp://xxxxxxxx/camera1"));
videoView.requestFocus();
现在我想将此流记录到MP4文件中。同样我使用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();
谢谢
答案
使用ffmpeg
。
- 添加
ffmpeg
依赖项。compile 'nl.bravobit:android-ffmpeg:1.1.5'
- 记录流。
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.
以上是关于将RTSP流保存到android中的mp4文件的主要内容,如果未能解决你的问题,请参考以下文章