LocalVideoTrack

最近更新时间:2023-11-06 02:37:12

LocalVideoTrack 为本地视频轨道的基础类,提供了本地视频轨道的主要功能。

你可以通过 ArRTC.createCustomVideoTrack 或者 ArRTC.createScreenVideoTrack 来获取 LocalVideoTrack

通过摄像头采集到的本地视频轨道对象 CameraVideoTrack 关系于此接口,并在本接口的基础上提供了一些摄像头独有的功能。

继承

属性

trackMediaType

trackMediaType: "audio" | *"video"

媒体轨道的类型:

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

方法

close

close(): void

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

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

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

track.on("track-ended", () => {
    // 建议本地发布之后 设置一个变量做为本地有无发布的判断条件,在取消发布前做一下判断,
    // 并且在取消判断后对该值进行取反操作方便下次做判断;
    client.unpublish(track);
});

返回值 void


getCurrentFrameData

getCurrentFrameData(event: string): ImageData

获取当前渲染的视频帧数据。

只有在播放后才能调用此方法,如果没有调用 play 则返回空数据。

返回值 ImageData

存储了 RGBA 数据的 ImageData 对象。该对象为浏览器原生对象,详见 ImageData

示例

const frameData = videoTrack.getCurrentFrameData();
// 创建canvas
const canvas = document.createElement("canvas");
canvas.width = frameData.width;
canvas.height = frameData.height;
const ctx = canvas.getContext('2d');
// 将截图显示在canvas上面
ctx.putImageData(frameData, 0,0);
// 获取 dataUrl 作为图片的 src 属性
const dataUrl = canvas.toDataURL();
// 自动保存图片
const a = document.createElement("a"); // 生成一个a元素
const event = new MouseEvent("click"); // 创建一个单击事件
a.download = "photo"; // 设置图片名称
a.href = dataUrl; // 将生成的URL设置为a.href属性
a.dispatchEvent(event); // 触发a的单击事件

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时应执行取消发布操作。

track.on("track-ended", () => {
    // 建议本地发布之后 设置一个变量做为本地有无发布的判断条件,在取消发布前做一下判断,
    // 并且在取消判断后对该值进行取反操作方便下次做判断;
    client.unpublish(track);
});

参数

返回值 void


once

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

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

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

参数

  • event: string

    指定事件的名称。

  • listener: Function

    传入的回调函数。

返回值 void


play

play(element: string | HTMLElement, config?: VideoPlayerConfig): void

在页面上播放本地视频轨道。

微信浏览器禁止视频自动播放,因此需要添加一个按钮点击来调用该方法。否则无法正常播放视频,用户页面上看到的图像将会是黑色的。

参数

  • element: string | HTMLElement

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

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

    设置播放参数(镜像/显示模式)。详见 VideoPlayerConfig。对于本地视频轨道,镜像模式默认开启。

返回值 void


removeAllListeners

removeAllListeners(event?: undefined | string): void

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

参数

  • Optional event: undefined | string

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

返回值 void


setEnabled

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

启用/禁用该轨道。

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

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

参数

  • enabled: boolean

    是否启用该轨道:

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

返回值 Promise<void>


setMuted

  • setMuted(muted: boolean): Promise<void>

发送或暂停发送该轨道的媒体数据。

如果该轨道已发布,调用 setMuted(true) 后,远端会触发 user-unpublished 事件。再调用 setMuted(false) 后,远端会触发 user-published 事件。

参数

  • muted: boolean

    是否发送该轨道的媒体数据:

    • true: 暂停发送该轨道的媒体数据。
    • false: 恢复发送该轨道的媒体数据。

返回值 Promise<void>


stop

  • stop(): void

停止播放。

返回值 void