5

我正在尝试录制一个 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 的代码并尝试提取我真正需要的部分让我更加困惑。

我已经看过的链接:

干杯。

4

0 回答 0