используя медиа-проекцию с медиа-рекордером, получаю искаженное видео - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь использовать API-интерфейс проекции мультимедиа, который стал доступен на устройствах с леденцами (Android 5 и выше), теперь я реализовал 2 способа использования этого API с Android:

Первый способ:

Использование медиа-кодека и мультимедийного мультиплексора.

Второй способ

Использование класса медиа-рекордера.

ЧтоЯ сделал:

Я использовал первый медиакодек, и он отлично работал на разных устройствах, но проблема возникла, когда мне нужно было добавить аудио (это казалось немного сложным).

ЗатемЯ пытался использовать медиа-рекордер, как некоторые другие использовали его, и казалось, что просто добавлять аудио, поэтому я сделал что-то вроде этого:

//set a media recorder
try{
MediaRecorder mediarecorder = new MediaRecorder();
mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediarecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediarecorder.setOutputFile(path_file);
mediarecorder.setVideoSize(480, 270);
mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediarecorder.setVideoEncodingBitRate(70000);
mediarecorder.setVideoFrameRate(30);

mediarecorder.prepare();

}catch(IOException e){


}

//density
Metrics metrics = getReources().getDisplayMetrics();
int density = metrics.densityDpi;

//set virtual display

media_projection.createVirtualDisplay("name",480,270,denisty,DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mediarecorder.getSurface(),null,null);

//start
mediarecorder.start();

Я жестко кодирую: width, height, frame rateи bitrate, поскольку мне нужно контролировать выходное видео, поскольку видео, как правило, становятся большими по размеру.

Моя проблема:

При использовании метода записи на носитель,Я понял проблему при тестировании API, я использовал 2 разных устройств (Android 7 и Android 6) ботh - это разные интервалы плотности экрана, но приблизительно они имеют одинаковый размер:

устройство Android 7 (разрешение 720x1280):

У меня безупречные результаты, нет проблем (этоустройство является устройством с более высоким разрешением).

Устройство Android 6 (разрешение: 540x960):

У меня получилось странное поврежденное выходное видео, так что если я записываю белыйНа экране я получаю испорченное видео с фиолетовыми размытыми материалами, и если я записал синий экран, я получаю испорченное видео с зелеными размытыми материалами.

Вопрос:

Пока этине происходит с использованием медиа-кодека, мой вопрос:

почему это происходит с помощью медиа-рекордера?

Устойчиво ли медиа-рекордер для использования с медиа-проекцией?

Спасибо.

...