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

/ 2,983评论 / 22925阅读 / 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. Если вы искали где отремонтировать сломаную технику, обратите внимание – ремонт техники в челябинске

  2. EasydrAcura说道:

    Enalapril: viagra pharmacy uk – pfizer lipitor pharmacy

  3. EasydrAcura说道:

    online pharmacy azithromycin: online pharmacy glucophage – trusted online pharmacy viagra

  4. JeffreyRor说道:

    https://onlineph24.com/# testosterone online pharmacy
    medco pharmacy lipitor

  5. JeffreyRor说道:

    https://pharm24on.com/# us online pharmacy
    inhouse pharmacy baclofen

  6. JeffreyRor说道:

    https://onlineph24.com/# priceline pharmacy viagra
    cymbalta pharmacy coupons

  7. EasydrAcura说道:

    online pharmacy australia: 24 hour drug store near me – generic viagra mexico pharmacy

  8. Drstowoola说道:

    cheapest pharmacy to buy cialis: roman online pharmacy reviews – pharmacy generic viagra

  9. Drstowoola说道:

    clomiphene citrate online pharmacy: best online pharmacy accutane – Depo-Medrol

  10. JeffreyRor说道:

    https://pharm24on.com/# viagra online pharmacy us
    crestor online pharmacy

  11. Drstowoola说道:

    clopidogrel online pharmacy: rx express pharmacy panama city fl – tegretol online pharmacy

  12. Drstowoola说道:

    rx clinic pharmacy charlotte nc: pharmacy viagra prices – provigil mexican pharmacy

  13. JeffreyRor说道:

    https://drstore24.com/# vancouver pharmacy viagra
    birth control online pharmacy

  14. JeffreyRor说道:

    https://onlineph24.com/# metoclopramide online pharmacy
    cytotec pharmacy

  15. JeffreyRor说道:

    https://onlineph24.com/# rx relief pharmacy discount card
    Levitra Oral Jelly

  16. JeffreyRor说道:

    https://drstore24.com/# Zyloprim
    australian pharmacy online

  17. Drstowoola说道:

    can you get viagra from the pharmacy: european pharmacy viagra – Diamox

  18. Drstowoola说道:

    erection pills: imiquimod online pharmacy – nexium uk pharmacy

  19. Drstowoola说道:

    india pharmacy mail order: drug store – cabergoline pharmacy

  20. JeffreyRor说道:

    https://easydrugrx.com/# value rx pharmacy irvine
    tylenol 3 online pharmacy

  21. JeffreyRor说道:

    https://drstore24.com/# drug price
    buy viagra tesco pharmacy

  22. JeffreyRor说道:

    https://pharm24on.com/# senior rx care pharmacy
    pharmacy support viagra

  23. JeffreyRor说道:

    https://pharm24on.com/# is pharmacy rx one legitimate
    online pharmacy retin a

  24. Drstowoola说道:

    Endep: med store pharmacy – medplus pharmacy store locator

  25. Drstowoola说道:

    mexican pharmacy: generic lipitor online pharmacy – rx good neighbor pharmacy

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

  27. Drstowoola说道:

    amoxicillin online pharmacy no prescription: spironolactone pharmacy – warfarin monitoring pharmacy

  28. JeffreyRor说道:

    https://onlineph24.com/# online pharmacy flovent inhaler
    pharmacy viagra

  29. JeffreyRor说道:

    https://pharm24on.com/# pharmacy loratadine
    best online pharmacy uk viagra

  30. Drstowoola说道:

    united states online pharmacy viagra: wellbutrin online pharmacy – provigil india pharmacy

  31. JeffreyRor说道:

    https://easydrugrx.com/# advanced care rx pharmacy
    online pharmacy china

  32. businesstrick说道:

    helloI like your writing very so much proportion we keep up a correspondence extra approximately your post on AOL I need an expert in this space to unravel my problem May be that is you Taking a look forward to see you

  33. theorangedip说道:

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

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

  35. WarrenLal说道:

    https://1xbet.contact/# 1xbet официальный сайт мобильная версия

  36. Если вы искали где отремонтировать сломаную технику, обратите внимание – техпрофи

  37. Scottshora说道:

    1xbet официальный сайт: зеркало 1хбет – 1xbet официальный сайт мобильная версия

  38. Если вы искали где отремонтировать сломаную технику, обратите внимание – тех профи

  39. Scottshora说道:

    зеркало 1хбет: зеркало 1хбет – 1хбет

  40. Scottshora说道:

    вавада зеркало: казино вавада – казино вавада

  41. Scottshora说道:

    1хбет: 1xbet официальный сайт – 1хбет зеркало

  42. Scottshora说道:

    пин ап: pin up казино – pin up казино

  43. Scottshora说道:

    pin up: пин ап казино – пин ап

  44. Scottshora说道:

    vavada казино: vavada online casino – vavada

  45. WarrenLal说道:

    https://pin-up.diy/# пин ап зеркало

  46. Scottshora说道:

    пин ап казино вход: пинап казино – пинап казино

发表回复

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