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

/ 1,651评论 / 11686阅读 / 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. This really answered my problem, thank you!

  2. Lottery Defeater说道:

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

  3. Prodentim说道:

    At this time it sounds like Drupal is the best blogging platform out there right now. (from what I’ve read) Is that what you are using on your blog?

  4. Prodentim说道:

    You are my intake, I own few blogs and occasionally run out from brand :). “Follow your inclinations with due regard to the policeman round the corner.” by W. Somerset Maugham.

  5. Hmm it seems like your website ate my first comment (it was super long) so I guess I’ll just sum it up what I had written and say, I’m thoroughly enjoying your blog. I as well am an aspiring blog blogger but I’m still new to everything. Do you have any helpful hints for novice blog writers? I’d genuinely appreciate it.

  6. zoritoler imol说道:

    Hi are using WordPress for your blog platform? I’m new to the blog world but I’m trying to get started and set up my own. Do you require any html coding expertise to make your own blog? Any help would be really appreciated!

  7. Ronniecug说道:

    mexican drugstore online cmq pharma mexican pharmacy mexico drug stores pharmacies

  8. JeffreySlord说道:

    https://cmqpharma.com/# mexican rx online
    reputable mexican pharmacies online

  9. JeffreySlord说道:

    https://cmqpharma.com/# mexican rx online
    mexico drug stores pharmacies

  10. JohnieFag说道:

    mexican online pharmacies prescription drugs cmq mexican pharmacy online mexican pharmacy

  11. Ronniecug说道:

    mexico pharmacies prescription drugs mexican pharmacy purple pharmacy mexico price list

  12. JeffreySlord说道:

    https://cmqpharma.com/# mexican mail order pharmacies
    purple pharmacy mexico price list

  13. Ronniecug说道:

    medicine in mexico pharmacies mexican pharmacy mexico pharmacies prescription drugs

  14. Ronniecug说道:

    mexico pharmacy mexican pharmacy online mexican mail order pharmacies

  15. Ronniecug说道:

    purple pharmacy mexico price list cmq mexican pharmacy online mexican online pharmacies prescription drugs

  16. Ronniecug说道:

    buying from online mexican pharmacy cmq mexican pharmacy online medicine in mexico pharmacies

  17. Ronniecug说道:

    mexican mail order pharmacies mexican pharmacy online mexican online pharmacies prescription drugs

  18. Ronniecug说道:

    mexico drug stores pharmacies cmq pharma mexican pharmacy medication from mexico pharmacy

  19. Ronniecug说道:

    purple pharmacy mexico price list cmq mexican pharmacy online mexican pharmacy

  20. Ronniecug说道:

    mexican pharmacy mexican pharmacy online buying from online mexican pharmacy

  21. Ronniecug说道:

    mexican pharmaceuticals online cmq pharma mexican pharmacy п»їbest mexican online pharmacies

  22. Ronniecug说道:

    buying prescription drugs in mexico online cmq mexican pharmacy online buying prescription drugs in mexico

  23. Ronniecug说道:

    reputable mexican pharmacies online mexico pharmacy best online pharmacies in mexico

  24. Ronniecug说道:

    mexican border pharmacies shipping to usa mexican pharmacy online mexico drug stores pharmacies

  25. Ronniecug说道:

    mexico pharmacies prescription drugs mexican online pharmacies prescription drugs buying from online mexican pharmacy

  26. Ronniecug说道:

    mexican online pharmacies prescription drugs cmq mexican pharmacy online mexican drugstore online

  27. Ronniecug说道:

    mexico pharmacy cmq pharma mexican pharmacy pharmacies in mexico that ship to usa

  28. Stephenacigh说道:

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

  29. Donaldhof说道:

    mexico drug stores pharmacies
    http://cmqpharma.com/# mexico pharmacies prescription drugs
    pharmacies in mexico that ship to usa

  30. Ronniecug说道:

    reputable mexican pharmacies online mexican pharmacy online mexico drug stores pharmacies

  31. Ronniecug说道:

    purple pharmacy mexico price list online mexican pharmacy buying from online mexican pharmacy

  32. Ronniecug说道:

    mexico pharmacy cmqpharma.com mexican pharmacy

  33. Ronniecug说道:

    buying prescription drugs in mexico online mexican pharmacy mexican drugstore online

  34. Ronniecug说道:

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

  35. Ronniecug说道:

    mexico drug stores pharmacies mexican pharmacy п»їbest mexican online pharmacies

  36. Ronniecug说道:

    mexican drugstore online cmq pharma buying prescription drugs in mexico

  37. Ronniecug说道:

    medication from mexico pharmacy cmq mexican pharmacy online best online pharmacies in mexico

  38. JeffreySlord说道:

    https://cmqpharma.online/# reputable mexican pharmacies online
    mexican pharmaceuticals online

  39. Ronniecug说道:

    mexican border pharmacies shipping to usa cmq mexican pharmacy online medication from mexico pharmacy

  40. WilliamGlapy说道:

    mexico pharmacies prescription drugs: northern doctors – mexican pharmaceuticals online

  41. JeffreyBuing说道:

    http://northern-doctors.org/# medication from mexico pharmacy

  42. JeffreyBuing说道:

    https://northern-doctors.org/# mexico pharmacies prescription drugs

  43. WilliamGlapy说道:

    best online pharmacies in mexico: Mexico pharmacy that ship to usa – mexican mail order pharmacies

  44. WilliamGlapy说道:

    purple pharmacy mexico price list: Mexico pharmacy that ship to usa – reputable mexican pharmacies online

  45. JeffreyBuing说道:

    http://northern-doctors.org/# buying prescription drugs in mexico

  46. WilliamGlapy说道:

    mexican mail order pharmacies: mexican northern doctors – mexican pharmaceuticals online

  47. JeffreyBuing说道:

    https://northern-doctors.org/# mexico drug stores pharmacies

  48. WilliamGlapy说道:

    mexican pharmaceuticals online: mexican northern doctors – mexican border pharmacies shipping to usa

  49. RichardBlelt说道:

    buying prescription drugs in mexico online northern doctors pharmacy mexican drugstore online

  50. WilliamGlapy说道:

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

发表回复

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