Для пользователей FFmpegCommand:
Прежде всего, благодарим всех за поддержку этой библиотеки. Спасибо за то, что используете её, благодаря вам у нас есть мотивация продолжать разработку с открытым исходным кодом. Благодарим за ваши вопросы и предложения, которые делают эту библиотеку более совершенной.
Асинхронная обработка и многопоточное выполнение были предусмотрены до версии 1.2.0, но многие люди сообщали, что асинхронное и многопоточное исполнение не очень полезно, поэтому после тщательного рассмотрения в версии 1.2.0 и последующих версиях будут внесены следующие изменения:
Мы приносим извинения за неудобства, вызванные этим изменением.
В нашей разработке часто используется аудио- и видеоконтент, обычно мы выбираем FFmpeg, но его кросс-компиляция является для нас очень хлопотным делом. Поэтому здесь для удобства будущего использования я написал FFmpegCommand, который состоит из основной библиотеки FFmpeg и интегрирует основные программы обработки аудио и видео для Android, такие как lame, libx264, fdk-aac и libopencore-amr. Примечание: текущая библиотека доступна только для Android.
Если вы не можете получить доступ ко всей информации, перейдите по ссылке 【国内镜像】.
| Специальная функция | Поддержка | Описание |
|-----------------------|----------|------------------------------------------------------------------------------|
| Команды ffmpeg |
| Поддерживаются все команды FFmpeg |
| Обратный вызов прогресса |
| Поддерживается обратный вызов команд ffmpeg |
| Отмена команд |
| Поддерживается отмена выполняемых команд |
| Модель отладки |
| Поддерживается модель отладки для разработки |
| Получение информации о медиа |
| Поддерживается получение информации о медиа |
| Рисование текста (drawtext) |
| Поддерживается рисование текста на видео (водяные знаки — с версии 1.3.2) |
| Добавление субтитров (subtitles) |
| Поддерживается добавление субтитров к видео (поддержка форматов srt, ass — с версии 1.3.2)|
| Кодек MediaCodec Android GPU |
| Поддерживается MediaCodec для Android GPU (с версии 1.3.0) |
| Архитектура Android |
| Поддерживаются armeabi-v7a и arm64-v8a |
| Один SO |
| Несколько файлов SO объединяются в один ffmpeg-or.so |
Общие функции:
Запуск FFmpeg | Получение информации о медиа |
---|---|
![]() |
![]() |
Найдите файл build.gradle в корневом каталоге проекта и добавьте следующее:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Затем добавьте импорт в build.gradle в каталоге app или другом модуле.
Выберите только одно из следующих двух представлений и замените следующее в соответствии с последней версией ${latestVersion}, текущая последняя версия :
// Все кодеки — больший размер
implementation 'com.github.AnJoiner:FFmpegCommand:1.3.2'
// Некоторые часто используемые кодеки — меньший размер, примерно на 6 М меньше, чем приведённое выше представление
implementation 'com.github.AnJoiner:FFmpegCommand:1.3.2-lite'
Измените build.gradle под модулем, текущая библиотека поддерживает только armeabi-v7a и arm64-v8a, конечно, вы можете использовать только один (обычно используется armeabi-v7a для обратной совместимости). Вы можете обратиться к 【Android ABI】. armeabi-v7a,'arm64-v8a'
moduleName "app" } }
**If there is no special codec requirement, it is strongly recommended to use `lite` tag**
## Use
### FFmpegCommand Method
|Method |Function |
|:---|----|
|FFmpegCommand->setDebug(debug: Boolean)|Режим отладки, печатный журнал|
|FFmpegCommand->runCmd(cmd: Array<String?>)|Выполнение команды ffmpeg без обратного вызова|
|FFmpegCommand->runCmd(cmd: Array<String?> callBack: IFFmpegCallBack?)|Выполнение команды ffmpeg и обратный вызов начала, завершения, отмены, прогресса, ошибки|
|FFmpegCommand->getMediaInfo(path: String?, @MediaAttribute type: Int)|Получение информации о медиа: ширина и высота видео, битрейт...|
|FFmpegCommand->getSupportFormat(@FormatAttribute formatType: Int)|Получить форматы инкапсуляции и декапсуляции, поддерживаемые текущей библиотекой|
|FFmpegCommand->getSupportCodec(@CodecAttribute codecType: Int)| Получить кодек, поддерживаемый текущей библиотекой |
|FFmpgCommand->cancel()|Завершение выполнения команды ffmpeg|
### runCmd
Используйте runCmd для синхронного вызова FFmpeg. Необходимо добавить внешние потоки, иначе приложение перестанет отвечать на запросы.
Прямой вызов метода FFmpegCommand.runCmd (cmd: Array <String?> CallBack: IFFmpegCallBack?), первый параметр предоставляется классом инструмента FFmpegUtils или вы можете добавить его самостоятельно.
**Не поддерживает асинхронное выполнение команд FFmpeg, в конце концов, C — это процессно-ориентированный язык, и возникнут проблемы с использованием ресурсов.**
```kotlin
GlobalScope.launch {
FFmpegCommand.runCmd(FFmpegUtils.transformAudio(audioPath, targetPath), callback("транскодирование завершено", targetPath))
}
Второй параметр — метод обратного вызова.
open class CommonCallBack : IFFmpegCallBack {
// Start callback
override fun onStart() {}
// Progress callback
override fun onProgress(progress: Int, pts: Long) {}
// Cancel callback
override fun onCancel() {}
// Complete callback
override fun onComplete() {}
// Error callback
override fun onError(errorCode: Int, errorMsg: String?) {}
}
Следует отметить, что в методе onProgress можно увидеть, что обратный вызов возвращает 2 значения:
var duration :Int? = FFmpegCommand.getMediaInfo(mAudioPath,MediaAttribute.DURATION)
var progress = pts/duration!!
Это просто демонстрация обрезки звука, многие функции, подобные описанным выше, см. сами FFmpegUtils. Если требования не выполняются, вы можете добавить свою собственную команду FFmpeg, ниже приведён пример настройки преобразования с помощью MediaCodec:
// shell command: ffmpeg -y -c:v h264_mediacodec -i inputPath -c:v h264_mediacodec outputPath
val command = CommandParams()
.append("-c:v") // decode
.append("h264_mediacodec")
.append("-i")
.append(inputPath)
.append("-b") // bitrate
.append("1500k")
.append("-c:v") // encode
.append("h264_mediacodec")
.append(outputPath)
.get()
MainScope().launch(Dispatchers.IO) {
FFmpegCommand.runCmd(command, callback("Преобразование формата успешно", targetPath))
}
требует внимания:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )