Я использую mp4parser, и видео должно быть одного типа. Я думал об использовании кодека для Android для декодирования и кодирования видеоролика preroll, чтобы он соответствовал одному и тому же выпуску кодирования камер (спереди и сзади) любому предложению о том, как это можно сделать (как получить определенные параметры кодирования устройства)?
Я хочу добавить предварительные ролики к видео, снятым на устройствах Android
Ответ 1
Если вы хотите узнать, что кодирует ваша камера для Android, попробуйте использовать это: https://developer.android.com/reference/android/media/CamcorderProfile
Этого достаточно, чтобы ответить на ваши вопросы по обнаружению кодирования видео, включая: формат выходного файла, формат видеокодека, скорость передачи видео в битах в секунду, частоту кадров видео в кадрах в секунду, ширину и высоту видеофрагмента, формат аудиокодека, аудио битовая скорость в битах в секунду, частота дискретизации звука Количество аудиоканалов для записи.
Вытащил также много вышеупомянутой информации: https://developer.android.com/guide/topics/media/camera#capture-video
Что касается перекодировки видео, которые уже находятся в списке пользователей, я нашел этот полезный транскодер, написанный в чистом java, используя API Android MediaCodec, и его можно найти здесь: https://github.com/ypresto/android-transcoder
Кроме того, в качестве рупп, упомянутых ниже, вы можете использовать ffmeg, который, как доказано, работает бесчисленное количество раз на Android. Однако аргументация для меня, связанная с другим транскодером, заключается в том, что, как утверждает автор, "FFmpeg - это самое известное решение для перекодирования. Но использование двоичного кода FFmpeg на Android может вызвать проблемы с GPL и/или патентами. Также с помощью собственного кода для Android разработка может быть сложной из-за кросс-компиляции, совместимости архитектуры, времени сборки и двоичного размера ". Поэтому используйте тот, который, по вашему мнению, лучше подходит вам. Вот ссылка для ffmeg для Android: https://github.com/WritingMinds/ffmpeg-android
Если вы не хотите использовать транскодер, который сделал кто-то другой, я рекомендую сделать свой собственный транскодер с помощью API MediaCodec, который можно найти здесь: https://developer.android.com/reference/android/media/MediaCodec
Ответ 2
Если вы хотите волшебство, попробуйте эту библиотеку.
https://github.com/INDExOS/media-for-mobile/
Взгляните на класс MediaComposer.
Здесь также фрагмент кода о том, как это делается.
org.m4m.MediaComposer mediaComposer = new org.m4m.MediaComposer(factory, progressListener);
mediaComposer.addSourceFile(mediaUri1);
int orientation = mediaFileInfo.getRotation();
mediaComposer.setTargetFile(dstMediaPath, orientation);
// set video encoder
VideoFormatAndroid videoFormat = new VideoFormatAndroid(videoMimeType, width, height);
videoFormat.setVideoBitRateInKBytes(videoBitRateInKBytes);
videoFormat.setVideoFrameRate(videoFrameRate);
videoFormat.setVideoIFrameInterval(videoIFrameInterval);
mediaComposer.setTargetVideoFormat(videoFormat);
// set audio encoder
AudioFormatAndroid aFormat = new AudioFormatAndroid(audioMimeType, audioFormat.getAudioSampleRateInHz(), audioFormat.getAudioChannelCount());
aFormat.setAudioBitrateInBytes(audioBitRate);
aFormat.setAudioProfile(MediaCodecInfo.CodecProfileLevel.AACObjectLC);
mediaComposer.setTargetAudioFormat(aFormat);
mediaComposer.setTargetFile(dstMediaPath, orientation);
mediaComposer.start();