[安卓/flutter]给Media3.exoplayer编译扩展ffmpeg解码器

/ 3,791评论 / 26036阅读 / 2点赞

前言

引用文档

准备

配置NDK 、cmdtools、SDKManager

cd {你想放NDK的目录}
wget {官网复制Linux版的下载链接}
unzip {刚刚下载的zip文件}
cd {cmdline-tools目录}/bin
sudo ./sdkmanager --licenses --sdk_root={你的NDK的根目录}

编译ffmpge

NDK_PATH="$(pwd)"
cd {你想放Media3.decoder_ffmpeg的目录}
git clone https://github.com/androidx/media --depth 1
cd media
FFMPEG_MODULE_PATH="$(pwd)/libraries/decoder_ffmpeg/src/main"
Lunux执行:
HOST_PLATFORM="linux-x86_64"

MacOX执行:
HOST_PLATFORM="darwin-x86_64"
ANDROID_ABI=21
cd {你想放ffmpge源码的目录}
git clone git://source.ffmpeg.org/ffmpeg && \ cd ffmpeg && \ git checkout release/6.0 && \ FFMPEG_PATH="$(pwd)"
ENABLED_DECODERS=(vorbis opus flac alac pcm_mulaw pcm_alaw mp3 amrnb amrwb aac ac3 eac3 dca mlp truehd)
cd "${FFMPEG_MODULE_PATH}/jni"
ln -s "$FFMPEG_PATH" ffmpeg
./build_ffmpeg.sh \ "${FFMPEG_MODULE_PATH}" "${NDK_PATH}" "${HOST_PLATFORM}" "${ANDROID_ABI}" "${ENABLED_DECODERS[@]}"
cd {开头放Media3.decoder_ffmpeg的目录}
./gradlew lib-decoder-ffmpeg:assembleRelease

项目引入ffmpge的aar包


dependencies {
    implementation(fileTree('libs'))
}
import java.util.zip.ZipEntry
import java.util.zip.ZipFile

// 把aar拷贝进入主项目的方法 com.example.android_control换成你自己的插件包名
// * 只修改下面这一行的参数就可以了
copyAar2Host('com.example.android_control')

// 拷贝aar的方法
static aarFileCopy(String srcPath,String desPath) {
    System.out.println("copy aar from <<${srcPath}>> to <<${desPath}>>")
    try {
        FileInputStream fis = new FileInputStream(srcPath)
        FileOutputStream fos = new FileOutputStream(desPath)
        byte[] data = new byte[1024*8]
        int len = 0
        while ((len = fis.read(data))!=-1) {
            fos.write(data,0,len)
        }
        fis.close()
        fos.close()
    }catch(Exception e) {
        e.printStackTrace()
    }
}

void copyAar2Host(String pluginGroup) {
    Project currentProject = null
    Project appProject = null
    rootProject.allprojects.each {
        p->
            boolean  isApp = p.plugins.hasPlugin("com.android.application")
            println("<<${p.name}>> isHost ? ${isApp}")
            if (p.group == pluginGroup) {
                currentProject = p
                println("Plugin project name is $currentProject")
            }
            if(isApp) {
                appProject = p
                println("Host project name is <<${p.name}>>")
            }
    }
    Set<File> aarFiles = new HashSet<File>()
    if (appProject != null && currentProject != null) {
        File libs = new File("${currentProject.projectDir}","libs")
        if(libs.isDirectory()) {
            libs.listFiles().each {
                f->
                    if(f.name.endsWith(".aar")) {
                        println("The aar file name to be copied is <<${f.name}>>")
                        aarFiles.add(f)
                    }

            }
        }
        if (!aarFiles.isEmpty()) {
            File applibs = new File("${appProject.projectDir}${File.separator}libs")
            if(!applibs.isDirectory()) {
                applibs.mkdirs()
            }
            aarFiles.each {
                f->
                    File copyAar = new File("${appProject.projectDir}${File.separator}libs",f.name)
                    if(!copyAar.exists()) {
                        copyAar.createNewFile()
                        aarFileCopy(f.path,copyAar.path)
                    } else {

                    }
            }
            appProject.dependencies {
                implementation fileTree(dir:"${appProject.projectDir}${File.separator}libs",include:["*.jar","*.aar"])
            }
        }
    }
}

repositories{
    flatDir {
        dirs 'libs'
    }
}
apply plugin: 'com.android.library'
// 在这里插入下面这一行
apply from: './aar_tools.gradle'

// 然后找到dependencies块,
dependencies {
    // 这一行导入刚刚libs目录内的ffmpge的arr包

    compileOnly(fileTree("libs"))
    // 这里用于解决用android studio打开项目的android目录时里面的java/kotlin文件的import都是灰色的问题
    compileOnly files("$flutterRoot/bin/cache/artifacts/engine/android-arm/flutter.jar")
    compileOnly("androidx.annotation:annotation:1.3.0")
}

在代码里引入ffmpeg


import androidx.media3.decoder.ffmpeg.FfmpegAudioRenderer;

class FfmpegRenderersFactory extends DefaultRenderersFactory {
    public FfmpegRenderersFactory(Context context) {
        super(context);
        setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON);
    }

    @Override
    protected void buildAudioRenderers(Context context, int extensionRendererMode, MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, AudioSink audioSink, Handler eventHandler, AudioRendererEventListener eventListener, ArrayList<Renderer> out) {
        out.add(new FfmpegAudioRenderer(eventHandler, eventListener, audioSink));
        super.buildAudioRenderers(context, extensionRendererMode, mediaCodecSelector, enableDecoderFallback, audioSink, eventHandler, eventListener, out);
    }
}

ExoPlayer.Builder builder = new ExoPlayer.Builder(context);
// 添加ffmpeg

builder.setRenderersFactory(new FfmpegRenderersFactory(context));
ExoPlayer player = builder.build();
  1. KennethCex说道:

    buy cipro without rx ci pharm delivery buy cipro online usa

  2. Danielplent说道:

    https://cipharmdelivery.com/# buy cipro online usa

  3. Danielplent说道:

    https://clomidonpharm.com/# where buy clomid without a prescription

  4. KennethCex说道:

    how to buy clomid without prescription clomid on pharm cost of generic clomid pill

  5. Danielplent说道:

    https://cipharmdelivery.com/# cipro 500mg best prices

  6. Danielplent说道:

    http://cipharmdelivery.com/# buy cipro online canada

  7. RobertInpup说道:

    ciprofloxacin generic: CiPharmDelivery – ciprofloxacin generic

  8. RobertInpup说道:

    where to buy amoxicillin over the counter: AmoxStar – amoxicillin from canada

  9. KennethCex说道:

    buy prednisone online without a script prednisone 5 mg tablet prednisone 10mg online

  10. Migueldit说道:

    https://amoxstar.com/# amoxicillin capsules 250mg

  11. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов sony сервис, можете посмотреть на сайте: ремонт телефонов sony цены
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  12. Migueldit说道:

    https://amoxstar.com/# amoxicillin generic brand

  13. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов realme, можете посмотреть на сайте: срочный ремонт телефонов realme
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  14. SamuelDarse说道:

    ciprofloxacin 500 mg tablet price: ciprofloxacin 500 mg tablet price – cipro

  15. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов sony адреса, можете посмотреть на сайте: ремонт телефонов sony адреса
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  16. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов sony цены, можете посмотреть на сайте: срочный ремонт телефонов sony
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  17. SamuelDarse说道:

    clomid brand name: clomidonpharm – buy generic clomid prices

  18. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов realme сервис, можете посмотреть на сайте: ремонт телефонов realme
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  19. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов sony рядом, можете посмотреть на сайте: ремонт телефонов sony
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  20. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов realme сервис, можете посмотреть на сайте: ремонт телефонов realme
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  21. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов vivo адреса, можете посмотреть на сайте: ремонт телефонов vivo
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  22. Danielplent说道:

    http://amoxstar.com/# amoxicillin tablets in india

  23. Danielplent说道:

    https://cipharmdelivery.com/# ciprofloxacin mail online

  24. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов vivo сервис, можете посмотреть на сайте: ремонт телефонов vivo
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  25. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов realme цены, можете посмотреть на сайте: ремонт телефонов realme в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  26. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов sony, можете посмотреть на сайте: ремонт телефонов sony
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  27. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов realme адреса, можете посмотреть на сайте: ремонт телефонов realme цены
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  28. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов vivo цены, можете посмотреть на сайте: ремонт телефонов vivo
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  29. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов vivo, можете посмотреть на сайте: ремонт телефонов vivo цены
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  30. Migueldit说道:

    https://cipharmdelivery.com/# buy cipro without rx

  31. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов vivo в москве, можете посмотреть на сайте: ремонт телефонов vivo цены
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  32. Migueldit说道:

    http://amoxstar.com/# amoxicillin 500mg price

  33. RobertInpup说道:

    buy ciprofloxacin over the counter: CiPharmDelivery – ciprofloxacin mail online

  34. KennethCex说道:

    how can i get prednisone online without a prescription PredniBest purchase prednisone 10mg

  35. RobertInpup说道:

    cipro: buy cipro without rx – antibiotics cipro

  36. SamuelDarse说道:

    buy cipro cheap: where to buy cipro online – ciprofloxacin generic price

  37. StephenPsync说道:

    http://indiapharmi.com/# india online pharmacy

  38. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов xiaomi, можете посмотреть на сайте: ремонт телефонов xiaomi
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  39. WillardTip说道:

    http://mexicanpharmi.com/# reputable mexican pharmacies online

  40. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали срочный ремонт телевизоров lg, можете посмотреть на сайте: ремонт телевизоров lg сервис
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  41. WillardTip说道:

    https://canadianpharmi.com/# buy anti biotics without prescription

  42. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телефонов xiaomi рядом, можете посмотреть на сайте: ремонт телефонов xiaomi цены
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  43. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали срочный ремонт телефонов xiaomi, можете посмотреть на сайте: ремонт телефонов xiaomi сервис
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  44. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телевизоров lg адреса, можете посмотреть на сайте: ремонт телевизоров lg рядом
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  45. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали срочный ремонт телефонов xiaomi, можете посмотреть на сайте: ремонт телефонов xiaomi в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  46. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали ремонт телевизоров lg цены, можете посмотреть на сайте: ремонт телевизоров lg сервис
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  47. Jeffreyblunk说道:

    how to overcome ed naturally: Canada Pharmacy online reviews – drug pharmacy

  48. Ernestriz说道:

    medicine in mexico pharmacies: Online pharmacy – medication from mexico pharmacy

  49. MatthewEnupe说道:

    pharmacy online canadianpharmi diabetes and ed

  50. Jeffreyblunk说道:

    ed remedies that really work: Canadian pharmacy prices – carprofen without vet prescription

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注