Android – 保存rtsp(h264)stream到mp4文件

我正在做一个需要的项目

  1. 从一个IPCamera读取input的H.264编码stream – 我可以通过一个rtspurlrtsp://192.168.1.83:8001 /

  2. 显示IPCamerastream – 这是我能够使用的


final VideoView vv = (VideoView) findViewById(R.id.video_view_h264); MediaController mc = new MediaController(getApplicationContext()); vv.setVideoURI(video); vv.setMediaController(mc); vv.requestFocus(); vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { public void onPrepared(MediaPlayer mp) { vv.start(); } }); 

  1. 现在我想logging这个stream到一个MP4文件。 这是我卡住的地方,我正在考虑以下选项

a)MediaRecorder – 基于我的谷歌search,我相信这个类只能从设备相机input。 有没有一种方法来调整,我可以提供来自rtspstream的input?

b)MediaCodec API – 从4.1开始,Android和MediaExtractor和MediaCodec一起发布了这个低级API。 对于这个选项,我认为rtspstream不能用在下面的代码片段中

 final String STREAM_URL = "rtsp://192.168.1.83:8001/"; MediaExtractor mediaExtractor = new MediaExtractor(); mediaExtractor.setDataSource(STREAM_URL); // I get an exception 04-28 18:30:18.914: E/AndroidRuntime(8140): Caused by: java.io.IOException: Failed to instantiate extractor. 

c)我可以做一个从URL读取和存储它像一个文件。 如何将此stream转换为MP4文件? 任何代码片段将非常有帮助。

我也试过使用FFMPEG,但是性能很差,我放弃了这个选项。

上述三个选项的任何input或任何其他选项,我可以考虑将不胜感激。

谢谢 !!

Solutions Collecting From Web of "Android – 保存rtsp(h264)stream到mp4文件"

MediaRecorder确实没有任何处理直接stream媒体内容的支持。 从框架的angular度来看,像MediaExtractorMediaCodec这样的编解码器对象存在parsing器对象,但是没有MediaExtractor器抽象(还)。

AOSPrecordVideo是一个命令行实用程序,旨在用于简单的基于文件的logging。 作为实现的一部分,创build编码器并将其传递给MPEG4Writer观察到的 。 您可能会重复使用此代码,并尝试直接将传入stream写入文件。

为此,您可以将您的stream式inputbuild模为MediaSource并直接将其传递给作者。 你将不得不从stream媒体源设置某些基本的元数据,并将其传递给下游编写器。 如果您可以直接对input源进行build模,则可能不需要创build新的MediaRecorder

在这里得到了完全相同的问题。 FFmpeg解决了这个问题,看起来对我来说非常有效,但它依赖于硬件,需要针对每个设备的CPU的特定arm版本进行编译。

另一种方法jcodec( http://jcodec.org/ ),但还没有想出如何保存一个rtspstream与它。 这是一个纯粹的java库,但没有太多的文档可用。

请告诉我,如果你找出一个办法。