相关疑难解决方法(0)

Android MediaRecorder:连续覆盖

我正在尝试录制一段10秒钟的视频进行监控.在Android中使用MediaRecorder非常简单.我所要做的就是打电话

mediaRecorder.setMaxDuration(10000);
Run Code Online (Sandbox Code Playgroud)

但是,我想连续覆盖相同的10秒视频.同样,这是一项微不足道的任务.

@Override
public void onInfo(MediaRecorder mr, int what, int extra) {
    switch (what) {
    case MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED:
        stopRecording();
        startRecording();
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

停止和启动(重新设定)MediaRecorder大约需要两秒钟.如果在这两秒钟内发生了重要事情,我就不会记录下来.

因此,我通过使用LocalSocket跟踪其他几个具有相同问题的人,并将其描述符传递给MediaRecorder

mediaRecorder.setOutputFile(sender.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud)

然后是一个包含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) {
        ...
Run Code Online (Sandbox Code Playgroud)

看看这是怎么回事?一旦解决了,就会出现一个新问题,在StackOverflow上也会多次解决.问题是传递给MediaRecorder的文件描述符不可搜索.

对我而言,这是我的理解停止的地方.不幸的是,没有明确的问题描述.如果有人可以向我描述问题,我可以开始寻找解决方案.有些地方提到"moot"必须重新定位,但随后讨论会转向一般的mp4编码,我迷失在所有细节中.

我希望我的问题得到明确说明.我不想播放任何形式的视频.深入研究打包成RTP并尝试提取我真正需要的部分的代码让我更加困惑.

我已经看过的链接:

干杯.

android video-encoding mpeg-4 mediarecorder android-mediarecorder

5
推荐指数
0
解决办法
1270
查看次数

Android Mediarecorder:获取3GP而不是MPEG4

我想只用android4格式录制视频.我希望容器和编解码器是MPEG4.所以这就是我为此所做的.

Thread video = new Thread(new Runnable() {
    public void run() {
        videoRecorder = new MediaRecorder();
        videoRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
        videoRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
        videoRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        videoRecorder.setVideoEncodingBitRate(56 * 8 * 1024);
        videoRecorder.setVideoSize(176, 144);
        videoRecorder.setVideoFrameRate(12);
        videoRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        videoRecorder.setOutputFile("/sdcard/video.m4e");
        try {
            videoRecorder.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        videoRecorder.start();
    }
});
video.start();
Run Code Online (Sandbox Code Playgroud)

现在,录制完成后,我将视频录制到video.m4e文件中.但是当我检查它的信息时,我得到了以下信息:

在此输入图像描述

同时我使用以下内容录制音频:

Thread audio = new Thread(new Runnable() {              
    public void run() {
        audioRecorder = new MediaRecorder();
        audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
        audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        audioRecorder.setOutputFile("/sdcard/audio.amr");
        try {
            audioRecorder.prepare();
        } catch (IllegalStateException e) { …
Run Code Online (Sandbox Code Playgroud)

java android audio-recording video-recording

1
推荐指数
1
解决办法
6221
查看次数