Files
jiecheng-business/5.1声道接入成果总结.md
freeboss b7b5518834 feat: dev-5.1 分支基线(v1.3.35 发版后代码 + 5.1 声道改造文档)
- 以 main(ccc65af) 为基线提交当前工作区代码
- 新增 5.1 声道改造文档两份
- .gitignore 补充 .vscode/、.screenshots/
2026-11-02 19:25:12 +08:00

8.2 KiB
Raw Permalink Blame History

捷成 Android TV — 5.1 环绕声道接入成果总结

版本基线:v1.3.33(aishiRemoteRelease)|验证设备:Amlogic Android 14 盒子(172.16.100.175,曾用 184) 验证结论:AC3 5.1 比特流经 HDMI 直通输出成功,解码器面板显示 AC3


一、目标与结果

目标 结果
接入橘视厅 5.1 环绕声业务渠道,拉取 5.1 片库内容 完成
播放器识别并优先播放 5.1 声道片源 完成
5.1 音频经 HDMI 输出到外接解码器/功放 完成(AC3 源码直通,非 LPCM 下混)

全链路形态:

EPG 点播 → SDK 鉴权(getVideoUrls) → 识别"1080P 5.1 环绕声"独立档
→ H265(硬解) + AC3(平台直通/FFmpeg 软解兜底)
→ HDMI 输出:直通设备=AC3 bitstream(RAW_DIRECT);非直通设备=6ch LPCM(FFmpeg 软解)

二、渠道参数(橘视厅5.1环绕声业务)

参数 值
tenant huashitv
accesser JSTAS51
secret oam25ZqvGy3gVY0x
agcode 1100101010200492358120169
comboCode(业务组合) 1100121044377892530980001
serviceGroupCode 1100122010201752209710182
businessLine(业务线) 4100450044057893707260002
productCode(产品包) 2100130010166202685000333
免登录公钥 debug/release 共用同一把(见 ChannelManger)

三、App 端代码改动

3.1 渠道参数全局替换(运行时 + 默认值三处同步)

3.2 产品包直连(跳过动态取包)

JetsenxSdkUtil.java L49-L53:productCodeSp 直接初始化为官方产品包 2100130010166202685000333,跳过 getAllAssetPrices 动态取包(避免多产品包场景取错包导致 -110 未订购)。

3.3 5.1 片源自动优先(核心逻辑)

JetsenxSdkUtil.java 的 getVideoUrls2()(L785-L804)和 getFreeVideoUrls2()(L850-L869)两处,在 720/1080 解析循环后追加 5.1 覆盖块:

// 5.1 环绕声独立档(format='1080P 5.1 环绕声',H265+AC3_51):自动优先策略下作为 1080 档播放地址。
// Android 5.1(API 22)及以下解码能力有限,跳过 5.1 流,保留普通 1080P。
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
    for (VideoInfo info : videoInfos) {
        String fmt = info.getFormat() == null ? "" : info.getFormat();
        if (fmt.contains("5.1") || fmt.contains("环绕声")) {
            videoUrl_1080 = info.getVideoUrl();
            // PlayCodeBean 同步 movieCode/programCode/specCode → 播放记录上报正确
            ...
            break;
        }
    }
}

设计要点:

  • 最小侵入:复用现有 1080 档通道,档位管理(VideoDetailStatusManager)/播放调用点零改动
  • 5.1 流的 movieCode/programCode/specCode 同步写入 PlayRecordManager,上报与播控正确
  • API 22 及以下自动降级普通 1080P(无软解能力兜底)

3.4 播放器渲染器策略:PREFER → ON(关键决策)

PkExoMediaPlayer.java L110:

// v1.3.32: EXTENSION_RENDERER_MODE_PREFER → FFmpeg 渲染器全量优先(含视频)
// v1.3.33: EXTENSION_RENDERER_MODE_ON     → 平台渲染器优先,FFmpeg 仅兜底

原因:

  1. 直通需求:PREFER 下 FFmpeg 音频渲染器优先抢走 AC3 → 永远软解为 PCM,AudioTrack 永远不会以 ENCODING_AC3 输出,HDMI 源码直通不可达
  2. ON 的行为:平台 MediaCodec 渲染器优先。设备开编码环绕声(ALWAYS)时 ExoPlayer 检测到 AC3 输出能力 → 直通;未开启/不支持时走平台解码或回落 FFmpeg 软解
  3. 额外收益:H265 视频从 FFmpeg 软解回到平台硬解

3.5 FFmpeg 扩展依赖(软解兜底)

app/build.gradle L314-L318:exoplayer-ffmpeg-extension-2.19.1.aar(定制编译,含 AC3/EAC3/DCA/TrueHD 解码器,官方默认版不含)。用于不支持直通的设备软解 AC3 → 6ch LPCM 输出。

3.6 其他

  • versionName → v1.3.33;签名路径改为相对路径 key/jiecheng.jks
  • 打包命令:sh ./gradlew assembleAishiRemoteRelease(遥控版)/ assembleAishiTouchRelease(触屏版)

四、5.1 片源数据形态

  • 独立 URL 档位(非同流多音轨):同一影片多档清晰度中有一档 format='1080P 5.1 环绕声'
  • 该档位:H265 视频 + AC3 5.1(AC3_51)音频
  • EPG/SDK 均无 5.1 元数据字段,唯一标识是 VideoInfo.format 字符串 → UI 角标需依赖此字段(待捷成侧加字段可优化)

五、真机验证结论(Amlogic Android 14)

版本 渲染策略 audio_flinger 实测 效果
v1.3.32 FFmpeg PREFER HAL: PCM_16_BIT, 6ch, usecase: PCM_DIRECT 软解 6ch LPCM 输出 HDMI,有声
v1.3.33 平台优先 ON HAL: AUDIO_FORMAT_AC3, usecase: RAW_DIRECT, DIRECT 线程 AC3 比特流直通,面板显示 AC3

验证命令:adb shell dumpsys media.audio_flinger,关注 DIRECT 输出线程的 HAL format 与 usecase。

六、系统侧音频配置要点(测试设备部署须知)

AC3 直通需系统侧两项配置(设备 root 后操作):

# 1. 开启编码环绕声输出(Amlogic 固件实测:2 是陷阱值,正确部署值 0/3,见下方链路关系)
adb shell settings put global encoded_surround_output 0
# 生效标志:dumpsys media.audio_flinger | grep digital_audio_mode → AUTO

# 2. 重启 App(ExoPlayer 在播放器实例化时读取系统音频能力)

链路关系(Amlogic 固件实测修正):

  • 部署用 0 (AUTO) 或 3 (MANUAL) → HAL digital_audio_mode 为 AUTO → AC3 流走 IEC RAW 直通
  • encoded_surround_output=1 (NEVER) → HAL 被下发 PCM 模式 → 直通不可用(App 注入条件已排除 NEVER,安全回落软解 2.0,不无声)
  • encoded_surround_output=2 (ALWAYS) 在该 Amlogic 固件是陷阱值:policy 照常向 App 上报 AC3 能力,但 HAL 被 SettingsObserver 切到 PCM,两层矛盾表现为无声/静默回退。本文档早前"put ... 2"的建议作废,详见《5.1声道改造-代码变更清单与复用指南.md》§2.3

设备伪装(换机测试不重新开通):root 写 shared_prefs/config.xml 的 ETH_MAC 键 → App 用伪装 MAC 请求沿用 uid/订购。

七、遗留问题与后续规划

7.1 已知问题

  1. 开机重置:设备重启后有系统组件将 encoded_surround_output 改回 1(NEVER),导致 HAL 变 PCM、直通失效,需重新设置并重启 App。待排查改写来源(疑似 Amlogic 设置应用/固件默认逻辑),部署设备需固化该配置
  2. 生效时序:运行时改 encoded_surround_output 后,HAL 的 digital_audio_mode 由 audio policy 在下次输出重配置时才下发 AUTO(实测延迟数分钟/需触发),改完设置应重启 App 并重新进播放

7.2 后续待办

# 事项 说明
1 设备能力检测 App 启动/播放前检测:AC3 直通能力(AudioCapabilities/编码环绕声设置)+ 解码能力,动态决策 直通/软解/降级,并可在 UI 提示当前音频输出模式
2 5.1 解码开关按钮 设置项或播放页开关:开启=优先 5.1 档,关闭=普通 1080P(给无环绕设备的用户退出手段)
3 5.1 节目标识 详情页/海报角标"5.1",基于 VideoInfo.format 含 "5.1"/"环绕声" 判断;EPG 无字段,可推动捷成侧补元数据
4 清晰度菜单区分 档位名显示"1080P 环绕声"替代直接替换 1080 档(当前 5.1 档覆盖 1080 档位)