Я пытаюсь разрешить пользователям записывать видео, которое отличается от фактического экранного предварительного просмотра, которое они могут видеть во время записи. Это представляется возможным из этой документации относительно функции getSupportedVideoSizes
, которая гласит:
Если возвращенный список не является нулевым, возвращаемый список будет содержать как минимум один Размер и один из размеров в возвращаемом списке должны быть передан в MediaRecorder.setVideoSize() для приложения для видеокамеры, если камера используется в качестве источника видеосигнала. В этом случае размер предварительный просмотр может отличаться от разрешения записанного видео во время видеозаписи.
Это говорит о том, что некоторые телефоны вернут null из этого fn (по моему опыту Galaxy SIII), но для тех, кто этого не делает, можно предоставить предварительный просмотр с другим разрешением, чем фактическое видео. Правильно ли это понимание? Некоторые телефоны позволяют поведение, а другие нет?
Попытка решения:
В официальном описании функции setPreviewDisplay
, которая используется в длительный процесс настройки видеозаписи, упоминается, что:
Если этот метод вызывается с нулевой поверхностью или вообще не называется, media рекордер не изменит поверхность предварительного просмотра камеры.
Это похоже на то, что я хочу, но, к сожалению, если я это сделаю, весь процесс записи видео полностью перепутался. Я предполагаю, что эта функция не может быть передана null или вообще не вызвана в процессе записи видео. Возможно, в других контекстах это нормально. К сожалению, это, похоже, не помогает мне.
Мои следующие шаги - изучить TextureView
и использовать текстуру предварительного просмотра в отличие от типичной реализации SurfaceView, чтобы использовать openGL для растягивания текстуры до желаемого размера, который отличается от фактического разрешения (и обрезает любой избыток экрана), а затем для построения поверхности для функции setPreviewDisplay
с конструктором Surface(SurfaceTexture surfaceTexture)
для поверхности. Я бы хотел избежать использования TextureView
из-за несовместимости ниже ICS, а также потому, что это добавляет значительную сложность.
Это похоже на деликатный процесс, но я надеюсь, что кто-то может предложить некоторые советы в этой области.
Спасибо.