Android 8.1 MediaRecorder setMaxDuration失败

时间:2019-07-02 05:51:49

标签: xamarin xamarin.android mediarecorder android-8.1-oreo

到目前为止,我的视频录制应用程序运行良好,因为调用_mediaRecorder.SetMaxDuration(120000)会在两分钟后调用MediaRecordInfo,其中event.What == MediaRecorderInfo.MaxDurationReached会返回。

令人惊讶的是,在Android 8.1上,此回调在启动mediarecorder之后立即出现。

如果我没有设置最长持续时间,我在8.1上也可以捕捉到超过一秒的视频。

7.0和9.0没有这个问题。

有什么想法吗?

这里有一些代码,虽然我不知道是不是出现问题,但是我可以粘贴整个视频类。

    private void SetupMediaRecorder()
    {
        MediaRecorder.SetAudioSource(AudioSource.Mic);
        MediaRecorder.SetVideoSource(VideoSource.Surface);
        MediaRecorder.SetOutputFormat(OutputFormat.Mpeg4);

        MediaRecorder.SetVideoEncoder(VideoEncoder.H264);
        MediaRecorder.SetAudioEncoder(AudioEncoder.Aac);
        MediaRecorder.SetOutputFile(outputURL);
        MediaRecorder.SetVideoSize(1280, 720);
        //Modify for changes in output size & quality
        MediaRecorder.SetVideoFrameRate(30);
        MediaRecorder.SetVideoEncodingBitRate(2000000);
        //MediaRecorder.SetVideoSize(videoSize.Width, videoSize.Height);
        MediaRecorder.SetMaxDuration(120000);

        //Set audio bitrate
        int bitDepth = 16;
        int sampleRate = 44100;
        int bitRate = sampleRate * bitDepth;
        MediaRecorder.SetAudioEncodingBitRate(bitRate);
        MediaRecorder.SetAudioSamplingRate(sampleRate);

        int rotation = (int)ThisActivity.WindowManager.DefaultDisplay.Rotation;
        int orientation = orientations[rotation];
        MediaRecorder.SetOrientationHint(orientation);
        MediaRecorder.Prepare();
    }


    private void MediaRecorder_Info(object sender, MediaRecorder.InfoEventArgs e)
    {
        if (e.What == MediaRecorderInfo.MaxDurationReached)
        {
            //Called immediately after MediaRecorder.Start() on Android 8.1
        }
    }

0 个答案:

没有答案