Как преобразовать видео в пригодное для использования качество с помощью Intent?

На моем устройстве Android я могу снимать видео одним из двух способов:

1) Я могу написать собственный класс/набор методов, которые позволят мне использовать камеру и иметь прямой контроль над функциями.

or

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

Этот вопрос касается последнего (с использованием намерения). Это код намерения, который я использую для съемки видео:

private void takeVideo(Activity activity, Context context){

        //Actual intent used to capture the video
        Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

        //30 Second time limit (can make it anything, just using 30 here)
        takeVideoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 30);

        //Utility method I have for generating a uri to use for the video
        android.net.Uri myUri = generateVideoUri(context);

        //Uri to use
        takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, myUri);

        //Cap it at 20mb
        takeVideoIntent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 20000000L);

        //HERE IS WHERE MY QUESTION LIES //0 is low, 1 is high
        takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); 
        activity.startActivityForResult(takeVideoIntent, 100);

}

Приведенный выше код работает просто отлично. Мой вопрос касается качества.

Если я отправляю 0 в качестве качества, это абсолютно ужасное качество (IE, 10 секунд видео составляют около 0,3 МБ и, по-видимому, являются самым низким качеством, которое может выдержать телефон). Если я отправлю 1 в качестве качества, оно будет безбожно большим и громоздким (IE, 10 секунд видео составляют около 50 МБ).

Принимая во внимание, что некоторые производители телефонов будут игнорировать отправленные дополнения, как мне получить видео среднего качества для использования в загрузки, обмен сообщениями и т. д.?

  • Нужно ли мне выполнять какое-то сжатие больших файлов?
  • Можно ли это сделать только с помощью пользовательского класса видео/камеры?
  • Есть ли какой-то другой способ, о котором я не думаю?

Что бы вы порекомендовали мне сделать, чтобы получить видео «среднего качества», а не две крайности: слишком большое или слишком маленькое?

Спасибо всем!


person PGMacDesign    schedule 17.10.2016    source источник
comment
Нужно ли мне выполнять какое-то сжатие больших файлов? -- видеофайлы уже сжаты. Вам нужно будет уменьшить разрешение (или, возможно, частоту кадров). Я думаю, что есть способы сделать это на более новых устройствах через MediaCodec, или вы можете попробовать запустить ffmpeg, но ни то, ни другое вряд ли будет простым или быстрым. Можно ли это сделать только с помощью пользовательского класса видео/камеры? -- это был бы единственный способ записи в разрешении, которое вы выберете с самого начала.   -  person CommonsWare    schedule 17.10.2016
comment
Гоча, спасибо. Имея смешанный опыт совместимости, когда я писал собственный класс камеры (телефоны IE HTC никогда не работали должным образом, а некоторые новые телефоны Samsung выходили из строя, но не старые), я не решаюсь прыгнуть в класс видео в том же свете. Есть ли у вас какие-либо учебные пособия или примеры рекомендаций, которые, по вашему мнению, могли бы стать хорошей отправной точкой?   -  person PGMacDesign    schedule 17.10.2016
comment
Я не решаюсь прыгнуть в видео-класс в том же свете - я чувствую вашу боль. Самое простое — поиграть с моей библиотекой CWAC-Cam2, чтобы увидеть, общий подход приемлем. Он предназначен для замены ACTION_IMAGE_CAPTURE/ACTION_VIDEO_CAPTURE со скромным уровнем дополнительных возможностей настройки. Если с библиотекой все в порядке, отправьте запрос на улучшение для более гибких вариантов разрешения (ссылаясь на это Так вопрос, если вы думаете об этом).   -  person CommonsWare    schedule 18.10.2016
comment
Я так и сделаю, спасибо Commons за помощь!   -  person PGMacDesign    schedule 18.10.2016