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

/ 1,624评论 / 11427阅读 / 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. DavidWaype说道:

    canadian pharmacy online: canadian online drugs – onlinecanadianpharmacy

  2. Charlestaf说道:

    canadian online pharmacy reviews online canadian pharmacy 77 canadian pharmacy

  3. EdwardKib说道:

    https://foruspharma.com/# buying prescription drugs in mexico

  4. EdwardKib说道:

    http://indiapharmast.com/# Online medicine order

  5. DavidWaype说道:

    mexico drug stores pharmacies: mexico drug stores pharmacies – mexico pharmacies prescription drugs

  6. Michaelpiepe说道:

    mexican mail order pharmacies: mexican online pharmacies prescription drugs – buying prescription drugs in mexico online

  7. DavidWaype说道:

    mexican mail order pharmacies: purple pharmacy mexico price list – buying prescription drugs in mexico

  8. Michaelpiepe说道:

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

  9. DavidWaype说道:

    purple pharmacy mexico price list: reputable mexican pharmacies online – mexican mail order pharmacies

  10. Charlestaf说道:

    online canadian pharmacy canadadrugpharmacy com canadian pharmacy in canada

  11. Michaelpiepe说道:

    northern pharmacy canada: canadian pharmacy no scripts – canadadrugpharmacy com

  12. EdwardKib说道:

    https://indiapharmast.com/# buy medicines online in india

  13. Michaelpiepe说道:

    reputable mexican pharmacies online: purple pharmacy mexico price list – mexico drug stores pharmacies

  14. Charlestaf说道:

    п»їbest mexican online pharmacies buying from online mexican pharmacy medicine in mexico pharmacies

  15. DavidWaype说道:

    mexico pharmacies prescription drugs: mexican pharmacy – mexico drug stores pharmacies

  16. Charlestaf说道:

    my canadian pharmacy best canadian online pharmacy canadian online pharmacy reviews

  17. DavidWaype说道:

    mexican pharmacy: mexican online pharmacies prescription drugs – medicine in mexico pharmacies

  18. DavidWaype说道:

    top online pharmacy india: indian pharmacy paypal – indian pharmacy

  19. DavidWaype说道:

    mexican online pharmacies prescription drugs: п»їbest mexican online pharmacies – mexican pharmaceuticals online

  20. DavidWaype说道:

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

  21. Michaelpiepe说道:

    canada rx pharmacy world: my canadian pharmacy review – canada rx pharmacy world

  22. Michaelpiepe说道:

    medication from mexico pharmacy: mexico pharmacies prescription drugs – mexican border pharmacies shipping to usa

  23. EdwardKib说道:

    https://canadapharmast.com/# canadianpharmacymeds

  24. Charlestaf说道:

    indianpharmacy com top online pharmacy india buy medicines online in india

  25. EdwardKib说道:

    https://indiapharmast.com/# india pharmacy mail order

  26. Michaelpiepe说道:

    mexican pharmacy: purple pharmacy mexico price list – buying prescription drugs in mexico online

  27. DavidWaype说道:

    medicine in mexico pharmacies: mexican drugstore online – medicine in mexico pharmacies

  28. DavidWaype说道:

    world pharmacy india: online shopping pharmacy india – reputable indian pharmacies

  29. Charlestaf说道:

    п»їbest mexican online pharmacies mexican online pharmacies prescription drugs mexican border pharmacies shipping to usa

  30. Michaelpiepe说道:

    reputable indian pharmacies: reputable indian online pharmacy – reputable indian pharmacies

  31. Charlestaf说道:

    mexican pharmacy mexican pharmaceuticals online buying prescription drugs in mexico

  32. EdwardKib说道:

    https://indiapharmast.com/# best india pharmacy

  33. EdwardKib说道:

    https://foruspharma.com/# buying from online mexican pharmacy

  34. DavidWaype说道:

    canadian pharmacy 24: maple leaf pharmacy in canada – canadian pharmacy king

  35. Charlestaf说道:

    reputable mexican pharmacies online mexico drug stores pharmacies buying prescription drugs in mexico online

  36. DavidWaype说道:

    canadian pharmacy 365: canadian pharmacy 365 – canadianpharmacymeds com

  37. DavidWaype说道:

    buying prescription drugs in mexico online: pharmacies in mexico that ship to usa – mexican drugstore online

  38. Puravive说道:

    Simply wanna input on few general things, The website style and design is perfect, the content is really fantastic. “By following the concept of ‘one country, two systems,’ you don’t swallow me up nor I you.” by Deng Xiaoping.

  39. Prodentim说道:

    An fascinating discussion is worth comment. I feel that it’s best to write more on this topic, it may not be a taboo subject but usually persons are not sufficient to talk on such topics. To the next. Cheers

  40. I was recommended this website by my cousin I am not sure whether this post is written by him as nobody else know such detailed about my trouble You are amazing Thanks

  41. Leanbiome说道:

    Excellent blog here! Also your web site loads up fast! What host are you using? Can I get your affiliate link to your host? I wish my site loaded up as fast as yours lol

  42. Taxi VTC说道:

    Taxi VTC (Voiture de Transport avec Chauffeur est un service de transport personnalisé qui offre des trajets sur mesure avec des véhicules confortables et des chauffeurs professionnels. Contrairement aux taxis traditionnels, les VTC fonctionnent principalement sur réservation via des applications mobiles ou des plateformes en ligne, permettant une planification flexible et des tarifs transparents. Ce service est idéal pour les déplacements privés, professionnels ou touristiques, garantissant un transport de qualité, ponctuel et discret.

  43. Java burn说道:

    What i don’t understood is actually how you are now not actually a lot more well-appreciated than you may be now. You are so intelligent. You already know therefore significantly on the subject of this matter, produced me in my view believe it from a lot of numerous angles. Its like women and men aren’t interested unless it’s one thing to accomplish with Girl gaga! Your personal stuffs excellent. At all times deal with it up!

  44. Prodentim说道:

    Hello.This post was extremely motivating, especially since I was browsing for thoughts on this issue last Tuesday.

  45. newsreality说道:

    I have read some excellent stuff here Definitely value bookmarking for revisiting I wonder how much effort you put to make the sort of excellent informative website

  46. Hello i think that i saw you visited my weblog so i came to Return the favore Im trying to find things to improve my web siteI suppose its ok to use some of your ideas

  47. you are in point of fact a just right webmaster. The website loading pace is incredible. It sort of feels that you’re doing any unique trick. Moreover, The contents are masterwork. you have performed a wonderful job on this matter!

  48. cbd gummies说道:

    Thankyou for this post, I am a big big fan of this internet site would like to proceed updated.

  49. Ripple Kurs Euro说道:

    Ihre Plattform hat für mich wirklich alles verändert. Die Erkenntnisse, die ich aus Ihren Inhalten gewonnen habe, waren von unschätzbarem Wert und ich freue mich darauf, meine Entdeckungsreise mit Ihrer Anleitung fortzusetzen. Vielen Dank, dass Sie eine vertrauenswürdige Quelle der Weisheit sind!

  50. I am no longer sure the place you’re getting your information, but great topic. I must spend some time finding out much more or figuring out more. Thank you for excellent information I was looking for this info for my mission.

发表回复

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