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

/ 1,657评论 / 11769阅读 / 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. Arnoldscava说道:

    mexico drug stores pharmacies mexico drug stores pharmacies reputable mexican pharmacies online

  2. Waynetar说道:

    reputable mexican pharmacies online: buying from online mexican pharmacy – medication from mexico pharmacy

  3. DominicHOr说道:

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

  4. Arnoldscava说道:

    mexican border pharmacies shipping to usa purple pharmacy mexico price list mexican online pharmacies prescription drugs

  5. DominicHOr说道:

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

  6. NelsonSaIlk说道:

    п»їbest mexican online pharmacies: mexico pharmacies prescription drugs – mexican drugstore online

  7. NelsonSaIlk说道:

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

  8. Arnoldscava说道:

    mexican mail order pharmacies buying prescription drugs in mexico online mexican pharmaceuticals online

  9. Waynetar说道:

    buying prescription drugs in mexico: mexico drug stores pharmacies – п»їbest mexican online pharmacies

  10. Waynetar说道:

    medicine in mexico pharmacies: mexican rx online – mexican pharmaceuticals online

  11. DominicHOr说道:

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

  12. DominicHOr说道:

    mexican rx online: mexican pharmaceuticals online – mexican pharmaceuticals online

  13. NelsonSaIlk说道:

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

  14. NelsonSaIlk说道:

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

  15. Arnoldscava说道:

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

  16. I loved as much as youll receive carried out right here The sketch is attractive your authored material stylish nonetheless you command get bought an nervousness over that you wish be delivering the following unwell unquestionably come more formerly again as exactly the same nearly a lot often inside case you shield this hike

  17. Arnoldscava说道:

    mexican rx online best online pharmacies in mexico mexican border pharmacies shipping to usa

  18. Your blog is a true gem in the world of online content. I’m continually impressed by the depth of your research and the clarity of your writing. Thank you for sharing your wisdom with us.

  19. Waynetar说道:

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

  20. Waynetar说道:

    mexican online pharmacies prescription drugs: mexican border pharmacies shipping to usa – buying prescription drugs in mexico

  21. Your blog is a true hidden gem on the internet. Your thoughtful analysis and engaging writing style set you apart from the crowd. Keep up the excellent work!

  22. DominicHOr说道:

    mexican drugstore online: medicine in mexico pharmacies – purple pharmacy mexico price list

  23. Arnoldscava说道:

    pharmacies in mexico that ship to usa mexican rx online mexican drugstore online

  24. DominicHOr说道:

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

  25. Video Bokeh说道:

    Somebody essentially lend a hand to make significantly articles Id state That is the very first time I frequented your website page and up to now I surprised with the research you made to make this actual submit amazing Wonderful task

  26. NelsonSaIlk说道:

    mexican pharmaceuticals online: mexican mail order pharmacies – best online pharmacies in mexico

  27. NelsonSaIlk说道:

    mexican online pharmacies prescription drugs: buying prescription drugs in mexico online – best online pharmacies in mexico

  28. Arnoldscava说道:

    mexican pharmaceuticals online medicine in mexico pharmacies mexican border pharmacies shipping to usa

  29. Waynetar说道:

    mexican border pharmacies shipping to usa: mexico drug stores pharmacies – best online pharmacies in mexico

  30. Your blog is a beacon of light in the often murky waters of online content. Your thoughtful analysis and insightful commentary never fail to leave a lasting impression. Keep up the amazing work!

  31. DominicHOr说道:

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

  32. Waynetar说道:

    mexico drug stores pharmacies: buying from online mexican pharmacy – mexico drug stores pharmacies

  33. DominicHOr说道:

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

  34. NelsonSaIlk说道:

    medication from mexico pharmacy: mexican border pharmacies shipping to usa – mexican pharmaceuticals online

  35. NelsonSaIlk说道:

    medication from mexico pharmacy: buying prescription drugs in mexico online – medicine in mexico pharmacies

  36. Arnoldscava说道:

    п»їbest mexican online pharmacies mexican rx online mexico pharmacies prescription drugs

  37. Arnoldscava说道:

    mexico pharmacies prescription drugs medication from mexico pharmacy mexican drugstore online

  38. Waynetar说道:

    mexican mail order pharmacies: best online pharmacies in mexico – mexican rx online

  39. Waynetar说道:

    mexican online pharmacies prescription drugs: mexican border pharmacies shipping to usa – purple pharmacy mexico price list

  40. DominicHOr说道:

    buying prescription drugs in mexico online: mexico drug stores pharmacies – п»їbest mexican online pharmacies

  41. DominicHOr说道:

    mexican mail order pharmacies: mexican rx online – medicine in mexico pharmacies

  42. Arnoldscava说道:

    buying prescription drugs in mexico mexico pharmacies prescription drugs mexican mail order pharmacies

  43. NelsonSaIlk说道:

    mexican mail order pharmacies: best online pharmacies in mexico – mexico drug stores pharmacies

  44. NelsonSaIlk说道:

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

  45. Arnoldscava说道:

    mexican pharmaceuticals online mexico drug stores pharmacies purple pharmacy mexico price list

  46. Waynetar说道:

    reputable mexican pharmacies online: buying from online mexican pharmacy – mexico pharmacies prescription drugs

  47. DominicHOr说道:

    mexican mail order pharmacies: mexico drug stores pharmacies – mexican pharmaceuticals online

  48. Waynetar说道:

    mexican drugstore online: best online pharmacies in mexico – mexican rx online

  49. NelsonSaIlk说道:

    medicine in mexico pharmacies: pharmacies in mexico that ship to usa – mexico drug stores pharmacies

  50. NelsonSaIlk说道:

    pharmacies in mexico that ship to usa: mexican drugstore online – purple pharmacy mexico price list

发表回复

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