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

/ 2,970评论 / 22842阅读 / 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. StephenJonge说道:

    https://cytotec.pro/# cytotec online

  2. JamesRok说道:

    lasix medication: lasix 100mg – generic lasix

  3. JamesRok说道:

    generic lasix: furosemide online – lasix side effects

  4. StephenJonge说道:

    http://furosemide.win/# lasix dosage

  5. DanielDrync说道:

    Abortion pills online http://tamoxifen.bid/# nolvadex for pct
    buy furosemide online

  6. DanielDrync说道:

    buy cytotec over the counter https://lipitor.guru/# buying lipitor from canada
    lasix dosage

  7. DanielDrync说道:

    buy cytotec online fast delivery https://lipitor.guru/# lipitor tablets 10mg price
    lasix 100 mg

  8. StephenJonge说道:

    https://cytotec.pro/# buy cytotec

  9. uydu forum说道:

    Wow amazing blog layout How long have you been blogging for you made blogging look easy The overall look of your web site is magnificent as well as the content

  10. Douglasnug说道:

    mexico drug stores pharmacies: mexican pharmacy – medicine in mexico pharmacies

  11. Douglasnug说道:

    medication from mexico pharmacy: Mexico pharmacy online – buying prescription drugs in mexico online

  12. Douglasnug说道:

    best india pharmacy: Indian pharmacy international shipping – best online pharmacy india

  13. Douglasnug说道:

    cheap boner pills: erectile dysfunction pills online – online ed pharmacy

  14. Douglasnug说道:

    indian pharmacy online: Online India pharmacy – pharmacy website india

  15. Douglasnug说道:

    low cost ed meds: Cheapest online ED treatment – п»їed pills online

  16. Douglasnug说道:

    best online pharmacy india: Online pharmacy USA – cheapest online pharmacy india

  17. Douglasnug说道:

    cheap ed pills online: online ed prescription same-day – pills for erectile dysfunction online

  18. Douglasnug说道:

    Online medicine home delivery: Cheapest online pharmacy – indian pharmacies safe

  19. Douglasnug说道:

    buying prescription drugs in mexico: Purple pharmacy online ordering – mexico drug stores pharmacies

  20. Douglasnug说道:

    ed meds online: ed pills online – best ed meds online

  21. Douglasnug说道:

    п»їbest mexican online pharmacies: Mexico pharmacy online – mexican border pharmacies shipping to usa

  22. Douglasnug说道:

    buying prescription drugs in mexico: Medicines Mexico – mexican mail order pharmacies

  23. Douglasnug说道:

    cheap ed: buy erectile dysfunction medication – low cost ed meds online

  24. Douglasnug说道:

    mexico drug stores pharmacies: mexican pharmacy – medication from mexico pharmacy

  25. Leonardskarm说道:

    http://indiapharmacy.shop/# online pharmacy india

  26. Leonardskarm说道:

    http://mexicopharmacy.win/# mexican border pharmacies shipping to usa

  27. Douglasnug说道:

    top 10 online pharmacy in india: Indian pharmacy international shipping – world pharmacy india

  28. Douglasnug说道:

    mexican drugstore online: mexican pharmacy – purple pharmacy mexico price list

  29. Douglasnug说道:

    pharmacy website india: Best Indian pharmacy – india pharmacy mail order

  30. Leonardskarm说道:

    https://indiapharmacy.shop/# reputable indian online pharmacy

  31. Leonardskarm说道:

    https://edpillpharmacy.store/# erectile dysfunction pills for sale

  32. Leonardskarm说道:

    https://edpillpharmacy.store/# cheap ed medicine

  33. Douglasnug说道:

    online shopping pharmacy india: Online pharmacy USA – indianpharmacy com

  34. Douglasnug说道:

    where to buy ed pills: ED meds online with insurance – generic ed meds online

  35. Douglasnug说道:

    erectile dysfunction pills online: ed pills online – online ed medicine

  36. Douglasnug说道:

    best online pharmacies in mexico: mexico drug stores pharmacies – best online pharmacies in mexico

  37. Leonardskarm说道:

    https://indiapharmacy.shop/# india pharmacy mail order

  38. Douglasnug说道:

    buy medicines online in india: Online medicine home delivery – pharmacy website india

  39. Douglasnug说道:

    medicine in mexico pharmacies: mexican drugstore online – п»їbest mexican online pharmacies

  40. Leonardskarm说道:

    http://mexicopharmacy.win/# reputable mexican pharmacies online

  41. Leonardskarm说道:

    https://edpillpharmacy.store/# erectile dysfunction pills for sale

  42. Douglasnug说道:

    mexican online pharmacies prescription drugs: Certified Mexican pharmacy – mexico pharmacies prescription drugs

  43. Douglasnug说道:

    п»їlegitimate online pharmacies india: Best Indian pharmacy – india pharmacy mail order

  44. Leonardskarm说道:

    https://indiapharmacy.shop/# п»їlegitimate online pharmacies india

  45. Leonardskarm说道:

    https://edpillpharmacy.store/# erectile dysfunction medication online

  46. Leonardskarm说道:

    http://indiapharmacy.shop/# indian pharmacies safe

  47. Leonardskarm说道:

    https://indiapharmacy.shop/# indian pharmacy paypal

  48. Douglasnug说道:

    online shopping pharmacy india: Online medicine home delivery – top 10 pharmacies in india

  49. Douglasnug说道:

    india pharmacy: indian pharmacies safe – reputable indian online pharmacy

发表回复

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