Files
jiecheng-business/盛阳等三方支付EPG传参App开发需求.md
zhaogd d11464d466 基线备份:thirdparty 变体完成 + Android 4.2 兼容改造前
包含内容:
- thirdparty flavor 独立 applicationId + Intent 入口(ThirdPartyEntryActivity)
- 58 后端接口适配(单 /api 路径、code 0/200、camelCase 字段、UNBOUND 轮询)
- MAC 硬件锚定校验(防一凭证多设备共用)
- EPG mac 覆盖 SDK init(sMacOverride)+ ChannelManger 初始化对齐
- 提示文案优化(设备未注册/权益未绑定)
2026-08-25 11:16:40 +08:00

9.0 KiB
Raw Permalink Blame History

盛阳等三方支付EPG传参App开发需求.md

一、项目概述

开发一款基于橘视厅 SDK 的视频点播 App,部署于酒店 IPTV 机顶盒(Android 4.2+)。支持两种入口:EPG 调起直接播放 和 App 内浏览点播。媒资列表、详情、分集、播放地址全部由橘视厅 SDK 提供,不依赖后端。

二、页面结构与流转(核心)

2.1 流转图

EPG Intent 调起                         App 独立启动
(含设备标识 + 节目编码)                   (无节目编码)
        │                                     │
        ▼                                     ▼
┌───────────────────────────────────────────────────┐
│                   启动页                           │
│  1. 解析 Intent 传参                               │
│  2. 调 init 接口 -> 获取 sign                      │
│  3. 调 checkBenefits -> 获取 thirdCardNo           │
│  4. 初始化橘视厅 SDK                               │
└───────────────────────┬───────────────────────────┘
                        │
           ┌────────────┴────────────┐
           │                         │
    有 programCode             无 programCode
           │                         │
           ▼                         ▼
   ┌───────────────┐        ┌───────────────┐
   │    播放页      │        │   媒资列表页   │
   │ (直接获取地址  │        │ (SDK 提供数据) │
   │  全屏播放)     │        └───────┬───────┘
   └───────┬───────┘                │
           │                         ▼
           │ 返回            ┌───────────────┐
           └──────────────► │    详情页      │
                            │ (SDK 提供数据)  │
                            │ 选集/介绍/播放  │
                            └───────┬───────┘
                                    │ 点击播放
                                    ▼
                            ┌───────────────┐
                            │    播放页      │
                            │ (全屏播放)     │
                            └───────┬───────┘
                                    │ 返回/播完
                                    ▼
                              回到详情页或列表页
                              用户可选其他影片

2.2 页面职责

页面 数据来源 职责
启动页 后端 init/checkBenefits 设备初始化、权益校验、SDK 初始化
媒资列表页 橘视厅 SDK 栏目分类、影片海报网格、分页加载
详情页 橘视厅 SDK 影片介绍、电视剧选集列表、播放入口
播放页 橘视厅 SDK + MediaPlayer 获取播放地址、全屏播放、遥控器控制

三、EPG Intent 接收(核心入口)

3.1 Intent 注册

<activity android:name=".LaunchActivity" android:exported="true">
    <intent-filter>
        <action android:name="com.pukka.mediaapp.PARTNER_LAUNCH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

3.2 Intent 参数

参数 类型 必填 说明
mac String 否* 设备 MAC
wifiMac String 否 WiFi MAC
deviceSn String 否 设备 SN
deviceUid String 否* 设备唯一标识
programCode String 否 节目编码。有值=直接播放,无值=进入列表

*mac 和 deviceUid 至少传一个,用于后端 init 接口识别设备。优先级:EPG 传入 > 本地采集。

3.3 启动分支逻辑

收到 Intent
  │
  ├─ 步骤1:收集设备标识(优先 EPG 传入,兜底本地采集)
  ├─ 步骤2:调 init 接口 -> 获取 sign
  ├─ 步骤3:调 checkBenefits -> 获取 thirdCardNo + status
  ├─ 步骤4:用 thirdCardNo 初始化橘视厅 SDK
  │
  ├─ 有 programCode?
  │   ├─ YES -> 调 SDK 获取播放地址 -> 跳转播放页(全屏)
  │   └─ NO  -> 跳转媒资列表页
  │
  └─ 播放页返回后 -> 进入媒资列表页(用户可继续浏览)

四、init 与 checkBenefits 接口

4.1 设备初始化接口

POST http://{后端地址}/api/jst/init
Content-Type: application/json

请求体:
{
    "mac": "EC:F7:2B:03:1F:97",
    "deviceUid": "TEST-UID-001"
}

响应体:
{
    "code": 0,
    "msg": "success",
    "sign": "OToxNzg1...",           // 鉴权凭证,后续接口 Header 携带
    "data": {
        "device": { "deviceId": 9 }
    }
}

4.2 权益查询接口

POST http://{后端地址}/api/jst/checkBenefits
Header: sign: {init 返回的 sign}
Content-Type: application/json

响应体:
{
    "code": 0,
    "msg": "success",
    "data": {
        "status": "ACTIVE",           // ACTIVE=已激活 / UNBOUND=未绑定
        "thirdCardNo": "DbzgHwPRK18pDKVZIS3AdBfQw",  // 橘视厅 SDK uid 参数
        "cardNo": "7D9AFE7677A758CD",
        "expireAt": "2026-07-29 17:25:05"
    }
}

4.3 心跳续期接口

POST http://{后端地址}/api/jst/heartBeat
Header: sign: {init 返回的 sign}

// 每 30 分钟调用一次,sign 过期后需重新调 init

后端只负责以上三个接口。媒资、详情、分集、播放地址全部由橘视厅 SDK 提供。

五、橘视厅 SDK 能力(媒资+播放,全部 SDK 提供)

5.1 SDK 初始化

checkBenefits 返回 thirdCardNo 后,初始化 SDK:

JetsenxSdk.init(
    agcode,      // thirdCardNo(checkBenefits 返回)
    mac,         // 设备 MAC
    uid,         // thirdCardNo(checkBenefits 返回)
    "huashitv",  // tenant(固定值)
    secret,      // 密钥(由橘视厅分配)
    accesser,    // 访问者标识(由橘视厅分配)
    2,           // utype(固定值)
    "",          // extendJson
    ""           // comboCode
);

5.2 SDK 提供的能力

能力 SDK 方法 说明
媒资列表 SDK 提供 栏目分类、影片列表、海报、分页
内容详情 SDK 提供 影片介绍、演员、评分等
电视剧分集 SDK 提供 选集列表,每集 contentcode
播放地址(付费) JetsenxSdk.getVideoUrls(productCode, programCode, callback) 返回 VideoInfo[],含 720P/1080P 地址
播放地址(免费) JetsenxSdk.getFreeVideoUrls(programCode, callback) parentContentType="8" 时调用
产品定价 JetsenxSdk.getAllAssetPrices(accesser, secret, callback) 获取 productCode(packageCode 字段)

5.3 播放地址获取要点

1. productCode = getAllAssetPrices() 返回的第一个 packageCode
2. 根据 parentContentType 选择接口:
   - "8" -> getFreeVideoUrls(programCode)
   - 其他 -> getVideoUrls(productCode, programCode)
3. 返回 VideoInfo[],按 format 字段区分清晰度
4. programCode 必须是分集级编码(非电视剧父级编码)

六、播放页

6.1 技术方案

使用系统原生 MediaPlayer + SurfaceView(兼容 Android 4.2,不用 ExoPlayer):

  • 支持 HLS(.m3u8)格式
  • 全屏横屏播放
  • 遥控器控制:OK键暂停/播放、左右键快进快退、返回键退出
  • 播放地址带时效性 auth_key

6.2 播放完成流转

播放完成 / 用户按返回
  ├── EPG 直接播放进入的 -> 返回媒资列表页
  └── 详情页进入的 -> 返回详情页(可继续选集播放)

七、技术约束(Android 4.2 兼容)

依赖 版本 原因
minSdk 17 Android 4.2
Retrofit 2.6.0 2.9+ 传递依赖 OkHttp 3.14 不兼容
OkHttp 3.12.0(force) 3.12.1+ 含 Android10Platform,VerifyError
Gson 2.8.6 2.9+ 含 ReflectionHelper,VerifyError
Coroutines 1.6.4 1.7+ 要求 minSdk 21
视频播放 MediaPlayer ExoPlayer 2.14+ 不兼容
主题 AppCompat MaterialComponents 主 dex 方法数超限
multidex 启用 主 dex 保留 androidx.appcompat.** / kotlinx.coroutines.** / retrofit2.**

八、参考代码

测试阶段已验证的代码在 partner-test-app/ 目录:

文件 作用
JetsenxSdkUtil.kt SDK 封装:init + getVideoUrls + getFreeVideoUrls
PartnerSignManager.kt 后端接口:init + checkBenefits + heartBeat
PartnerApiService.kt Retrofit 接口定义
VideoPlayerActivity.kt MediaPlayer + SurfaceView 播放实现
multidex-config.pro Android 4.2 multidex 配置