Как я могу получить видео 1920x1080 с поверхности 1440x1080? - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь создать видео приложение с видеозаписью и тестирую его с Xiaomi Redmi 5, у которого разрешение экрана 1440x1080. Когда я пытаюсь записать видео с помощью MediaRecorder, я получаю видео размером 1440x1080:

mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mediaRecorder.setOutputFile(videoFileName);
    mediaRecorder.setVideoEncodingBitRate(1000000);
    mediaRecorder.setVideoFrameRate(30);
    mediaRecorder.setVideoSize(videoSize.getWidth(), videoSize.getHeight());
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    //mediaRecorder.setOrientationHint(totalRotation);
    mediaRecorder.prepare();

Когда я пытаюсь установить размер видео на:

videoSize = new Size(1920, 1080);

Android Ошибка, совершенная Studio:

Surface with size (w=1920, h=1080) and format 0x22 is not valid, size not in valid set: [1440x1080, 1440x720, 1280x720, 960x720, 960x540, 800x600, 864x480, 800x480, 720x480, 640x480, 640x360, 640x320, 480x368, 480x320, 352x288, 320x240, 176x144]

Я могу записывать видео 1920x1080 с камерой Xiaomi OS, но не с моим приложением.

Как я могу записать видео лучшего качества для смартфона с помощью Camera2 API?

Вот мой манифест .permission

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

У меня есть только одно основное занятие. Поэтому я использую

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 
setContentView(R.layout.activity); 
} 

Я использую это:

android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.prod.coverme" minSdkVersion 23 targetSdkVersion 29 versionCode 1 versionName "1.0"

1 Ответ

0 голосов
/ 01 мая 2020

Ответ можно найти в сообщении об ошибке Android Studio: требуемое разрешение не поддерживается, поскольку отсутствует в данном наборе

[1440x1080, 1440x720, 1280x720, 960x720, 960x540, 800x600, 864x480, 800x480, 720x480, 640x480, 640x360, 640x320, 480x368, 480x320, 352x288, 320x240, 176x144].

-Edit

Это может означать две вещи: либо разрешение 1980x1020 не поддерживается устройством, либо оно не поддерживается camera2api. Поскольку вы можете записывать видео 1920x1080 с помощью программного обеспечения камеры OS, проблема связана с camera2api в redmi 5. Поиск в google "redmi 5 and camera2api" обнаружил, что camera2api по умолчанию отключена в redmi 5. Чтобы использовать приложения, использующие Этот API (как и ваш) пользователь должен установить мод из неизвестных источников, чтобы включить camera2api. Мод, на который я ссылаюсь, относится к 2018 году: вы можете искать, выпустил ли xiaomi эквивалентное обновление, так что вам просто нужно сказать пользователям обновить ОС. Единственная альтернатива, которую я могу предложить, - это отказаться от использования camera2api, т.е. не используйте SURFACE как вход для записи. Вместо mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);

попробуйте mediaRecorder.setVideoSource (MediaRecorder.VideoSource.CAMERA);

...