Options
All
  • Public
  • Public/Protected
  • All
Menu

Class LocalStream

本地流,可用于本地预览,也可用 client 进行发布

Hierarchy

Index

Properties

audioMuted

audioMuted: boolean = false

当前流是否 mute 了音频

id

id: string

当前流ID

Readonly isLocal

isLocal: boolean

是否为本地流

Readonly mediaStream

mediaStream: MediaStream

当前流包含的媒体流,关于媒体流,请详见 MediaStream

userId

userId: string

当前流所属用户的ID 注:若创建本地流时指定的 userId 与 join 时指定的 userId 不同,那么发布本条流时,流的 userId 将会自动被自动更新为 join 时指定的 userId

videoMuted

videoMuted: boolean = false

当前流是否 mute 了视频

Methods

addTrack

  • addTrack(track: MediaStreamTrack): void
  • 添加一条媒体轨道(音轨或视轨)到当前流

    注:

    1. 若创建本地流时,audio 为 false,不可添加音轨,video 为 false 时,不可添加视轨
    example
    stream.addTrack(track);
    

    Parameters

    • track: MediaStreamTrack

      媒体轨道

    Returns void

destroy

  • destroy(): void
  • 销毁当前流,一般在本地流不再被使用时,可调用此方法销毁,解除摄像头或麦克风设备的占用。

    example
    stream.destroy();
    

    Returns void

getAudioLevel

  • getAudioLevel(): number
  • 获取当前流的音量大小,只有当本地流或远端流中有音频数据才有效。

    example
    setInterval(() => {
      const level = stream.getAudioLevel();
      if (level > 0) {
        console.log(`user ${stream.userId} is speaking`);
      }
    }, 200);
    

    Returns number

getMediaType

getStats

  • 获取流发布或订阅后的统计数据

    example
    stream
      .getStats()
      .then((stats) => {
        console.log('当前流的统计数据为: ', stats);
      });
    

    Returns Promise<StreamStats>

hasAudio

  • hasAudio(): boolean
  • 判断当前流是否有音频

    example
    const result = stream.hasAudio();
    

    Returns boolean

hasVideo

  • hasVideo(): boolean
  • 判断当前流是否有视频

    example
    const result = stream.hasVideo();
    

    Returns boolean

init

  • init(): Promise<void>
  • 初始化本地流对象,将读取麦克风、摄像头、屏幕共享等来初始化媒体流

    example
    const stream = createStream({audio: true, video: true, screen: false});
    stream
      .init()
      .then(() => {
        client.publish(stream); // 发布本地流
      })
      .catch((err) => {
        console.log(`初始化本地流失败 ${err}`);
      })
    

    Returns Promise<void>

muteAudio

  • muteAudio(): boolean
  • mute 当前流的音频

    • 本地流调用此方法时,将不向服务器推送音频数据,远端用户将收到 mute-audio 的事件通知
    • 远端流调用此方法时,仅为不从服务器拉取音频数据,并无事件通知远端用户
    example
    const result = stream.muteAudio();
    console.log(`stream's audio is muted ${stream.audioMuted}`);
    

    Returns boolean

    操作是否成功

muteVideo

  • muteVideo(): boolean
  • mute 当前流的视频

    • 本地流调用此方法时,将不向服务器推送视频数据,远端用户将收到 mute-video 的事件通知
    • 远端流调用此方法时,仅为不从服务器拉取视频数据,并无事件通知远端用户
    example
    const result = stream.muteVideo();
    console.log(`stream's video is muted ${stream.videoMuted}`);
    

    Returns boolean

    操作是否成功

off

  • off<T>(type: T, listener: Listener<T>): EventEmitter
  • 取消监听流对象事件

    Type parameters

    • T: "error" | "user-joined" | "user-left" | "kick-off" | "stream-added" | "stream-removed" | "stream-subscribed" | "stream-published" | "stream-reconnecting" | "stream-reconnected" | "mute-audio" | "unmute-audio" | "mute-video" | "unmute-video" | "first-key-frame" | "audio-track-ended" | "screen-sharing-stopped" | "connection-state-changed" | "network-quality" | "player-status-change" | "device-changed" | "*"

    Parameters

    • type: T

      流对象事件类型,特别的,当为 '*' 时,取消监听所有事件

    • listener: Listener<T>

      流对象事件监听函数

    Returns EventEmitter

on

  • on<T>(type: T, listener: Listener<T>): EventEmitter
  • 监听流对象事件

    Type parameters

    Parameters

    • type: T

      流事件类型

    • listener: Listener<T>

      流事件监听函数

    Returns EventEmitter

play

  • play(container: string | HTMLElement, opts?: PlayOptions): Promise<void>
  • 播放当前流

    example
    const container = 'xxx'; // 比如 id 为 xxx 的 div 元素
    stream
      .play(container)
      .catch((err) => {
        console.log(`播放失败: ${err}`); // 一般由于浏览器对自动播放的限制导致播放失败
      });
    
    reject

    RtcError

    Parameters

    • container: string | HTMLElement

      播放音视频时,包裹 video 标签所用的容器元素或容器元素的 ID

    • Optional opts: PlayOptions

      其他播放参数,参见PlayOptions

    Returns Promise<void>

removeTrack

  • removeTrack(track: MediaStreamTrack): void
  • 从当前流中删除一条媒体轨道(音轨或视轨)

    example
    stream.removeTrack(track);
    

    Parameters

    • track: MediaStreamTrack

      媒体轨道

    Returns void

replaceTrack

  • replaceTrack(track: MediaStreamTrack): undefined | MediaStreamTrack
  • 替换当前流中的媒体轨道

    注:

    1. 替换视频时,建议使用与原轨道相同的分辨率的媒体轨道,若不相同,请在替换后及时设置流的 profile 来调整到合适的码率等
    2. 返回值为当前流中相同类型的媒体轨道,此媒体轨道仍可用(占用音频设备或视频设备),请自行决定是否调用其 stop 方法释放设备
    3. 若是切换不同的摄像头或麦克风设备,建议使用 switchDevice 方法,若是切换静态图片为视频流,建议使用 switchImage 方法
    example
    const oldTrack = stream.replaceTrack(track);
    oldTrack.stop();
    

    Parameters

    • track: MediaStreamTrack

      新媒体轨道

    Returns undefined | MediaStreamTrack

resume

  • resume(): Promise<void>
  • 恢复播放流,一般由于浏览器限制无法自动播放时,可提示用户手动触发该方法进行恢复播放

    example
    stream
      .resume()
      .catch((err) => {
        console.log(`恢复播放失败:${err}`);
      });
    

    Returns Promise<void>

setAudioLevel

  • setAudioLevel(level: number): void
  • 设置音频能量大小,默认 100

    Parameters

    • level: number

      能量大小,取值范围 [0-300]

    Returns void

setScreenProfile

  • setScreenProfile(profile: "480p" | "720p" | "720p_2" | "1080p" | "1080p_2" | CustomVideoProfile | "480p_2"): void
  • 设置当前流(屏幕共享流)视频的 Profile,默认 '1080p' 注:请务必在调用 init 方法之前,设置屏幕共享流的 Profile,否则无法生效。

    example
    stream.setScreenProfile('720p');
    stream.init().catch((err) => {
      console.log(`初始化屏幕共享流失败 ${err}`);
    });
    

    Parameters

    • profile: "480p" | "720p" | "720p_2" | "1080p" | "1080p_2" | CustomVideoProfile | "480p_2"

      视频 Profile

    Returns void

setVideoProfile

  • setVideoProfile(profile: "180p" | "180p_2" | "240p" | "360p" | "360p_2" | "480p" | "720p" | "720p_2" | "720p_3" | "1080p" | "1080p_2" | "1080p_3" | CustomVideoProfile): Promise<void>
  • 设置当前流视频的 Profile,默认 '360p_2'

    example
    stream
      .setVideoProfile('720p')
      .then(() => {
        console.log('set video profile success');
      })
      .catch((err) => {
        console.log('set video profile failed ', err);
      });
    

    stream
      .setVideoProfile({width: 640, height: 480, framerate: 15, bitrate: 500});
      .then(() => {
        console.log('set video profile success');
      })
      .catch((err) => {
        console.log('set video profile failed ', err);
      });
    

    Parameters

    • profile: "180p" | "180p_2" | "240p" | "360p" | "360p_2" | "480p" | "720p" | "720p_2" | "720p_3" | "1080p" | "1080p_2" | "1080p_3" | CustomVideoProfile

      视频 Profile

    Returns Promise<void>

snapshot

  • 对当前流进行截屏,可用于页面展示或下载保存

    example
    stream.snapshot({filename: 'xxx.jpg'})
      .then((pic) => {
        console.log('截屏图像', pic);
      })
      .catch((err) => {
        console.log('截屏失败', err);
      });
    

    Parameters

    Returns Promise<string>

stop

  • stop(): void
  • 停止播放当前流

    example
    stream.stop();
    

    Returns void

switchDevice

  • switchDevice(type: "audio" | "video", deviceId: string): Promise<void>
  • 切换音视频设备

    example
    stream.switchDevice('audio', 'xxxxxxx')
      .then(() => {
        console.log('切换设备成功');
      })
      .catch((err) => {
        console.log(`切换设备失败:${err}`);
      });
    
    reject

    RtcError

    Parameters

    • type: "audio" | "video"

      设备类型

    • deviceId: string

      设备 ID

    Returns Promise<void>

switchImage

  • switchImage(file: string | File): Promise<void>
  • 切换图片 - 使用图片生成视频,并将当前流的视频使用其代替

    example
    const imgAddr = 'https://a.b.c/d.jpg';
    stream.switchImage(imgAddr)
      .then(() => {
        console.log('切换图片成功')
      })
      .catch((err) => {
        console.error(`切换图片失败:${err}`);
      });
    
    reject

    RtcError

    Parameters

    • file: string | File

      图片地址或图片文件

    Returns Promise<void>

unmuteAudio

  • unmuteAudio(): boolean
  • unmute 当前流的音频

    • 本地流调用此方法时,将向服务器推送音频数据,远端用户将收到 unmute-audio 的事件通知
    • 远端流调用此方法时,会从服务器拉取音频数据,并无事件通知远端用户
    example
    const result = stream.unmuteAudio();
    console.log(`stream's audio is muted ${stream.audioMuted}`);
    

    Returns boolean

    操作是否成功

unmuteVideo

  • unmuteVideo(): boolean
  • unmute 当前流的视频

    • 本地流调用此方法时,将向服务器推送视频数据,远端用户将收到 unmute-video 的事件通知
    • 远端流调用此方法时,会从服务器拉取视频数据,并无事件通知远端用户
    example
    const result = stream.unmuteVideo();
    console.log(`stream's video is muted ${stream.videoMuted}`);
    

    Returns boolean

    操作是否成功

Generated using TypeDoc