ijkplayer icon indicating copy to clipboard operation
ijkplayer copied to clipboard

可以支援 android 嗎?

Open WeilJimmer opened this issue 1 year ago • 28 comments

可以支援 android 嗎?在原項目的 ijkplayer 是 android/ios 都支援。

這個項目在 android 也能用嗎?

WeilJimmer avatar Sep 12 '24 02:09 WeilJimmer

经历了这几年的更新,现在不保证 Android 平台还能用起来。支持安卓平台需要做的事情如下:

1、Android 平台的 FFmpeg 需要从 4.0 升级上来,其他依赖库需要编译,支持高版本 ndk 2、Android平台的视频渲染最好能用 Vulkan 替代 OpenGL ES 3、源码上的改动需要适配下,相对比较简单

大家有能力和兴趣,可以提 PR,我一个人的精力有限。 伸手党们可以对我打赏,大家都知道加班写代码的辛苦。

debugly avatar Sep 12 '24 10:09 debugly

I have interested with this aura. and I found that develop branch is active for request so would I able to push the new commit for android

vinayhvaghamshi avatar Sep 20 '24 04:09 vinayhvaghamshi

Contributions are welcomed.

debugly avatar Sep 20 '24 05:09 debugly

@debugly 期待支持 Android !支持~

juntaosun avatar Sep 22 '24 06:09 juntaosun

@debugly 麻烦支持android,谢谢

lckjcnWq avatar Nov 12 '24 09:11 lckjcnWq

https://github.com/HappyCoderLife/ijkplayerPlus

wnpllrzodiac avatar Jan 13 '25 15:01 wnpllrzodiac

我准备支持安卓平台了,谁能告诉我需要支持哪些CPU结构?这么多年过去了,是不是该更新了,下面是之前支持的:

FF_ACT_ARCHS_32="armv5 armv7a x86"
FF_ACT_ARCHS_64="armv5 armv7a arm64 x86 x86_64"

debugly avatar Jan 15 '25 01:01 debugly

搜下微信支持到安卓6.0,那么暂定API 使用 23 版本。

debugly avatar Jan 15 '25 01:01 debugly

@debugly 多谢大佬,期待

lckjcnWq avatar Jan 16 '25 03:01 lckjcnWq

@debugly 非常期待!也非常感謝大大!

WeilJimmer avatar Jan 16 '25 09:01 WeilJimmer

非常期待

graphenn avatar Jan 17 '25 18:01 graphenn

最新进展: 安卓平台的openssl,ffmpeg库已经成功编译,通用三方库编译工具基本成形!

有个问题,除了这俩库你们还用到啥功能了,依赖了什么三方库?

debugly avatar Jan 18 '25 03:01 debugly

最新进展: 安卓平台的openssl,ffmpeg库已经成功编译,通用三方库编译工具基本成形!

有个问题,除了这俩库你们还用到啥功能了,依赖了什么三方库?

ffmpeg 編譯成功代表其內部的codec也都幾乎 support 嗎? (例如 wmv, rmvb, ogg 等,只要在編譯時加入 COMMON_FF_CFG_FLAGS 參數指定編碼就能用嗎?)

抱歉不是很理解這個,我知道 rtsp 會用到 openssl。

WeilJimmer avatar Jan 18 '25 04:01 WeilJimmer

还依赖了libx264,还有个265的

lckjcnWq avatar Jan 20 '25 00:01 lckjcnWq

最新进展: 安卓平台的openssl,ffmpeg库已经成功编译,通用三方库编译工具基本成形! 有个问题,除了这俩库你们还用到啥功能了,依赖了什么三方库?

ffmpeg 編譯成功代表其內部的codec也都幾乎 support 嗎? (例如 wmv, rmvb, ogg 等,只要在編譯時加入 COMMON_FF_CFG_FLAGS 參數指定編碼就能用嗎?)

抱歉不是很理解這個,我知道 rtsp 會用到 openssl。

不依赖三方库的解码器是可以开启的,比如 opus 解码器就需要先编译 libopus才能开启。

debugly avatar Jan 20 '25 01:01 debugly

还依赖了libx264,还有个265的

x264? 解码是不需要的,当需要编码时才需要哇。

debugly avatar Jan 20 '25 01:01 debugly

编译受阻,/ijkplayer-arm64/src/main/jni/ffmpeg/Android.mk:ijkffmpeg: LOCAL_SRC_FILES points to a missing file 兄弟们,要等年后解决了。

debugly avatar Jan 20 '25 09:01 debugly

ndk-build 编译失败:

Android NDK: ERROR:~/ijkplayer/android/ijkplayer/ijkplayer-arm64/src/main/jni/ffmpeg/Android.mk:avcodec: LOCAL_SRC_FILES should point to a file ending with ".so" 
Android NDK: The following file is unsupported: ~/ijkplayer/android/contrib/build/ffmpeg-arm64/output/libswscale.a

我编译好了 ffmpeg 的静态库,然后使用 ndk-build 接着构建 ijkplayer.so 呢,就遇到了上面的问题。

谁能给我点确切的答案,ndk-build 不允许依赖静态库吗?

debugly avatar Jan 20 '25 10:01 debugly

ndk-build 编译失败:

Android NDK: ERROR:~/ijkplayer/android/ijkplayer/ijkplayer-arm64/src/main/jni/ffmpeg/Android.mk:avcodec: LOCAL_SRC_FILES should point to a file ending with ".so" 
Android NDK: The following file is unsupported: ~/ijkplayer/android/contrib/build/ffmpeg-arm64/output/libswscale.a

我编译好了 ffmpeg 的静态库,然后使用 ndk-build 接着构建 ijkplayer.so 呢,就遇到了上面的问题。

谁能给我点确切的答案,ndk-build 不允许依赖静态库吗?

我看了一下 ijkplayer/android/ijkplayer/ijkplayer-arm64/src/main/jni/Android.mk

按照原版 ijk 的編譯流程,會生成一個 libijkffmpeg.so,這裡看起來就是將這個 libijkffmpeg.so 附加到 LOCAL_SRC_FILES 這個變數裡。

你有編譯出 libijkffmpeg.so 放在正確的位置嗎?

WeilJimmer avatar Jan 21 '25 05:01 WeilJimmer

我没有使用原版编译脚本,完全重写了,我编译出来的是一堆.a静态库。

debugly avatar Jan 22 '25 14:01 debugly

重写建议用CMake脚本。 android放弃android.mk 了

wnpllrzodiac avatar Jan 24 '25 02:01 wnpllrzodiac

谢谢提醒,我准备把三方库都编译成静态库,然后打包出来一个ijkplayer.so的动态库,你感觉这样做好吗? 后续debug调试会受影响吗?

debugly avatar Jan 24 '25 02:01 debugly

第三方库静态库可以。应该也没有需求调试第三方库。 静态库的坏处是 size比较大。以前boost的android ios 静态库,有1个G大。不便于分发。

wnpllrzodiac avatar Jan 27 '25 07:01 wnpllrzodiac

最新进展,在编译 ijkplayer.so 的时候遇到了这个问题,谁能提供帮助呢?

ld.lld: error: relocation R_AARCH64_ADR_PREL_PG_HI21 cannot be used against symbol 'ff_sbr_noise_table'; recompile with -fPIC
>>> defined in /Users/matt/Downloads/ijkplayerPlus-master/android/ijkplayer/ijkplayer-cmake/src/main/cpp/libs/ijkffmpeg/ijkffmpeg-arm64/lib/libavcodec.a(aacsbr.o)
>>> referenced by sbrdsp_neon.S:300 (libavcodec/aarch64/sbrdsp_neon.S:300)
>>>               sbrdsp_neon.o:(ff_sbr_hf_apply_noise_0_neon) in archive /Users/matt/Downloads/ijkplayerPlus-master/android/ijkplayer/ijkplayer-cmake/src/main/cpp/libs/ijkffmpeg/ijkffmpeg-arm64/lib/libavcodec.a

可以确定是在 ffmpeg 开启了 neon 和 asm 特性后就会报这个错,不开启则没有这个问题。 各位有知道如何解决的吗?

debugly avatar Mar 11 '25 09:03 debugly

我不会写,我给你大赏

oyjcmyn avatar Mar 11 '25 13:03 oyjcmyn

我不会写,我给你大赏

感谢支持,等我搞完后你可以学习一下!

吐槽下安卓端搞完了三方库编译,就搞ijk 的so,然后还要搞配套demo,这个 gradle 升级可真麻烦,代码各种报错,一会这找不到,一会那缺失的,最磨人。

debugly avatar Mar 11 '25 13:03 debugly

刚跑起来的demo效果,这个蓝色背景对吗?谁用过最初的ijk帮忙看看。

Image

debugly avatar Mar 12 '25 02:03 debugly

颜色不对,原因是默认像素格式使用的 rv32,在模拟器上有问题,会触发断言: assert(overlay->format == SDL_FCC_RV16); 把断言屏蔽掉就显示成上面的颜色了。

demo 里可以在设置里修改 Pixel Format,只要不是 RGBX 8888 就行。

或者直接改代码:

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", "fcc-_es2");

iOS 默认是 "fcc-_es2",目前还不知道安卓为啥默认搞成 rv32。

debugly avatar Mar 18 '25 01:03 debugly

经过不懈努力,终于将原版 ijkplayer 满血复活, 安卓、iOS两端都可以使用,直接一步到位,为你预编译成 aar 和 xcframework 了。

有问题还能基于 demo 直接调试,安卓 3 个 so 合并成了一个 aar。

欢迎使用。

debugly avatar Mar 26 '25 02:03 debugly