На моем устройстве 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 МБ).
Принимая во внимание, что некоторые производители телефонов будут игнорировать отправленные дополнения, как мне получить видео среднего качества для использования в загрузки, обмен сообщениями и т. д.?
- Нужно ли мне выполнять какое-то сжатие больших файлов?
- Можно ли это сделать только с помощью пользовательского класса видео/камеры?
- Есть ли какой-то другой способ, о котором я не думаю?
Что бы вы порекомендовали мне сделать, чтобы получить видео «среднего качества», а не две крайности: слишком большое или слишком маленькое?
Спасибо всем!
MediaCodec
, или вы можете попробовать запуститьffmpeg
, но ни то, ни другое вряд ли будет простым или быстрым. Можно ли это сделать только с помощью пользовательского класса видео/камеры? -- это был бы единственный способ записи в разрешении, которое вы выберете с самого начала. - person CommonsWare   schedule 17.10.2016ACTION_IMAGE_CAPTURE
/ACTION_VIDEO_CAPTURE
со скромным уровнем дополнительных возможностей настройки. Если с библиотекой все в порядке, отправьте запрос на улучшение для более гибких вариантов разрешения (ссылаясь на это Так вопрос, если вы думаете об этом). - person CommonsWare   schedule 18.10.2016