> 来源：https://mac-cms.com/app/app-source
> 简介：空壳影视自定义源 JSON 配置详解，逐字段讲清隐私码、电视 IPTV 直播源（tvSources）、影视点播源（sources）、广告过滤、分类映射，页尾附一份可直接复制的完整 JSON 示例。
> 更新：2026-11-02

# 自定义源配置

空壳影视的所有源都写在一份 JSON 配置里。电视端最常改的是直播（`tvSources`），其次才是影视点播（`sources`）。下面先给总览，再逐字段讲，最后给一份能直接复制的完整示例。

::: tip 两份现成的完整示例
**示例 1**：https://node.mac-cms.com
**示例 2**：https://github.com/maccmsapp/maccms_app_config
把链接丢浏览器打开，就能看到真实配置长什么样。
:::

::: tip 接口类型
资源站的接口类型要选 **MacCMS V10** 或 **苹果V10**，一般资源站首页默认给的就是这个。
:::

::: warning 格式要求
所有符号都要用英文半角，比如 `{ } [ ] " : ,`。中文标点会让 JSON 解析失败。
:::

## 字段总览

| 字段 | 必填 | 说明 |
|------|------|------|
| `privateKey` | 否 | 隐私码，默认 `404` |
| `tvSources` | 否 | 电视直播源（IPTV / WebTV），数组 |
| `sources` | 否 | 影视点播源（MacCMS 接口），数组 |

`tvSources` 里每一项的字段：

| 字段 | 必填 | 说明 |
|------|------|------|
| `name` | 是 | 显示在 App 里的直播源名称 |
| `m3uUrl` | 是 | M3U 格式的直播源地址 |
| `block` | 是 | 是否需要隐私码才可见 |

`sources` 里每一项的字段：

| 字段 | 必填 | 说明 |
|------|------|------|
| `name` | 是 | 显示在 App 里的点播源名称 |
| `url` | 是 | MacCMS 接口地址 |
| `playerName` | 否 | 播放器别名，让界面更好看 |
| `blockTypeName` | 否 | 要屏蔽的分类名，输隐私码后显示 |
| `blockAdsRule` | 否 | 广告过滤正则，需转义 |
| `typeConfig` | 否 | 一级分类转二级分类 |
| `desc` | 否 | 源描述，显示在列表下方 |

## privateKey（隐私码）

```json
"privateKey": "404"
```

这里写的是隐私码。上面这行表示隐私码是 `404`。如果你用的是别人的配置，把配置链接丢浏览器里访问一下，就能看到这个隐私码。

## tvSources（电视直播源）

电视直播配置放在 `tvSources` 里，每个源三个字段：

### name

直播源在 App 里显示的名字，自己起即可。

### m3uUrl

直播源地址，**必须是 M3U 格式**。兼容 IPV4、IPV6。

```json
{
  "name": "IPTV 1 [IPV6]",
  "m3uUrl": "https://example.com/IPTV.m3u",
  "block": false
}
```

### block

控制这个直播源要不要隐私码：

- `false`：所有人都能打开（公开）。
- `true`：要输入隐私码后才能打开（隐私）。

## sources（影视点播源）

影视点播配置放在 `sources` 里。字段较多，逐个说。

### name

点播源在 App 里显示的名字。

### url

MacCMS 接口地址。一般采集站给的是 `http://cj.ffzyapi.com/api.php/provide/vod/`，有的会带上 `at/xml`，像 `http://cj.ffzyapi.com/api.php/provide/vod/at/xml/`。把结尾的 `at/xml` 去掉，剩下 `http://cj.ffzyapi.com/api.php/provide/vod/` 就是能用的接口地址。

把这个地址复制到浏览器访问，会返回一串 JSON 字符串，说明接口通了，可以直接用。

**（可选，让接口更快）** 在刚才返回的内容里找到 `vod_play_from` 字段，比如：

```json
"vod_play_from":"feifan,ffm3u8"
```

这里 `feifan` 是针对网页的，App 用不上；只留 `ffm3u8` 就够了，能减少返回字段的大小。做法是把要用的值加到 `url` 末尾，前面补上 `from`：

- 原来：`http://cj.ffzyapi.com/api.php/provide/vod/`
- 优化：`http://cj.ffzyapi.com/api.php/provide/vod/from/ffm3u8/`

### playerName

**（可不填）** 给播放器起别名，纯粹为了界面好看。键是 `vod_play_from` 的值，值是你起的别名：

```json
"playerName": {
  "ffm3u8": "非凡"
}
```

### blockTypeName

**（可不填）** 要屏蔽的分类名称，多个用英文逗号分隔的数组。对应接口返回里 `type_name` 的值，比如 `"type_id":34,"type_pid":1,"type_name":"伦理片"`，这里就填 `"伦理片"`。被屏蔽的分类在客厅模式下不显示，**输入隐私码后会显示出来**。

```json
"blockTypeName": [
  "伦理",
  "港台三级",
  "韩国伦理",
  "两性课堂",
  "写真热舞"
]
```

### blockAdsRule

**（可不填）** 屏蔽广告的正则表达式，多个用英文逗号分隔的数组，**需要转义**。做法是取该资源里的一个 m3u8，拿到文本内容，找到广告 ts 片段的特征，用正则去匹配。播放时会跳过匹配到的 ts 片段。

```json
"blockAdsRule": [
  "#EXT-X-DISCONTINUITY[\\r\\n]+(?:#EXTINF:(?:4\\.666667|5\\.433333|3\\.333333|3\\.900000|3\\.233333),[\\r\\n]+.*?[\\r\\n]+){5}#EXT-X-DISCONTINUITY"
]
```

### typeConfig

**（可不填）** 分类配置，用于把一级分类转成二级分类。有些资源站（比如快车资源站 `https://caiji.kczyapi.com/api.php/provide/vod/from/kcm3u8/`）给的是一级分类，用这个字段重新组织成"大类下带小类"的结构。

```json
"typeConfig": {
  "电影": ["动作片", "喜剧片", "爱情片", "科幻片", "恐怖片", "剧情片", "纪录片", "战争片", "动画片"],
  "电视剧": ["国产剧", "欧美剧", "韩剧", "日剧", "港剧", "台剧", "泰剧", "海外剧"],
  "综艺": ["演唱会", "大陆综艺", "日韩综艺", "港台综艺", "欧美综艺"],
  "动漫": ["国产动漫", "日韩动漫", "欧美动漫", "港台动漫", "海外动漫"]
}
```

### desc

**（可不填）** 资源描述，显示在设置界面源列表的下方。

```json
"desc": "资源较全，但接口较慢，视频加载又相对流畅。"
```

## 完整示例

下面是一份干净合法、可以直接复制修改的完整配置。电视直播（`tvSources`）在前，影视点播（`sources`）在后：

```json
{
  "privateKey": "404",
  "tvSources": [
    {
      "name": "IPTV 1 [IPV6]",
      "m3uUrl": "https://ghp.ci/https://raw.githubusercontent.com/cuikaipeng/IPTV/refs/heads/main/IPTV.m3u",
      "block": false
    },
    {
      "name": "IPTV 3",
      "m3uUrl": "https://ghp.ci/https://raw.githubusercontent.com/vicjl/myIPTV/refs/heads/main/IPTV-all.m3u",
      "block": true
    }
  ],
  "sources": [
    {
      "name": "非凡资源",
      "url": "http://cj.ffzyapi.com/api.php/provide/vod/from/ffm3u8/",
      "playerName": {
        "ffm3u8": "非凡"
      },
      "blockTypeName": [
        "伦理",
        "港台三级",
        "韩国伦理",
        "两性课堂",
        "写真热舞"
      ],
      "blockAdsRule": [
        "#EXT-X-DISCONTINUITY[\\r\\n]+(?:#EXTINF:(?:4\\.666667|5\\.433333|3\\.333333|3\\.900000|3\\.233333),[\\r\\n]+.*?[\\r\\n]+){5}#EXT-X-DISCONTINUITY"
      ],
      "typeConfig": {
        "电影": ["动作片", "喜剧片", "爱情片", "科幻片", "恐怖片", "剧情片", "纪录片", "战争片", "动画片", "邵氏电影", "4K电影"],
        "电视剧": ["国产剧", "欧美剧", "韩剧", "日剧", "港剧", "台剧", "泰剧", "海外剧"],
        "综艺": ["演唱会", "大陆综艺", "日韩综艺", "港台综艺", "欧美综艺"],
        "动漫": ["国产动漫", "日韩动漫", "欧美动漫", "港台动漫", "海外动漫"],
        "爽文短剧": ["有声动漫", "女频恋爱", "反转爽剧", "古装仙侠", "年代穿越", "脑洞悬疑", "现代都市"],
        "伦理": ["韩国伦理", "港台三级", "西方伦理", "日本伦理", "两性课堂", "写真热舞"],
        "体育赛事": ["篮球", "足球"]
      },
      "desc": ""
    },
    {
      "name": "量子资源",
      "url": "http://cj.lziapi.com/api.php/provide/vod/from/lzm3u8/",
      "playerName": {
        "lzm3u8": "量子"
      },
      "blockTypeName": ["伦理片", "新闻资讯", "电影资讯", "娱乐新闻"],
      "blockAdsRule": [],
      "desc": "资源较全，但接口较慢，视频加载又相对流畅。"
    }
  ]
}
```
