Android Studio Camera 2 сохраняет видео в полноэкранном режиме - PullRequest
2 голосов
/ 19 июня 2020

Я использую Camera2 API для записи видео, я использовал этот проект в качестве ссылки, мне удалось изменить вид TextTure на полноэкранный режим, но видео, которое я сохраняю, все еще отсутствует полный экран, как я могу изменить сохраненное видео на полноэкранный режим?

enter image description here

enter image description here

вы можете видеть, что при воспроизведении видео размеры видео равны Как и в моем предварительном просмотре, помогите, пожалуйста, как я могу сохранить видео в той же перспективе, что и мой предварительный просмотр?

Ответы [ 2 ]

1 голос
/ 27 июня 2020

Хорошо, поэтому мне удалось решить проблему, видео не было полноэкранным, потому что соотношение сторон видео не совпадает с соотношением сторон экрана, поэтому все, что нам нужно сделать, это исправить соотношение сторон видео, чтобы оно соответствовало экрану, мы можем сделать это, следуя приведенному ниже коду ...

в первую очередь, нам нужно FFmpeg, я использую эту библиотеку

, тогда мы можем просто использовать эту команду

val displaySize = Point().apply {
    windowManager.defaultDisplay.getSize(this)
}

val screenR = displaySize.y.toFloat() / displaySize.x

val testCrop = FFmpeg.execute("-i $videoPath -y -filter:v crop=ih/$screenR:ih ${OutputPath}")

when (testCrop) {
     RETURN_CODE_SUCCESS -> {
         //successful
     }

     RETURN_CODE_CANCEL -> {
        //canceled
     }

     else -> {
        // failed
     }

videoPath

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

outputPath

- это место, где мы хотим сохранить наше видео, имейте в виду, что мы должны включить имя файла также, например,

/ storage / emulated / 0 / Android / data / myAppName / files / result.mp4

также, имейте в виду этот результат. mp4 'не должен существовать, потому что FFmpeg создаст этот файл для нас, если был файл с таким именем тогда мы получим ошибку, или мы должны дать разрешение FFmpeg перезаписать этот файл.

наконец,

crop = ih / $ screenR: ih

используется для изменения ширины видео до соотношения, соответствующего экрану (в моем случае я всегда хочу, чтобы мое видео было вертикальным, поэтому я изменяю только высоту видео), но имейте в виду, что я не 100% уверен, всегда ли правильно обрезать ширину ...

0 голосов
/ 22 июня 2020

Попробуйте с помощью этого метода:

private static Size fullScreenVideoSize(Size[] choices) {
    for (Size size : choices) {
        if (size.getWidth() == size.getHeight() * 4 / 3 && size.getWidth() <= 1080) {
            return size;
        }
    }
    return choices[choices.length - 1];
}

И вы можете его реализовать:

mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class));
mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), width, height, mVideoSize);

int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
    mTextureView.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight());
} else {
    mTextureView.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth());
}
...