Discord 自机器人视频
[叹息] 使用您账户上的任何自动化程序都会导致您的账户被Discord永久禁用. 冒险使用
特征
- 在语音频道播放视频和音频( A)
Go Live,或网络相机视频)
执行情况
我所执行的和所没有的.
视频解码器
- VP8(支持一次,为可维护性而删除)
- 自愿承诺9
- H.264 (英语)
- H.265 (英语)
- 自动取款机1
包类型
- RTP( 发送实时数据)
- RTX(再发送)
连接类型
- 正则语音连接
- 开始生活
加密
- 传输加密
- 端到端加密
额外
- 查找 RTP 标题扩展名( discord special) (discord 似乎使用 单字节 RTP 标题扩展名(中文(简体) )
由 Discord 支持的扩展( 取自 Webrtc sdp 交换器)
"a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level"
"a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
"a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
"a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid"
"a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay"
"a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type"
"a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing"
"a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space"
"a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id"
"a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"
"a=extmap:13 urn:3gpp:video-orientation"
"a=extmap:14 urn:ietf:params:rtp-hdrext:toffset"
所需资源
对于全部功能,此库需要使用 FFmpeg 构建 libzmq 启用 。 我们的建议如下:
- 视窗 & Linux : BtbN 的 FFmpeg 构建
- macOS (英特尔): 从未见过.cx
- macOS (Apple硅): 安装自家酿造机
使用量
安装此软件包, 并同时安装端点依赖性@ lng2004/ discord.js- selfbot- v13 :
npm install @dank074/discord-video-stream@latest
npm install @lng2004/discord.js-selfbot-v13@latest
[大 该图书馆使用本土附属物(
node-av财务报告和审定财务报表node-datachannel) (中文(简体) ). 如果您使用默认不运行安装脚本的软件包管理器( Q)pnpm, (中文(简体) ),bun等),您需要允许运行安装脚本用于node-av财务报告和审定财务报表node-datachannel正常操作.
创建新 Streamer, 并传递给自控客户端
import { Client } from "@lng2004/discord.js-selfbot-v13";
import { Streamer } from '@dank074/discord-video-stream';
const streamer = new Streamer(new Client());
await streamer.client.login('TOKEN HERE');
让客户端加入语音频道
await streamer.joinVoice("GUILD ID HERE", "CHANNEL ID HERE");
开始发送媒体
import { prepareStream, playStream, Utils, Encoders } from "@dank074/discord-video-stream"
try {
// NVENC is also available, change Encoders.software to Encoders.nvenc and
// adapt the settings
let encoder = Encoders.software({
x264: {
preset: "superfast"
},
x265: {
preset: "superfast"
}
});
const { command, output } = prepareStream("DIRECT VIDEO URL OR READABLE STREAM HERE", {
encoder,
// Specify either width or height for aspect ratio aware scaling
// Specify both for stretched output
height: 1080,
// Force frame rate, or leave blank to use source frame rate
frameRate: 30,
bitrateVideo: 5000,
bitrateVideoMax: 7500,
videoCodec: Utils.normalizeVideoCodec("H264" /* or H265 */),
});
command.on("error", (err, stdout, stderr) => {
// Handle ffmpeg errors here
});
await playStream(output, streamer, {
type: "go-live" // use "camera" for camera stream
});
console.log("Finished playing video");
} catch (e) {
console.log(e);
}
可用的编码器选项
/**
* A function returning encoder settings for a specific avg and max bitrate
* You can define your own, or use the pre-made functions in the library
*/
encoder: EncoderSettingsGetter;
/**
* Disable transcoding of the video stream. If specified, all video related
* options have no effects
*
* Only use this if your video stream is Discord streaming friendly, otherwise
* you'll get a glitchy output
*/
noTranscoding?: boolean;
/**
* Video output width
*/
width?: number;
/**
* Video output height
*/
height?: number;
/**
* Video output frames per second
*/
fps?: number;
/**
* Video average bitrate in kbps
*/
bitrateVideo?: number;
/**
* Video max bitrate in kbps
*/
bitrateVideoMax?: number;
/**
* Audio bitrate in kbps
*/
bitrateAudio?: number;
/**
* Enable audio output
*/
includeAudio?: boolean;
/**
* Enables hardware accelerated video decoding. Enabling this option might result in an exception
* being thrown by Ffmpeg process if your system does not support hardware acceleration
*/
hardwareAcceleratedDecoding?: boolean;
/**
* Output video codec. **Only** supports H264, H265, and VP8 currently
*/
videoCodec?: SupportedVideoCodec;
/**
* Adds ffmpeg params to minimize latency and start outputting video as fast as possible.
* Might create lag in video output in some rare cases
*/
minimizeLatency?: boolean;
/**
* Custom headers for HTTP requests
*/
customHeaders?: Record<string, string>;
/**
* Custom input options to pass directly to ffmpeg
* These will be added to the command *before* other options
*/
customInputOptions?: string[];
/**
* Custom ffmpeg flags/options to pass directly to ffmpeg
* These will be added to the command *after* other options
*/
customFfmpegFlags?: string[];
playStream 可用选项
/**
* Set stream type as "Go Live" or camera stream
*/
type?: "go-live" | "camera",
/**
* Override video width sent to Discord.
*
* DO NOT SPECIFY UNLESS YOU KNOW WHAT YOU'RE DOING!
*/
width?: number,
/**
* Override video height sent to Discord.
*
* DO NOT SPECIFY UNLESS YOU KNOW WHAT YOU'RE DOING!
*/
height?: number,
/**
* Override video frame rate sent to Discord.
*
* DO NOT SPECIFY UNLESS YOU KNOW WHAT YOU'RE DOING!
*/
frameRate?: number,
/**
* Same as ffmpeg's `readrate_initial_burst` command line flag
*
* See https://ffmpeg.org/ffmpeg.html#:~:text=%2Dreadrate_initial_burst
*/
readrateInitialBurst?: number,
绩效提示
见 此页面 关于改进业绩的一些建议
运行示例
examples/basic/src/config.json数字 :
"token": "SELF TOKEN HERE",
"acceptedAuthors": ["USER_ID_HERE"],
- 配置您的
config.json和你的自我标志 - 生成 js 文件
npm run build - 以 :
npm run start - 加入语音频道
- 以命令开始流出 :
用于启动
$play-live <Direct video link>
或用于相机
$play-cam <Direct video link>
例如:
$play-live http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4
问题
- 我能同时在现有的语音连接(CAM)和连接上流吗?
是的,只是发送媒体包 通过两个连接。 语音网关希望您在用户打开相机时发出信号,以确保您使用 client.signalVideo(guildId, channelId, true) 在开始发送相机媒体包之前.
- 这个图书馆有机器人标志吗?
不,Discord屏蔽了来自bots的视频 这就是为什么这个库 使用自机器人库作为对等依赖。 您必须使用用户代号