Android MediaRecorder Video - 随后播放的音频和视频轨道

Csh*_*est 5 audio video android xamarin.android mediarecorder

我遇到了一个错误,主要出现在三星设备上。我用媒体录像机录制了一段视频(代码如下所示)。它在所有设备上都能完美运行,但现在在某些 Android 设备上,音频和视频轨道是分开的。

假设我正在捕获 5 秒的视频。视频时长 5 秒,播放视频将播放视频的第一帧和 5 秒的音频。之后,正在播放 5 秒的视频。默认视频播放器显示视频在 5 秒后结束,但实际上它只是音频...

8.0 Oreo 中是否有新引入的内容,以便我必须调整我的 MediaRecorder?

我的媒体记录器设置:

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);

            MediaRecorder.SetVideoFrameRate(30);
            MediaRecorder.SetVideoEncodingBitRate(2000000);
            MediaRecorder.SetMaxDuration(VideoManager.MAX_VIDEODURATION_MS);

            //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();
        }
Run Code Online (Sandbox Code Playgroud)

编辑:我正在使用 Camera2 API

EDIT2:这似乎是某些三星设备的问题。深度睡眠会导致第一帧的呈现时间戳太长。将时间戳设置为 1/30 秒(如果您的视频是以 30fps 捕获的)将解决此问题。这是一个相应的错误线程:https : //github.com/googlesamples/android-Camera2Video/issues/24