我正在尝试录制一个 10 秒的视频进行监控。在 Android 中使用 MediaRecorder 非常简单。我所要做的就是打电话
mediaRecorder.setMaxDuration(10000);
但是,我想连续覆盖相同的 10 秒视频。这又是一项微不足道的任务。
@Override
public void onInfo(MediaRecorder mr, int what, int extra) {
switch (what) {
case MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED:
stopRecording();
startRecording();
break;
}
}
停止和启动(重置)MediaRecorder 大约需要两秒钟。如果在那两秒钟内发生了重要的事情,我不会记录下来。
所以我通过使用 LocalSocket 跟随其他几个有同样问题的人,并将它的描述符传递给 MediaRecorder
mediaRecorder.setOutputFile(sender.getFileDescriptor());
然后是一个包含 LocalServerSocket 和接收者 LocalSocket 的 AyncTask
public class VirtualServer extends AsyncTask<Void, Void, Void> {
...
server = new LocalServerSocket(SOCKET_ADDRESS);
while (true) {
receiver = server.accept();
...
int len = 0;
byte[] data = new byte[1024];
while ((len = input.read(data)) >= 0) {
...
看看这是怎么回事?一旦解决了这个问题,就会出现一个新问题,在 StackOverflow 上也多次解决。问题是传递给 MediaRecorder 的文件描述符不可查找。
对我来说,这就是我的理解停止的地方。不幸的是,没有明确的问题描述。如果有人可以向我描述问题,我可以开始寻找解决方案。有些地方提到“没有实际意义”必须重新定位,但随后讨论转向一般的 mp4 编码,我迷失在所有细节中。
我希望我的问题得到明确说明。我不希望流式传输任何类型的视频。深入研究打包成 RTP 的代码并尝试提取我真正需要的部分让我更加困惑。
我已经看过的链接:
- http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system
- http://hello-qd.blogspot.com/2013/05/how-to-process-mediarecorder-frames.html
- 从 Android Media Recorder 流式传输后修复 3GP 文件
- http://code.google.com/p/ipcamera-for-android/
- 通过 LocalSocket 从 MediaRecorder 流式传输视频
干杯。