Android MediaRecorder:连续覆盖

Android MediaRecorder:连续覆盖,android,video-encoding,mediarecorder,android-mediarecorder,mpeg-4,Android,Video Encoding,Mediarecorder,Android Mediarecorder,Mpeg 4,我正试着录一段10秒的监控录像。在Android中使用MediaRecorder是非常直接的。我所要做的就是打电话 mediaRecorder.setMaxDuration(10000); 但是,我想连续覆盖相同的10秒视频。同样,这是一项微不足道的任务 @Override public void onInfo(MediaRecorder mr, int what, int extra) { switch (what) { case MediaRecorder.MEDIA_RE

我正试着录一段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) {
        ...
公共类VirtualServer扩展异步任务{
...
服务器=新的LocalServerSocket(套接字地址);
while(true){
receiver=server.accept();
...
int len=0;
字节[]数据=新字节[1024];
而((len=input.read(data))>=0){
...
看到这是怎么回事了吗?一旦解决了,就会出现一个新的问题,在StackOverflow上也解决了好几次。问题是传递给MediaRecorder的文件描述符无法查找

对我来说,这就是我的理解停止的地方。不幸的是,没有对问题的明确描述。如果有人能向我描述问题,我可以开始寻找解决方案。有些地方提到“模拟”必须重新定位,但随后讨论转向通用mp4编码,我迷失在所有细节中

我希望我的问题清楚地说明。我不希望流式传输任何类型的视频。深入研究打包成RTP的代码并试图提取我真正需要的部分让我更加困惑

我已经看过的链接:


干杯。

我理解您在这里试图实现的目标,但您能否更详细地介绍您的实际问题。问题是传递给MediaRecorder的文件描述符无法查找。您是否有堆栈跟踪?