Interface ILocalVideoTrack
LocalVideoTrack
为本地视频轨道的基础类,提供了本地视频轨道的主要功能。
你可以通过 AgoraRTC.createCustomVideoTrack 或者 AgoraRTC.createScreenVideoTrack 来获取 LocalVideoTrack
。
通过摄像头采集到的本地视频轨道对象 CameraVideoTrack 继承于此接口,并在本接口的基础上提供了一些摄像头独有的功能。
Events
video-element-visible-status-2
video-element-visible-status-2(data?: CheckVideoVisibleResult): void
自从 4.8.0
提示 HTML <video>
标签的可见状态和不可见原因。SDK 每 30 秒触发一次该事件。
调用 localVideoTrack.play
后 SDK 会创建 HTML <video>
标签用于播放视频轨道。当 localVideoTrack.isPlaying
为 true
却看不到图像时,你可通过此事件来进行问题排查。
参数
参数名 | 类型 | 描述 |
---|---|---|
data |
返回值
void
Properties
enabled
enabled: boolean
本地轨道当前的启用状态。
isPlaying
isPlaying: boolean
媒体轨道是否正在页面上播放。
-
true
: 媒体轨道正在页面上播放。 -
false
: 媒体轨道没有在页面上播放。
muted
muted: boolean
本地媒体轨道当前的静音状态。
processorDestination
processorDestination: IBaseProcessor
自从 4.10.0
本地视频轨道上当前媒体处理链路的最终节点。
trackMediaType
trackMediaType: "audio" | "video"
媒体轨道的类型:
-
"audio"
: 音频轨道。 -
"video"
: 视频轨道。
Methods
close
getCurrentFrameData
getListeners
getMediaStreamTrack
getStats
getStats(): LocalVideoTrackStats
获取本地视频轨道的相关信息。
DEPRECATED自 v4.1.0 起废弃,请使用 AgoraRTCClient.getLocalVideoStats 和 AgoraRTCClient.getLocalAudioStats。
返回值
getTrackId
getTrackLabel
getVideoElementVisibleStatus
getVideoElementVisibleStatus(): CheckVideoVisibleResult | undefined
- 自从 4.8.0
获取 HTML <video>
标签的可见状态和不可见原因。
调用 localVideoTrack.play
后 SDK 会创建 HTML <video>
标签用于播放视频轨道。当 localVideoTrack.isPlaying
为 true
却看不到图像时,你可调用该方法进行问题排查。
返回值
CheckVideoVisibleResult | undefined
off
on
on(event: "track-ended", listener: typeof event_track_ended): void
事件含义详见 event_track_ended。
参数
参数名 | 类型 | 描述 |
---|---|---|
event | "track-ended" | |
listener | typeof event_track_ended |
返回值
void
on(event: "video-element-visible-status", listener: typeof event_video_element_visible_status_2): void
事件含义详见 event_video_element_visible_status。
参数
参数名 | 类型 | 描述 |
---|---|---|
event | "video-element-visible-status" | |
listener | typeof event_video_element_visible_status_2 |
返回值
void
once
pipe
play
play(element: string | HTMLElement, config?: VideoPlayerConfig): void
在页面上播放本地视频轨道。
参数
参数名 | 类型 | 描述 |
---|---|---|
element | string | HTMLElement | 指定一个 DOM 元素,SDK 将在这个元素下创建
|
config | 设置播放参数(镜像/显示模式)。详见 VideoPlayerConfig。对于本地视频轨道,镜像模式默认开启。 |
返回值
void
removeAllListeners
replaceTrack
replaceTrack(track: MediaStreamTrack, stopOldTrack: boolean): Promise<void>
自从 4.17.0
替换本地视频轨道。
该方法在本地视频流发布前或发布后都可以调用:
-
在发流前调用,新的视频轨道会在本地播放。
-
在发流后调用,远端会接收到新的视频轨道。
新的视频轨道可以通过 ILocalVideoTrack.getMediaStreamTrack 或者 mediaStream.getVideoTracks
方法获取。你可以选择是否停止被替换的视频轨道。
注意事项:
-
支持 Chrome 65+,Safari 以及最新版 Firefox 浏览器。
-
部分移动设备上该方法可能不生效。
-
建议在相同类型、相同编码配置的视频轨道之间进行替换,原因如下:
-
如果视频轨道类型不同,例如用
ScreenVideoTrack
对象替换CameraVideoTrack
对象,由于CameraVideoTrack
默认开启镜像(详见 VideoPlayerConfig.mirror),会导致画面发生镜像翻转。 -
如果编码配置(
encoderConfig
)不同,可能导致实际发送的分辨率或帧率不准。
-
-
订阅端无法知悉视频轨道被替换。
-
如果需要切换媒体输入设备,推荐使用 ICameraVideoTrack.setDevice 方法。
// 原有的本地视频轨道
const localVideoTrack = await AgoraRTC.createCameraVideoTrack();
// 获取新的视频轨道(方式一)
const newTrack = localVideoTrack.getMediaStreamTrack();
// 获取新的视频轨道(方式二)
const newTrack = await navigator.mediaDevices.getUserMedia({audio: true, video: true}).then(mediaStream => mediaStream.getVideoTracks()[0]);
// 替换本地视频轨道,并且停止原有的视频轨道
await localVideoTrack.replaceTrack(newTrack, true);
参数
参数名 | 类型 | 描述 |
---|---|---|
track | MediaStreamTrack | 新的视频轨道。需要传入一个 MediaStreamTrack 对象。 |
stopOldTrack | boolean | 是否停止原有的视频轨道:
|
返回值
Promise<void>
setEnabled
setEnabled(enabled: boolean): Promise<void>
自从 4.0.0
启用/禁用该轨道。
轨道禁用后,播放和发布都将被停止。
-
禁用轨道不会触发 LocalTrack.on("track-ended") 事件。
-
如果该轨道已发布,禁用轨道后,远端会触发 user-unpublished 事件。重新启用后,远端会触发 user-published 事件。
-
setEnabled
和setMuted
不能同时调用。
参数
参数名 | 类型 | 描述 |
---|---|---|
enabled | boolean | 是否启用该轨道:
|
返回值
Promise<void>
setEncoderConfiguration
setEncoderConfiguration(config: VideoEncoderConfiguration | VideoEncoderConfigurationPreset): Promise<void>
设置视频的编码参数,包括分辨率、帧率、码率。
参数
参数名 | 类型 | 描述 |
---|---|---|
config | 你可以传入 SDK 预设的视频编码配置 VideoEncoderConfigurationPreset,也可以传入自定义的 VideoEncoderConfiguration 对象。 |
返回值
Promise<void>
setMuted
setMuted(muted: boolean): Promise<void>
发送或暂停发送该轨道的媒体数据。
自从 4.6.0
如果该轨道已发布,调用 setMuted(true)
后,远端会触发 user-unpublished 事件。再调用 setMuted(false)
后,远端会触发 user-published 事件。
-
与 setEnabled 相比,调用该方法响应速度更快且不影响视频采集状态,详见 setEnabled 和 setMuted 有什么区别?。
-
setEnabled
和setMuted
不能同时调用。
参数
参数名 | 类型 | 描述 |
---|---|---|
muted | boolean | 是否发送该轨道的媒体数据:
|
返回值
Promise<void>
setOptimizationMode
setOptimizationMode(mode: "balanced" | "motion" | "detail"): Promise<void>
自从 4.2.0
设置视频传输优化模式。
你可以在视频通话、视频直播或屏幕共享过程中调用此方法动态调整视频的传输优化模式。例如你想要把屏幕共享内容从演示文稿切换为视频时,你可以将传输优化模式从 "detail"
切换为 "motion"
,确保视频画面在网络波动时不会出现卡顿。
注意事项:该方法只支持 Chrome 浏览器。
参数
参数名 | 类型 | 描述 |
---|---|---|
mode | "balanced" | "motion" | "detail" | 视频传输优化模式:
|
返回值
Promise<void>
<video>
标签的可见状态信息。