npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@bililive-tools/douyin-recorder

v1.11.1

Published

@bililive-tools douyin recorder implemention

Downloads

320

Readme

Intro

原项目:https://github.com/WhiteMinds/DouYinRecorder

这是 biliLive-tools 的一个平台插件,为其支持了抖音平台录制

安装

npm i @bililive-tools/douyin-recorder @bililive-tools/manager

使用

import { createRecorderManager } from "@bililive-tools/manager";
import { provider } from "@bililive-tools/douyin-recorder";

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

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

参数

interface Options {
  channelId: string; // 直播间ID,具体解析见文档,也可自行解析
  quality: string; // 见画质参数
  qualityRetry?: number; // 画质匹配重试次数, -1为强制匹配画质,0为自动配置,正整数为最大匹配次数
  streamPriorities: []; // 废弃
  sourcePriorities: []; // 废弃
  formatPriorities?: string[]; // 支持,`flv`和`hls` 参数,默认为['flv','hls']
  disableAutoCheck?: boolean; // 为 true 时 manager 将跳过自动检查
  segment?: number | string; // 分段参数,单位分钟,如果以"B","KB","MB","GB"结尾,会尝试使用文件大小分段,仅推荐在使用mesio录制引擎时使用
  disableProvideCommentsWhenRecording?: boolean; // 禁用弹幕录制
  saveGiftDanma?: boolean; // 保存礼物弹幕
  saveCover?: boolean; // 保存封面
  videoFormat?: "auto"; // 视频格式: "auto", "ts", "mkv" ,auto模式下, 分段使用 "ts",不分段使用 "mp4"
  useServerTimestamp?: boolean; // 控制弹幕是否使用服务端时间戳,默认为true
  doubleScreen?: boolean; // 是否使用双屏直播流,开启后如果是双屏直播,那么就使用拼接的流,默认为true
  recorderType?: "auto" | "ffmpeg" | "mesio" | "bililive"; // 底层录制器,使用mesio和bililive时videoFormat参数无效
  auth?: string; // 传递cookie
  uid?: string; // 参数为 sec_user_uid 参数
  api?: "web" | "webHTML" | "mobile" | "userHTML" | "balance" | "random"; // 使用不同的接口,默认使用web,具体区别见文档
  titleKeywords?: string; // 禁止录制的标题关键字,英文逗号分开多个
  debugLevel?: `verbose` | "basic"; // verbose参数时,录制器会输出更加详细的log
}

画质

遗漏了部分画质,有了解的可以提PR

| 画质 | 值 | | ---------------------- | ----------- | | 原画 | origin | | 蓝光 | uhd | | 超清 | hd | | 高清 | sd | | 标清 | ld | | 音频流 | ao | | 真原画(音频流中获取的) | real_origin |

直播间ID解析

解析出真实直播间ID

import { provider } from "@bililive-tools/douyin-recorder";

const url = "https://live.douyin.com/203641303310";
// 同样支持解析 https://v.douyin.com/DpfoBLAXoHM/, https://www.douyin.com/user/MS4wLjABAAAAE2ebAEBniL_0rF0vIDV4vCpdcH5RxpYBovopAURblNs
const { id } = await provider.resolveChannelInfoFromURL(url);

不同请求接口的区别

mobileuserHTML 必须传入 uid 参数

| 描述 | 备注 | | ---------------- | ---------------------------------------- | | web直播间接口 | 效果不错 | | mobile直播间接口 | 不易风控,无验证码,海外IP可能无法使用 | | 直播间web解析 | 易风控,有验证码,单个接口1M流量 | | 用户web解析 | 不易风控,海外IP无法使用,单个接口1M流量 | | 负载均衡 | 使用负载均衡算法来分摊防止风控 | | 随机 | 从几个接口里挑一个 |

协议

与原项目保存一致为 LGPL