# @gdty/jzpush-npm-sdk

> webrtc push and pull sdk，support aliyun tc srs

Latest version **2.0.5** (published 2025-09-28) · MulanPSL-2.0 license · 0 weekly downloads

## Install

```sh
npm install @gdty/jzpush-npm-sdk
pnpm add @gdty/jzpush-npm-sdk
yarn add @gdty/jzpush-npm-sdk
bun add @gdty/jzpush-npm-sdk
```

## Health

**Score 25/100 (F)** — status: maintenance-mode.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.5 |
| Published | 2025-09-28 |
| First published | 2024-07-03 |
| Weekly downloads | 0 |
| License | MulanPSL-2.0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 14 |
| Unpacked size | 1.1 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | GDTY |
| Maintainers | timfeng |
| Keywords | webrtc |

## Links

- npm: https://www.npmjs.com/package/@gdty/jzpush-npm-sdk
- npm.io page: https://npm.io/package/@gdty/jzpush-npm-sdk

## Dependencies (14)

- [md5](https://npm.io/package/md5.md) ^2.3.0
- [axios](https://npm.io/package/axios.md) ^1.1.3
- [hls.js](https://npm.io/package/hls.js.md) 1.6.2
- [loglevel](https://npm.io/package/loglevel.md) ^1.8.1
- [recordrtc](https://npm.io/package/recordrtc.md) ^5.6.2
- [node-onvif](https://npm.io/package/node-onvif.md) ^0.1.7
- [rtc-detect](https://npm.io/package/rtc-detect.md) ^0.0.4
- [m3u8-parser](https://npm.io/package/m3u8-parser.md) ^6.0.0
- [@gdty/ffmpeg](https://npm.io/package/@gdty/ffmpeg.md) ^v1.2.1
- [silly-datetime](https://npm.io/package/silly-datetime.md) ^0.1.2
- [webrtc-adapter](https://npm.io/package/webrtc-adapter.md) ^8.1.0
- [@dropb/diskinfo](https://npm.io/package/@dropb/diskinfo.md) ^3.0.0
- [multistreamsmixer](https://npm.io/package/multistreamsmixer.md) ^1.2.2
- [@gdty/fluent-ffmpeg](https://npm.io/package/@gdty/fluent-ffmpeg.md) ^2.1.5

## Recent versions

- 2.0.5 (latest) — 2025-09-28
- 2.0.4 — 2025-09-27
- 2.0.3 — 2025-07-28
- 2.0.2 — 2025-05-10
- 2.0.1 — 2025-05-07
- 2.0.0 — 2025-05-06
- 1.9.9 — 2025-05-04
- 1.9.8 — 2024-07-07
- 1.9.7 — 2024-07-03

## README

# 一、说明
+ jzpush-npm-sdk为纯js的视频直播sdk，包括浏览器端和node端。致力服务于音视频直播点播回放等功能。
## webrtc超低延迟直播推流器
JzRtcPublisherAsync
## webrtc超低延迟直播播放器
JzRtcPlayerAsync
## 兼容多种格式点播播放器
JzPlayerAsync
## 本地视频文件直播
JzLocalPublisherAsync 
点击预览的视频可以暂停播放，必须添加循环属性，手动开启声音才能有音频。
### hls
+ 使用hls.js
### mp4
浏览器默认
### webm
浏览器默认
## 录制 
JzRecorder
+ 本地录制 JzSaveLocalVideo
+ rtmp录制推流 JzRtmpPusherAsync
## 截图
JzScreenshot
## 回放
+ hls回放 JzHlsReplay
## 本地混流
JzMultiStreamsMixer
## AI语义分割（背景消除）
JzDeeplab
## 番外
+ webrtc回调事件 JzRtcEvent
+ rtsp转rtmp推流 JzRtsp2Rtmp
+ 修复本地视频时间戳 JzChange(ffmpeg) JzVideoUtils(getSeekableBlob)
+ 音量大小检测，并绘制图标 JzAudioVumeter
## 推荐码率
````
视频 Profile	分辨率（宽 × 高）	帧率（fps）	码率（kbps）
120p	160 × 120	15	200
180p	320 × 180	15	350
240p	320 × 240	15	400
360p	640 × 360	15	800
480p	640 × 480	15	900
720p	1280 × 720	15	1500
1080p	1920 × 1080	15	2000
1440p	2560 × 1440	30	4860
4K	3840 × 2160	30	9000
````
## webrtc支持的平台
https://cloud.tencent.com/document/product/647/17249

# 版本
node 16

# 安装
````
yarn add @gdty/jzpush-npm-sdk
````

# 使用
+ electron高版本渲染线程（vue页面）需要使用 window.require，部分只支持electron，已分离library中类可以兼容浏览器端和electron
````
const {JzRtcPublisherAsync,JzRtcPlayerAsync} = window.require('jzpush-npm-sdk')
````

# 下一步
+ 1、需要打包编译min文件（完成）
+ 2、兼容rtsp拉网络摄像头推流延迟1秒（完成）
+ 3、屏幕共享（完成）
+ 4、摄像头，权限等设备检测功能（完成）
+ 5、hls播放器集成（已改为浏览器端的集成）
+ 6、本地视频播放器（已改为浏览器端的集成）
+ 7、修复本地视频没有时长和不能点击进度条的问题，具体文档https://cloud.tencent.com/developer/article/1884082
+ 8、网络测速（已改为浏览器端的集成）
+ 9、麦克风声音音量大小检测，并绘制图标（完成） 相关文档 https://gitee.com/timfengzi/Recorder
+ 10、视频截图功能，用于后续的AI识别（完成）
+ 11、hls按时间端播放，解析m3u8的文件（完成）
+ 12、通话中可以禁用或开启音频视频（完成）
+ 13、本地混流（待完成）相关文档 https://gitee.com/timfengzi/MultiStreamsMixer
+ 14、获取对等端公网IP（完成）
+ 15、支持h265（待完成）
+ 16、视频文件推流（完成）
+ 17、虚拟直播间AI识别（待完成）
+ 18、点播播放器加上css（待完成）
+ 19、使用onvif搜索摄像头并观看（完成）
+ 20、hls暂不支持h265，等hls.js1.6.0版本，流媒体修改为追加m3u8文件索引，不需要结束后才可以直播回放。（完成）
+ 21、flv使用jessibuca播放器支持h265。(没有加入sdk，见demo)
+ ![Image text](./images/spnf.gif)
+ 等等

# 存在的bug
+ 1、本地录像偶然会抛出EBUSY: resource busy or locked, open的错误，但貌似不影响。
+ 2、SRS连接时无法回调是否有视频流通道，一直返回已连接（只能在业务逻辑处理，SRS回调有播放失败时断开客户端）

# 二、腾讯云相关
## 1、直播webrtc，和rtmp
+ 日结费用：webrtc:0.52元/GB/天;rtmp:0.26元/GB/天
+ 具体计费文档
+ 直播rtmp：https://cloud.tencent.com/document/product/267/34175
+ 直播webrtc：https://cloud.tencent.com/document/product/267/39136

## 2、直播录制
+ 使用录制功能会产生费用，以当月直播录制并发峰值路数为结算标准。当月录制并发路数峰值：当月内每5分钟统计的所有录制直播路数的最大值。一种录制格式计为一路录制流。
+ 录制路数峰值	30（元/路/月）
+ 计费说明
+ 计费项：直播录制路数。
+ 计费方式：后付费计费。
+ 计费周期：按月计费，每月1日 - 5日出上一个自然月的账单并扣除费用，详细以计费账单为准。
+ 配置多个域名可以节约成本，面试系统和笔试系统域名分开，把域名按峰值分级别：100人用100峰值的域名，200人用200峰值的域名。。。该场考试人数最多多少人就用哪个域名。
+ 也可以把域名分配每天一个域名
+ 具体计费文档https://cloud.tencent.com/document/product/267/52708

## 3、点播存储
+ 存储日结费用：0.0048元/GB/日
+ 播放日结费用：0.24元/GB（按流量）
+ 视频播放->直播时移->直播剪辑(按时间段，面试未结束：开始时间到当前时间，面试已结束：开始时间到结束时间)
+ 具体计费文档https://cloud.tencent.com/document/product/266/14666#.E8.AE.A1.E8.B4.B9.E4.BB.B7.E6.A0.BC8

## 4、直播时移
+ 时移总时长（单位：分钟×天）为时移文件时长（单位：分钟）与时移配置天数（单位：天）的乘积值。
+ 时移文件时长：开通时移功能的直播录制文件时长（单位：分钟）。
+ 时移配置天数：配置的时移可回看的天数（单位：天，取值：1天-30天）。
+ 计费类型	价格（元/（分钟×天）/日）
+ 时移总时长费用单价	0.0002
+ 具体计费文档 https://cloud.tencent.com/document/product/267/73074

## 5、cos存储
+ 企业用户存储月结费用：0.03元/GB/月
+ 企业用户请求月结费用：0.01元/万次
+ 外网下行流量费用：0.5元/GB
+ 目前只用于截图和考生本地视频
+ 具体计费文档https://cloud.tencent.com/document/product/436/53863#.E8.AE.A1.E8.B4.B9.E6.A1.88.E4.BE.8B

## 6、直播转码
+ 计费项	计费方式	价格
+ 音频转码	按音频转码时长计费	0.0056元/分钟
+ 由于快直播使用的是 WebRTC 协议的低延迟特性，默认不支持 B 帧且音频编解码方式为 opus 编解码。为了保证快直播流可播放，当推流时带 B 帧或音频编码非 opus 编码时，云直播后台会自动发起转码去 B 帧并转码为 opus 编码，从而产生 标准转码费用
+ 1、webrtc推流，webrtc拉流，不产生转码费用 opus->opus
+ 2、webrtc推流，hls播放，产生转码费用 opus->aac
+ 3、webrtc推流，录制hls视频，录制原始流不产生录制费用（没音频），录制水印流产生录制费用 转码费用 opus->aac
+ 4、webrtc推流，不播放，不产生转码费用 opus
+ 5、rtmp推流，webrtc拉流，产生转码费用 aac->opus
+ 6、rtmp推流，录制hls视频，不产生转码费用，产生录制费用 aac->aac

# 三、阿里云相关
## 1、需要在控制台推拉流域名配置跨域
## 2、直播webrtc，和rtmp
+ 费用：计费项：直播流量 0.528/GB
1. 付费方式：后付费
2. 计费规则：按您直播观看区域使用的流量阶梯价格计费，当月分别超额累进（以自然月为一个累计周期）。
3. 计费周期：按小时计费，实时扣费。
4. 计费方向：默认只收取下行播放费用，针对上下行不均衡业务（开通了推流并发扩容，且上行推流：下行播放>1:50）需要收取上行推流费用，上行计费挂牌价与下行单价一致。
+ 具体计费文档
+ 直播rtmp：https://www.aliyun.com/price/product?spm=a2c4g.11186623.0.0.dbf55b23Fx8JoN#/live/detail/live
+ 直播webrtc：https://www.aliyun.com/price/product?spm=a2c4g.11186623.0.0.dbf55b23Fx8JoN#/live/detail/live

## 2、直播录制
+ 月录制服务费	30 元/路/月
+ 计费项：月录制服务费
1. 付费方式：后付费
2. 计费规则：按照每月并发录制峰值路数收费。统计每日录制并发路数并取当月峰值计费，国内和海外统一价格。时移的路数不会被包含在录制路数中重复收费。
3. 计费周期：按月计费（每月第一日零点后出前一月账单并扣费，具体出账时间以系统为准）。

## 3、直播时移
+ 按日计费 1.08元/GB
+ 直播时移写入量，单位GB
1. 付费方式：后付费
2. 计费说明：按每日时移回看写入的直播内容大小和可时移天数不同档位（支持时移1天、3天、7天、15天和30天）对应单价收费。 播放时移内容产生的下行带宽、流量费用按视频直播CDN下行播放带宽、流量进行收费。保存不同天数档位使用的存储不在额外计费。
3. 计费周期：按日计费，实时扣费（每日零点后出前一日账单并扣费，具体出账时间以系统为准）。

## 4、oss存储
+ 存储
数据存储（本地冗余存储）	0.12元/GB/月
数据存储（同城冗余存储）	0.15元/GB/月
+ 流量 
内/外网流入流量（数据上传到OSS）	免费
内网流出流量（通过同地域ECS使用内网Endpoint，下载OSS的数据）	免费
外网流出流量	00:00-08:00（闲时）：0.25元/GB 8:00-24:00（忙时）：0.50元/GB
+请求费用	
PUT类型请求	0.01元/万次
GET类型请求	0.01元/万次

## 5、直播转码
+ 待确定

# 四、火山引擎相关
白皮书 https://www.volcengine.com/docs/6469/102065

# SRS docker搭建
````
docker pull ossrs/srs:latest
docker run --rm --env CANDIDATE=$CANDIDATE \
  -p 1935:1935 -p 8080:8080 -p 1985:1985 -p 8000:8000/udp \
  ossrs/srs:latest \
  ./objs/srs -c conf/rtc.conf
````

# SRS linux搭建
## 1、下载源码，推荐用CentOS7系统：
````
git clone -b 4.0release https://gitee.com/ossrs/srs.git
````

## 2、编译，注意需要切换到srs/trunk目录：
````
cd srs/trunk
./configure
make
````

## 3、配置
具体配置可以在conf/文件夹下面查看
CANDIDATE https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidate

## 4、启动服务器：
````
env CANDIDATE="192.168.1.30" \
./objs/srs -c conf/rtc.conf
````
检查SRS是否成功启动，可以打开 http://localhost:8080/ ，或者执行命令：

## 5、查看SRS的状态
````
./etc/init.d/srs status
````

## 6、关闭
````
kill -9 进程pid
````

## 7、或者看SRS的日志
````
tail -n 30 -f ./objs/srs.log
````
例如，下面的命令显示SRS正在运行：

MB0:trunk $ ./etc/init.d/srs status
SRS(pid 90408) is running.                                 [  OK  ]

MB0:trunk $ tail -n 30 -f ./objs/srs.log
[2021-08-13 10:30:36.634][Trace][90408][12c97232] Hybrid cpu=0.00%,0MB, cid=1,1, timer=61,0,0, clock=0,22,25,0,0,0,0,1,0

# 推流负载测试
## 1、RTMP
````
git clone https://github.com/ossrs/srs-bench.git
cd srs-bench && ./configure && make
./objs/sb_rtmp_publish -h 用法
./objs/sb_rtmp_publish -i doc/source.200kbps.768x320.flv -c 100 -r rtmp://192.168.1.30/live/test{i}
````

## 2、WEBRTC
该测试工具只限于SRS WEBRTC
````
git clone https://github.com/ossrs/srs-bench.git && git checkout feature/rtc && make
./objs/srs_bench -h 用法
./objs/srs_bench -pr webrtc://192.168.1.30/live/livestream_%d -sn 100 -sa ./avatar.ogg -sv ./avatar.h264 -fps 25
````

# 常见问题
## 直播时移出现时长不足的原因：
+ 1、腾讯云直播时移，录制和剪辑都分别保存了分片文件
+ 2、直播时移gop是3秒，录制的gop也是3秒，一个ts文件是6秒，所以在不丢帧的情况下就有6秒（正负3秒）的误差。
+ 3、加一秒后时移就正常是因为有可能是刚好关键帧落地。
+ 4、由于直播丢帧，落地文件的时长差距应该是比较大的。
+ 5、丢帧与快直播还是标准直播没有关系，一般是 网络抖动、上行带宽不足、推流设备采集异常，推流设备编码异常、推流设备性能瓶颈等。
+ 6、是否丢帧可以看帧率图，如果下降太多就说明丢帧严重。
+ 7、当推流断线几分钟后，视频续录会没了这几分钟的时间
+ 关于GOP和帧率、码率的关系：https://zhuanlan.zhihu.com/p/259870429

## WebRTC simulcast（暂不支持）
+ Simulcast stream: 一组同时传输的媒体编码流和可选的依赖的媒体流其中中的一个媒体流，它们都共享一个共同的媒体源 (media source，例如一个摄像头) ，如 RFC7656 中所定义。
+ 例如，单个媒体源的高清图像和缩略图像的视频流由联播各自作为单独的 RTP 流同时发送。
+ Simulcast format: simulcast stream 的不同格式与非 simulcast stream 的 SDP 中的替代 RTP 有效payload 类型具有相同的目的：允许指定 RTP 流中使用多种不同的可替代的媒体格式。
+ ![Image text](./images/2e593e973d3612fe226a7322cbeee41b.png)
+ https://blog.csdn.net/fanyamin/article/details/125480071

## windows电脑关于绿幕问题的设置
+ 1.如果开启硬件加速会出现这样的绿幕情况，需要关闭浏览器内设置的硬件加速选项。
+ 2.需要在winodw设置内图形设置下设置GoogleChrome为高性能模式：
  参考下方视频添加谷歌浏览器到图形性能首选项的列表，并且设置为高性能模式。

---
_Source: https://npm.io/package/@gdty/jzpush-npm-sdk · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
