Я хочу добавить предварительные ролики к видео, снятым на устройствах Android

Я использую mp4parser, и видео должно быть одного типа. Я думал об использовании кодека для Android для декодирования и кодирования видеоролика preroll, чтобы он соответствовал одному и тому же выпуску кодирования камер (спереди и сзади) любому предложению о том, как это можно сделать (как получить определенные параметры кодирования устройства)?

Ответ 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();