1.38.0 • Published 18 days ago

hy-rtc-core v1.38.0

Weekly downloads
-
License
ISC
Repository
-
Last release
18 days ago

hy-rtc-core 核心模块

负责功能

  • 连接MQTT服务
  • 加入房间
  • 退出房间
  • 发送指令
  • 初始化时设置摄像头、麦克风
  • 进入房间切换摄像头
  • 获取媒体流的基础信息(网速、编解码格式...)
  • 浏览器支持情况检查
  • MQTT断线、异常处理
  • 暂停|恢复推流
  • 设置生产视频码率、分辨率、帧率
  • 设置生产音频采样率、码率
  • 浏览器直播录制
  • 获取房间内成员列表

调用代码示例

https://gitee.com/szhuayu/test-core-sdk.git

更新内容

【1.25.0】20230824 新增 - replaceAudioStream 用于替换音频流 新增 checkDeviceStatus 方法

【1.18.0】20230206

新增 - getRoomRecvStatus 获取媒体房间内,接收情况状态。

【1.17.0】20220524 修复 - 开启多个设备时云台控制无法使用的BUG。

【1.16.0】20220302 新增 printSendTransportStats、printRecvTransportStats、printAudioProducerStats、printVideoProducerStats、printConsumerStats

【1.15.0】20220113 新增 - consumerResumed、consumerPaused事件新增kind字段,用于告知被暂停的是什么类型。

新增 - audioProducerCreated、videoProducerCreated 事件新增track字段,返回的是可以播放的轨道,可用于本地播放使用。

新增 - join方法中可传入localPlayElement,produce创建完成后,会在该元素中进行本地播放。

新增 - replaceVideoTrack方法新增facingMode字段,传入user(前置摄像头)、environment(后置摄像头)。

【1.14.0】20220110 新增 - canPlay 新增videoPushing、audioPushing字段。

【1.13.1】20220106 新增 - consumerPaused、consumerResumed事件,新增clientId、audioPush、videoPush参数。

【1.13.0】20220106 新增 - videoConsumerPaused、videoConsumerResume方法,用于暂停、恢复视频画面。

新增 - consumerPaused、consumerResumed事件。

【1.12.0】20211220 新增 - join方法中新增appData自定义字段。

【1.11.0】20211217 优化 - produce中开启zeroRtpOnPause参数,在暂停时不发送rtp数据。

【1.10.0】20211214 新增 - audioProducerCreated、videoProducerCreated 音频视频producer创建时的事件。

【1.9.1】20211208 优化 - 注释rtc对象中的 consumerPaused consumerResume 方法 修复 - 暴露consumerPaused consumerResume 方法

【1.9.0】20211208 优化 - 注释rtc对象中的 consumerPaused consumerResume 方法 修复 - 没有打开麦克风的BUG

【1.8.1】20211110

  • 新增 newClients事件

【1.7.0】20211109

  • 优化 GB28181拉起画面时,canPlay的逻辑处理。
  • 新增 disconnect方法,主动断开MQ连接

【1.6.0】20211102

  • 修复 多个直播时exitRoom方法异常

【1.5.3】20211013

  • 修复 修改云台控制指令调用方式

【1.5.2】20211012

  • 优化 修改云台控制指令 control

【1.5.1】20211012

  • 新增云台控制 notificationDeviceControl

【1.3.1】20210917

  • 修复 - audioProducerBroken 事件触发流程

【1.3.0】20210917

  • 新增 - audioConsumerPaused、audioConsumerResume 方法
  • 新增 - audioProducerBroken、audioProducerPaused、audioProducerResumed 事件通知

【1.2.2】20210915

  • 修复 - 修复 exitRoom方法

【1.2.0】20210831

  • 修复 - 新加入设备时,上一个流会断开的BUG。
  • 新增 - canPlay事件新增roomId、appData字段。
  • 新增 - newClient事件新增roomId、appData字段。
  • 新增 - clientClosed事件新增roomId、appData字段。
  • 新增 - roomClosed事件
  • 新增 - 新增更换音频方法replaceAudioTrack
  • 修改 - 退出房间调用文档

接入流程

// npm 依赖包安装
yarn add hy-rtc-core --save

// 在需要使用的页面引入
import { HyRtcCore } from 'hy-rtc-core'

// 初始化
this.rtc = new HyRtcCore({
    useSSL: true,
    host: 'hy-rtc-mqtt-server.huayu-soft.com',
    port: 443,
    path: '/ws',
    clientId: this.clientId,
    username: this.clientId,
    password: '123456',
    appId: '8d48d600a930f2c3acea7b5bc697a7a9',
    appKey: '368480924a6c78e2e8681551a7cf4c21'
  })

// 事件监听
this.rtc.eventEmit('事件名称', () => {})

// 发起连接
this.rtc.connect()

// 主动断开连接
this.rtc.disconnect()

SDK 操作

/**
* 加入房间
* 返回Room对象
* */
  this.room = await this.rtc.join({
    roomId: 'r001',
    videoPush: true,
    audioPush: true,
    tag: 'a',
    consumeTags: ['a']
  })
  
/**
 * 退出房间
 * */
exitRoom () {
  this.room.exitRoom()
}

/**
 * notificationDeviceControl
 * @param params
 *
 左上:PTZ_LEFT_UP
 上:PTZ_UP
 右上:PTZ_RIGHT_UP
 左:PTZ_LEFT
 右:PTZ_RIGHT
 左下:PTZ_LEFT_DOWN
 下:PTZ_DOWN
 右下:PTZ_RIGHT_DOWN
 放大:PTZ_ZOOM_IN
 缩小:PTZ_ZOOM_OUT
 停止PTZ指令:PTZ_STOP(停止操作无需speed参数)
 聚焦-近:FI_FOCUS_NEAR
 聚焦-远:FI_FOCUS_FAR
 光圈-缩小:FI_IRIS_ZOOM_OUT
 光圈-放大:FI_IRIS_ZOOM_IN
 停止FI指令:FI_STOP(停止操作无需speed参数)
 * speed
 *  速度,整型;取值范围:1~8
 */
notificationDeviceControl (params) {
    this.room.notificationDeviceControl({
        command: 'PTZ_LEFT',
        clientId: '123456789',
        speed: 4
    })
}
  
/**
 * 获取运行环境信息
 */
async checkDeviceSupport () {
  const envInfo = await this.rtc.checkDeviceSupport()
  console.log('envInfo', envInfo)
}

/**
 * 获取本机媒体设备列表
 * kind类型: 视频输入 videoinput 音频输入 audioinput
 */
async getMediaDevices () {
  console.log(await this.rtc.getMediaDevices('videoinput'))
}

/*
* 设置生产时的视频输入源(可选)
* 使用getMediaDevices方法获取本机媒体设备后传入
* 此方法在joinRoom前调用
**/
this.rtc.setVideoInput(inputVideo)

/*
* 设置生产时的视频输入源(可选)
* 使用getMediaDevices方法获取本机媒体设备后传入
* 此方法在joinRoom前调用
**/
this.rtc.setAudioInput(inputAudio)

/*
* 在生产时更换视频输入源(可选)
* 使用getMediaDevices方法获取本机媒体设备后传入
* 此方法在joinRoom后调用
**/
this.rtc.replaceVideoTrack(inputVideo, facingMode)

/**
 * 在生产时更换音频输入源(可选)
 * 使用getMediaDevices方法获取本机媒体设备后传入
 * 此方法在joinRoom后调用
 */
this.rtc.replaceAudioTrack(inputAudio)

/**
 * 获取音频话语权
 * 半双工模式时,恢复麦克风时的操作
 */
this.rtc.audioConsumerResume().then(() => {
  console.log('获取话语权成功')
}).catch(err => {
  console.log('err', err)
})

/**
 * 释放音频话语权
 * 半双工模式时,关闭麦克风时的操作
 */
this.rtc.audioConsumerPaused().then(() => {
  console.log('释放话语权成功')
}).catch(err => {
  console.log('err', err)
})

/**
 * 获取视频话语权
 * 半双工模式时,恢复摄像头时的操作
 */
this.rtc.videoConsumerResume().then(() => {
  console.log('获取话语权成功')
}).catch(err => {
  console.log('err', err)
})

/**
 * 释放视频话语权
 * 半双工模式时,关闭摄像头时的操作
 */
this.rtc.videoConsumerPaused().then(() => {
  console.log('释放话语权成功')
}).catch(err => {
  console.log('err', err)
})

/**
* 获取当前房间内的参数信息
* 返回当前房间内所有的接收情况
* 接口返回设备列表数组,里面有带appData对象,可自由根据业务情况进行展示
* 显示的参数有很多,根据实际情况作为展示。
*/

this.room.getRoomRecvStatus().then((res) => {
    
})

事件

【连接成功】open

this.rtc.mediaClient('open', () => {})

canPlay事件处理逻辑

/**
 * 设备可进行播放时触发,sdk内部会判断是否音视频流都准备完毕,准备完毕时触发该事件
 * 需要开发者自行放入元素中进行播放
 * @param remoteClient 远端设备对象
 * id 对方ID
 * consumers 消费对象
 * videoPush 具有视频流
 * audioPush 具有音频流
 * roomId 房间ID
 * consumer 最新的一条流,只有GB28181类型时会返回
 */
this.rtc.eventEmit.on('canPlay', (remoteClient) => {
    // 设备可进行播放时触发,sdk内部会判断是否音视频流都准备完毕,准备完毕时触发该事件
    const { id, consumers, roomId } = remoteClient
    const stream = new MediaStream()
    const videoEle = document.querySelector(`#monitor-video-${id}`)
    videoEle.srcObject = stream
    consumers.forEach(consumer => {
      stream.addTrack(consumer.track)
    })
    videoEle.play()
})

clientClosed事件处理逻辑

/**
* 设备退出房间时的事件
* @param clientId 设备ID
* 收到该事件时,需将原有的播放器移除
*/
this.rtc.eventEmit.on('clientClosed', ({ clientId, roomId }) => {
  const videoEle = document.querySelector(`#monitor-video-${clientId}`)
  videoEle.remove()
})

newClient 事件处理逻辑

/**
* 有新用户加入时的事件
* @param clientId 设备ID
* 收到该事件时,需将先创建播放器
*/
this.rtc.eventEmit.on('newClient', ({ clientId, roomId }) => {
  // 创建video标签
  const container = document.getElementById('remote-video-container')
  const videoElement = document.createElement('video')
  videoElement.setAttribute('controls', 'true')
  videoElement.id = `monitor-video-${clientId}`
  videoElement.className = 'play-element'
  container.append(videoElement)
})

newClients 事件处理逻辑

/*
* 返回已存在在房间中的设备,SDK内已将数组遍历后,使用newClient事件进行返回
*/
this.rtc.eventEmit.on('newClients', clients => {})

roomClosed 事件处理逻辑

/**
* 有房间关闭事件
* @param roomId 房间ID
*/
this.rtc.eventEmit.on('newClient', ({ roomId }) => {
  console.log('roomId', roomId)
})

audioProducerBroke 事件处理逻辑

/**
* 音频话语权被抢断
* @param id 音频ProduceId
*/
this.rtc.eventEmit.on('audioProducerBroken', () => {
  console.log('audioProducerBroken')
})

audioProducerResumed 事件处理逻辑

/**
* 获取音频话语权事件
* @param id 音频ProduceId
*/
this.rtc.eventEmit.on('audioProducerResumed', () => {
  console.log('audioProducerResumed')
})

audioProducerPaused 事件处理逻辑

/**
* 暂停音频话语权事件
* @param id 音频ProduceId
*/
this.rtc.eventEmit.on('audioProducerPaused', () => {
  console.log('audioProducerPaused')
})

consumerPaused 事件处理逻辑

/**
* 暂停话语权事件
kind 被暂停的类型
*/
this.rtc.eventEmit.on('consumerPaused', ({clientId,audioPush,videoPush,kind}) => {
  console.log('consumerPaused')
})

consumerResumed 事件处理逻辑

/**
* 暂停话语权事件
kind 被暂停的类型
*/
this.rtc.eventEmit.on('consumerResumed', ({clientId,audioPush,videoPush,kind}) => {
  console.log('consumerResumed')
})

audioProducerCreated 事件处理逻辑

/**
* 音频生产者创建完成
*/
this.rtc.eventEmit.on('audioProducerCreated', ({roomId,track}) => {
  console.log('audioProducerCreated')
})

videoProducerCreated 事件处理逻辑

/**
 * 视频生产者创建完成
 */
this.rtc.eventEmit.on('videoProducerCreated', ({roomId,track}) => {
  console.log('videoProducerCreated')
})
1.38.0

18 days ago

1.37.0

24 days ago

1.37.1

24 days ago

1.37.2

24 days ago

1.36.0

4 months ago

1.35.1

4 months ago

1.34.1

4 months ago

1.32.0

5 months ago

1.32.1

5 months ago

1.31.0

5 months ago

1.30.0

5 months ago

1.29.1

6 months ago

1.29.0

7 months ago

1.27.0

7 months ago

1.26.0

7 months ago

1.28.0

7 months ago

1.25.0

8 months ago

1.21.0

11 months ago

1.23.0

10 months ago

1.22.0

11 months ago

1.20.0

12 months ago

1.24.0

10 months ago

1.19.0

12 months ago

1.18.0

1 year ago

1.17.1

1 year ago

1.17.0

2 years ago

1.16.1

2 years ago

1.16.0

2 years ago

1.15.2

2 years ago

1.15.1

2 years ago

1.14.0

2 years ago

1.12.1

2 years ago

1.12.0

2 years ago

1.8.2

2 years ago

1.11.0

2 years ago

1.15.0

2 years ago

1.13.1

2 years ago

1.13.0

2 years ago

1.9.1

2 years ago

1.9.0

2 years ago

1.8.9

2 years ago

1.8.10

2 years ago

1.8.8

2 years ago

1.8.7

2 years ago

1.8.6

2 years ago

1.8.5

2 years ago

1.8.4

2 years ago

1.8.3

2 years ago

1.10.1

2 years ago

1.10.0

2 years ago

1.8.1

2 years ago

1.8.0

2 years ago

1.7.0

2 years ago

1.6.0

3 years ago

1.5.4

3 years ago

1.5.3

3 years ago

1.5.2

3 years ago

1.5.1

3 years ago

1.4.0

3 years ago

1.3.2

3 years ago

1.3.1

3 years ago

1.3.0

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.25

3 years ago

1.0.24

3 years ago

1.0.19

3 years ago

1.0.18

3 years ago

1.0.17

3 years ago

1.0.16

3 years ago

1.0.22

3 years ago

1.0.21

3 years ago

1.0.23

3 years ago

1.0.15

3 years ago

1.0.14

3 years ago

1.0.13

3 years ago

1.0.12

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago