Мое приложение для видеозаписи работало хорошо, так как я звоню _mediaRecorder.SetMaxDuration(120000)
, который перезванивает MediaRecordInfo, где event.What == MediaRecorderInfo.MaxDurationReached
через две минуты.
Удивительно, что на Android 8.1 этот обратный вызов происходит сразу после запуска медиа-рекордера.
Если я не установлю максимальную длительность, я могу снимать видео длительностью более 8 секунд и на 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
}
}