LocalTrack

最近更新时间:2022-09-20 05:17:40

LocalTrack 为本地轨道的基础类,为音频轨道 LocalAudioTrack 和视频轨道 LocalVideoTrack 提供一些公共的方法。

import ArRTC from "ar-rtc-sdk";

var audioTrack = null; // 本地存放音频轨道
var videoTrack = null; // 本地存放视频轨道

/**
 * 采集音视频
 */
async function () {
  [audioTrack, videoTrack] = await ArRTC.createMicrophoneAndCameraTracks();
}()

继承

事件回调

track-ended

track-ended(): void

注意
如果释放的轨道处于发布状态时,收到track-ended时应执行取消发布操作。

audioTrack.on("track-ended", () => {
  rtcClient.unpublish(audioTrack);
});
videoTrack.on("track-ended", () => {
  rtcClient.unpublish(videoTrack);
});

音频或视频轨道被终止,终止的原因可能是:

  • 摄像头被拔出
  • 麦克风被拔出
  • 用户主动停止了屏幕共享
  • 该轨道被主动关闭
  • 媒体设备故障

返回值 void

属性

isPlaying

isPlaying: boolean

媒体轨道是否正在页面上播放。

console.log("音频是否正在页面上播放", audioTrack.isPlaying)
console.log("视频是否正在页面上播放", videoTrack.isPlaying)
  • true: 媒体轨道正在页面上播放。
  • false: 媒体轨道没有在页面上播放。

trackMediaType

trackMediaType: "audio" | "video"

媒体轨道的类型:

  • "audio": 音频轨道。
  • "video": 视频轨道。

方法

close

close(): void

关闭本地轨道,并释放相关采集设备。

一旦本地轨道被关闭,就无法再次使用。如需再次使用本地轨道,需要重新创建。

注意
如果释放的轨道处于发布状态时,收到track-ended时应执行取消发布操作。

audioTrack.on("track-ended", () => {
  rtcClient.unpublish(audioTrack);
});
videoTrack.on("track-ended", () => {
  rtcClient.unpublish(videoTrack);
});

audioTrack && audioTrack.close(); // 释放音频设备
videoTrack && videoTrack.close(); // 释放视频设备

返回值 void


getListeners

getListeners(event: string): Function[]

指定一个事件名,获取当前所有监听这个事件的回调函数。

参数

  • event: string

    事件名称。

返回值 Function[]


getMediaStreamTrack

getMediaStreamTrack(): MediaStreamTrack

获取浏览器原生的 MediaStreamTrack 对象。

返回值 MediaStreamTrack

一个 MediaStreamTrack 对象。


getTrackId

getTrackId(): string

获取由 SDK 生成的对于媒体轨道来说的唯一 ID。

返回值 string

媒体轨道 ID。


getTrackLabel

getTrackLabel(): string

获取本地轨道的来源描述。

返回值 string

可能返回以下值:

  • 如果是通过 createMicrophoneAudioTrackcreateCameraVideoTrack 创建的轨道,返回 MediaDeviceInfo.label 字段。
  • 如果是通过 createScreenVideoTrack 创建的轨道,返回屏幕共享的 sourceId
  • 如果是 createCustomAudioTrackcreateCustomVideoTrack 创建的轨道,返回 MediaStreamTrack.label 字段。

off

off(event: string, listener: Function): void

取消一个指定事件的监听。

参数

  • event: string

    指定事件的名称。

  • listener: Function

    监听事件时传入的回调函数。

返回值 void


on

on(event: "track-ended", listener: event_track_ended): void

注意
如果释放的轨道处于发布状态时,收到track-ended时应执行取消发布操作。

audioTrack.on("track-ended", () => {
  rtcClient.unpublish(audioTrack);
});

参数

返回值 void


once

once(event: string, listener: Function): void

监听一个指定的事件,当事件触发时会调用传入的回调函数。

当监听后事件第一次触发时,该监听和回调函数就会被立刻移除,也就是只监听一次指定事件。

参数

  • event: string

    指定事件的名称。

  • listener: Function

    传入的回调函数。

返回值 void


play

play(element?: string | HTMLElement): void

在页面上播放媒体轨道。

// 在页面上播放视频
videoTrack.play("xxx");
// 在页面上播放音频
audioTrack.play();

参数

  • Optional element: string | HTMLElement

    指定一个 DOM 元素,SDK 将在这个元素下创建 <video> 元素播放视频轨道,支持 2 种类型:

    • string: 指定该 DOM 元素的 ID 值。
    • HTMLElement: 直接传入一个 DOM 元素对象。

返回值 void


removeAllListeners

removeAllListeners(event?: undefined | string): void

指定一个事件,取消其所有的监听。

参数

  • Optional event: undefined | string

    指定事件的名称,如果没有指定事件,则取消所有事件的所有监听。

返回值 void


setEnabled

  • setEnabled(enabled: boolean): Promise<void>

启用/禁用该轨道。

轨道禁用后,播放和发布都将被停止。

禁用轨道不会触发 LocalTrack.on("track-ended") 事件。

// 禁用视频
videoTrack.setEnabled(false);
// 禁用音频
audioTrack.setEnabled(false);

参数

  • enabled: boolean

    是否启用该轨道:

    • true: 启用该轨道.
    • false: 禁用该轨道.

返回值 Promise<void>


stop

stop(): void

停止播放。

// 停止播放视频
videoTrack.stop();
// 停止播放音频
audioTrack.stop();

返回值 void