# Intro

原项目：https://github.com/WhiteMinds/HuYaRecorder

这是 [biliLive-tools](https://github.com/renmu123/biliLive-tools) 的一个平台插件，为其支持了虎牙平台录制

# 安装

**建议所有录制器和manager包都升级到最新版，我不会对兼容性做过多考虑**

`npm i @bililive-tools/huya-recorder @bililive-tools/manager`

# 使用

```ts
import { createRecorderManager } from "@bililive-tools/manager";
import { provider } from "@bililive-tools/huya-recorder";

const manager = createRecorderManager({ providers: [provider] });
manager.addRecorder({
  providerId: provider.id,
  channelId: "7734200",
  quality: 0,
  streamPriorities: [],
  sourcePriorities: [],
});

// 录制前请设置好ffmepg的环境变量，或手动指定，具体见`@bililive-tools/manager`文档
manager.startCheckLoop();
```

## 参数

```ts
interface Options {
  channelId: string; // 直播间ID，具体解析见文档，也可自行解析
  quality: number; // 见画质参数
  qualityRetry?: number; // 画质匹配重试次数, -1为强制匹配画质，0为自动配置，正整数为最大匹配次数
  streamPriorities: []; // 废弃
  titleKeywords?: string; // 禁止录制的标题关键字，英文逗号分开多个
  sourcePriorities: []; // 按提供的源优先级去给CDN列表排序，并过滤掉不在优先级配置中的源，在未匹配到的情况下会优先使用TX的CDN，具体参数见 CDN 参数
  formatPriorities?: string[]; // 支持，`flv`和`hls` 参数，默认为['flv','hls']
  disableAutoCheck?: boolean; // 为 true 时 manager 将跳过自动检查
  segment?: number | string; // 分段参数，单位分钟，如果以"B","KB","MB","GB"结尾，会尝试使用文件大小分段，仅推荐在使用mesio录制引擎时使用
  disableProvideCommentsWhenRecording?: boolean; // 禁用弹幕录制
  saveGiftDanma?: boolean; // 保存礼物弹幕
  saveCover?: boolean; // 保存封面
  api?: "auto" | "mp" | "web" | "wup"; // 默认为auto，在星秀区使用mp接口，其他使用web接口，你也可以强制指定
  videoFormat?: "auto"; // 视频格式： "auto", "ts", "mkv" ，auto模式下, 分段使用 "ts"，不分段使用 "mp4"
  recorderType?: "auto" | "ffmpeg" | "mesio"; // 底层录制器，使用mesio时videoFormat参数无效
  debugLevel?: `verbose` | "basic"; // verbose参数时，录制器会输出更加详细的log
}
```

### 画质

| 画质     | 值    |
| -------- | ----- |
| 2K HDR   | 14100 |
| 2K       | 14000 |
| HDR(10M) | 4200  |
| 原画     | 0     |
| 蓝光20M  | 20000 |
| 蓝光10M  | 10000 |
| 蓝光8M   | 8000  |
| 蓝光4M   | 4000  |
| 超清     | 2000  |
| 流畅     | 500   |

### CDN

不同直播间可能支持的cdn并不一致

| 画质                       | 值   |
| -------------------------- | ---- |
| 阿里                       | AL   |
| 腾讯                       | TX   |
| 华为                       | HW   |
| 火山                       | HS   |
| 网宿                       | WS   |
| 阿里13                     | AL13 |
| 腾讯15                     | TX15 |
| 华为16                     | HW16 |
| 不知道是啥(可能是虎牙自建) | HYZJ |

### 流格式

hls 可能并不适合 mp 的 api，也许你能找到可以使用的cdn

支持 hls 和 flv

## 直播间ID解析

解析出真实直播间ID

```ts
import { provider } from "@bililive-tools/huya-recorder";

const url = "https://www.huya.com/910323";
const { id } = await provider.resolveChannelInfoFromURL(url);
```

### API 接口选择

虎牙提供多种API接口，可以根据情况选择：

| 接口类型 | 说明                                     |
| -------- | ---------------------------------------- |
| auto     | 一般使用web接口，星秀区使用wup接口       |
| web      | 你web看到的东西，星秀区会两分钟分段      |
| wup      | 神奇的接口                               |
| mp       | 小程序接口，也可以录星秀区，但画质差了点 |

# 协议

与原项目保存一致为 LGPL
