11diff --git a/README.md b/README.md
2- index a8075543..b3027f1d 100644
2+ index a8075543..00d3e336 100644
33--- a/README.md
44+++ b/README.md
5- @@ -7,7 +7,7 @@
5+ @@ -1,35 +1,46 @@
6+ # ijkplayer
7+
8+ - ## 【修改说明(仅生产 arm64)】
9+ -
10+ - > 适用范围明确为:**仅关注并支持生产 arm64(arm64-v8a)**。
11+ + ## 【修改说明(arm64 生产 + x86_64 可构建)】
12+ +
13+ + > 当前链路以 **arm64-v8a 生产** 为主,同时已补齐 **x86_64 动态库构建**(便于模拟器/联调场景)。
14+
615 ### 1) 当前支持环境与系统版本(已验证)
716 - 主机系统:macOS 26.2(Build 25C56),Apple Silicon(Darwin arm64)
817 - Android NDK:`22.1.7171670`(r22)
918- - FFmpeg 基线:`ff4.1.6`
10- + - FFmpeg 基线:`n4.3`,并使用本地/远端 tag:`ijk-n4.3-20260301-007`
19+ + - FFmpeg 基线:`n4.3`,并使用远端 tag:`ijk-n4.3-20260301-007`
1120 - OpenSSL 基线:`OpenSSL_1_1_1w`
12- - 目标 ABI:`arm64-v8a`(不再作为生产目标处理 armv5/armv7a/x86/x86_64)
21+ - - 目标 ABI:`arm64-v8a`(不再作为生产目标处理 armv5/armv7a/x86/x86_64)
22+ + - 目标 ABI:`arm64-v8a`(生产)+ `x86_64`(可构建)
1323
14- @@ -15,11 +15,15 @@
24+ - ### 修改范围
25+ + ### 2) 本次关键修复与增强
1526 - 已修复 `compile-openssl.sh arm64` 在 Darwin arm64 + NDK r22 的 `aarch64-linux-android-ar` 崩溃问题
1627 方案:注入 `ar/ranlib -> llvm-ar/llvm-ranlib` 兼容 wrapper。
1728 - 已修复 `compile-ffmpeg.sh arm64` 同类 `ar` 崩溃问题
@@ -21,22 +32,96 @@ index a8075543..b3027f1d 100644
2132 方案:FFmpeg 编译参数加入 `-fstack-protector-strong`,并验证 `__stack_chk_fail@LIBC`。
2233 - 已验证 arm64 打包产物满足 16KB page size
2334 产物 `libijkffmpeg.so` / `libijksdl.so` / `libijkplayer.so` 的 `PT_LOAD Align` 均为 `0x4000`。
35+ -
36+ - ### 3) 对比官方 ijkplayer 的 git diff 文件范围:
2437+ - 已修复运行时崩溃:`ijkav_register_async_protocol+24`(`SIGSEGV/SEGV_ACCERR`)
2538+ 根因:`n4.3` 下 async 协议对象不可写,旧 ijk 逻辑 `memcpy` 覆盖触发只读段写入。
2639+ 方案:保留注册入口但改为兼容 no-op,使用内置 async 协议实现。
27- + - `init-android.sh` 已固定引用:`IJK_FFMPEG_COMMIT=ijk-n4.3-20260301-007`。
28-
29- ### 3) 对比官方 ijkplayer 的 git diff 文件范围:
40+ + - 已补齐 x86_64 构建链路(NDK r22)
41+ + 方案:`compile-ijk.sh` 增加 `x86_64` 目标;`ijkplayer-x86_64` 的 `APP_STL` 迁移为 `c++_static`。
42+ + - `init-android.sh` 已固定引用:
43+ + - `IJK_FFMPEG_UPSTREAM=https://github.com/CarGuo/FFmpeg.git`
44+ + - `IJK_FFMPEG_FORK=https://github.com/CarGuo/FFmpeg.git`
45+ + - `IJK_FFMPEG_COMMIT=ijk-n4.3-20260301-007`
46+ +
47+ + ### 3) 对比官方 ijkplayer 的 git diff 文件范围
3048 - `android/compile-ijk.sh`
31- @@ -45,7 +49,7 @@
32- - `ndk_r22_ijkyuv.patch` (`ijkmedia/`下的 sub git)
33- - `ndk_r22_16k_commit.patch` (全量)
49+ - `android/contrib/tools/do-compile-ffmpeg.sh`
50+ - `android/contrib/tools/do-compile-openssl.sh`
51+ - `android/contrib/tools/do-detect-env.sh`
52+ - `android/ijkplayer/ijkplayer-arm64/build.gradle`
53+ - `android/ijkplayer/ijkplayer-arm64/src/main/jni/Application.mk`
54+ + - `android/ijkplayer/ijkplayer-x86_64/src/main/jni/Application.mk`
55+ - `config/module-lite.sh`
56+ - `config/module.sh`
57+ + - `config/module-lite-more.sh`
58+ - `ijkmedia/ijkj4a/Android.mk`
59+ - `ijkmedia/ijkplayer/Android.mk`
60+ - `ijkmedia/ijksdl/Android.mk`
61+ @@ -37,19 +48,18 @@
62+ - `init-android-openssl.sh`
63+ - `init-android.sh`
64+ - `commit.patch`
65+ - - `config/module-lite-more.sh`
66+ + - `README.md`
3467
68+ - ### 4) 上述修改相关补丁 patch (对比官方 ijkplayer)
69+ + ### 4) 相关补丁(对比官方 ijkplayer)
70+ - 补丁目录:[GSYVideoPlayer/16kpatch](https://github.com/CarGuo/GSYVideoPlayer/tree/master/16kpatch)
71+ - - `ndk_r22_soundtouch.patch` (`ijkmedia/`下的 sub git)
72+ - - `ndk_r22_ijkyuv.patch` (`ijkmedia/`下的 sub git)
73+ - - `ndk_r22_16k_commit.patch` (全量)
74+ -
3575- - 目前基于 FFmpeg 需要为 4.1.6 手动修改的 `FFmpeg/configure` : `check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto`
36- + - OpenSSL 探测补丁已固化到初始化流程(自动检查并补齐),无需每次手动改 `configure`。
76+ -
77+ - ### 5) 仅 arm64 生产约束
78+ - - 本地构建、验证、问题处理均以 `arm64-v8a` 为唯一生产目标。
79+ -
80+ + - `ndk_r22_16k_commit.patch`(ijkplayer 主仓全量补丁)
81+ + - `ndk_r22_ffmpeg_n4.3_ijk.patch`(FFmpeg: `n4.3 -> ijk-n4.3-20260301-007`)
82+ + - `ndk_r22_soundtouch.patch`(`ijkmedia/ijksoundtouch`)
83+ + - `ndk_r22_ijkyuv.patch`(`ijkmedia/ijkyuv`)
84+ +
85+ + ### 5) ABI 策略
86+ + - 生产发布:仅 `arm64-v8a`。
87+ + - 工程构建兼容:`arm64-v8a + x86_64`。
88+ Platform | Build Status
89+ -------- | ------------
90+ Android | [](https://travis-ci.org/Bilibili/ci-ijk-ffmpeg-android)
91+ diff --git a/android/compile-ijk.sh b/android/compile-ijk.sh
92+ index 9b7a3af8..eea55a60 100755
93+ --- a/android/compile-ijk.sh
94+ +++ b/android/compile-ijk.sh
95+ @@ -25,7 +25,7 @@ fi
96+ REQUEST_TARGET=$1
97+ REQUEST_SUB_CMD=$2
98+ ACT_ABI_32="armv5 armv7a x86"
99+ - ACT_ABI_64="arm64"
100+ + ACT_ABI_64="arm64 x86_64"
101+ ACT_ABI_ALL=$ACT_ABI_64
102+ UNAME_S=$(uname -s)
37103
38- ### 5) 仅 arm64 生产约束
39- - 本地构建、验证、问题处理均以 `arm64-v8a` 为唯一生产目标。
104+ @@ -95,6 +95,9 @@ case "$REQUEST_TARGET" in
105+ arm64)
106+ do_ndk_build $REQUEST_TARGET $REQUEST_SUB_CMD;
107+ ;;
108+ + x86_64)
109+ + do_ndk_build $REQUEST_TARGET $REQUEST_SUB_CMD;
110+ + ;;
111+ all32)
112+ for ABI in $ACT_ABI_32
113+ do
114+ @@ -116,9 +119,9 @@ case "$REQUEST_TARGET" in
115+ *)
116+ echo "Usage:"
117+ echo " compile-ijk.sh arm64"
118+ + echo " compile-ijk.sh x86_64"
119+ echo " compile-ijk.sh all|all32"
120+ echo " compile-ijk.sh all64"
121+ echo " compile-ijk.sh clean"
122+ ;;
123+ esac
124+ -
40125diff --git a/android/contrib/tools/do-compile-ffmpeg.sh b/android/contrib/tools/do-compile-ffmpeg.sh
41126index dffbd591..14f7081c 100755
42127--- a/android/contrib/tools/do-compile-ffmpeg.sh
@@ -65,6 +150,19 @@ index dffbd591..14f7081c 100755
65150 export STRIP=${FF_CROSS_PREFIX}-strip
66151
67152 FF_CFLAGS="-O3 -Wall -pipe \
153+ diff --git a/android/ijkplayer/ijkplayer-x86_64/src/main/jni/Application.mk b/android/ijkplayer/ijkplayer-x86_64/src/main/jni/Application.mk
154+ index 207b1382..8e696367 100644
155+ --- a/android/ijkplayer/ijkplayer-x86_64/src/main/jni/Application.mk
156+ +++ b/android/ijkplayer/ijkplayer-x86_64/src/main/jni/Application.mk
157+ @@ -23,7 +23,7 @@ APP_ABI := x86_64
158+ NDK_TOOLCHAIN_VERSION=4.9
159+ APP_PIE := false
160+
161+ - APP_STL := stlport_static
162+ + APP_STL := c++_static
163+
164+ APP_CFLAGS := -O3 -Wall -pipe \
165+ -ffast-math \
68166diff --git a/ijkmedia/ijkplayer/ijkavformat/ijkasync.c b/ijkmedia/ijkplayer/ijkavformat/ijkasync.c
69167index 0674a07d..93a17fb8 100644
70168--- a/ijkmedia/ijkplayer/ijkavformat/ijkasync.c
0 commit comments