Interface ICameraVideoTrack
- Web
更新时间不可用
本地摄像头视频轨道,继承于 LocalVideoTrack,并在此基础上提供了更换采集设备/调整编码参数的功能。
可以通过 AgoraRTC.createCameraVideoTrack 来获取。
Properties
enabled
enabled: booleanInherited from IBufferSourceAudioTrack.enabled
本地轨道当前的启用状态。
isPlaying
isPlaying: booleanInherited from IBufferSourceAudioTrack.isPlaying
媒体轨道是否正在页面上播放。
true: 媒体轨道正在页面上播放。false: 媒体轨道没有在页面上播放。
muted
muted: booleanInherited from IBufferSourceAudioTrack.muted
本地媒体轨道当前的静音状态。
processorDestination
processorDestination: IBaseProcessorInherited from ICameraVideoTrack.processorDestination
自从
4.10.0
本地视频轨道上当前媒体处理链路的最终节点。
trackMediaType
trackMediaType: "audio"|"video"Inherited from IBufferSourceAudioTrack.trackMediaType
媒体轨道的类型:
"audio": 音频轨道。"video": 视频轨道。
Methods
clone
clone(config?: VideoEncoderConfiguration | VideoEncoderConfigurationPreset, cloneTrack?: boolean): ICameraVideoTrackOverrides ILocalVideoTrack.clone
自从
4.19.0
复制当前的视频轨道对象,生成一个新的视频轨道。
在视频会议、在线教育等场景中,你可以用该方法实现同一视频流的两路显示,并为每路显示设置不同的分辨率、帧率、码率等参数。
| 参数名 | 描述 |
|---|---|
optional | 新生成视频轨道的编码配置。你可以通过 VideoEncoderConfiguration 传入 SDK 内置的编码配置;也可以通过传入一个 VideoEncoderConfigurationPreset 来自定义视频编码配置。 |
cloneTrackboolean | 是否克隆当前轨道。默认为 |
| 返回类型 | 描述 |
|---|---|
新生成的视频轨道。 |
close
close(): voidInherited from IBufferSourceAudioTrack.close
关闭本地轨道,并释放相关采集设备。
一旦本地轨道被关闭,就无法再次使用。如需再次使用本地轨道,需要重新创建。
| 返回类型 | 描述 |
|---|---|
void |
getCurrentFrameData
getCurrentFrameData(): ImageDataInherited from ICameraVideoTrack.getCurrentFrameData
自从
4.1.0
获取当前渲染的视频帧数据。
只有在播放后才能调用此方法,如果没有调用 play 则返回空数据。
| 返回类型 | 描述 |
|---|---|
ImageData | 存储了 RGBA 数据的 |
getListeners
getListeners(event: string): Function[]Inherited from EventEmitter.getListeners
指定一个事件名,获取当前所有监听这个事件的回调函数。
| 参数名 | 描述 |
|---|---|
eventstring | 事件名称。 |
| 返回类型 | 描述 |
|---|---|
Function[] |
getMediaStreamTrack
getMediaStreamTrack(): MediaStreamTrackInherited from IBufferSourceAudioTrack.getMediaStreamTrack
获取浏览器原生的 MediaStreamTrack 对象。
| 返回类型 | 描述 |
|---|---|
MediaStreamTrack | 一个 MediaStreamTrack 对象。 |
getRTCRtpTransceiver
getRTCRtpTransceiver(type?: StreamType): RTCRtpTransceiver | undefinedInherited from IBufferSourceAudioTrack.getRTCRtpTransceiver
获取当前轨道的 RTCRtpTransceiver 实例。
该方法目前主要用于视频流的端到端加密(Beta)。
如果 SDK 发生断线重连,当前轨道对应的
RTCRtpTransceiver实例可能会发生变化。你可以通过以下回调来获取新的RTCRtpTransceiver实例:
| 参数名 | 描述 |
|---|---|
typeStreamType | 视频流的类型。详见 StreamType。 |
| 返回类型 | 描述 |
|---|---|
RTCRtpTransceiver | undefined | 当前轨道的 |
getStats
getStats(): LocalVideoTrackStatsInherited from ICameraVideoTrack.getStats
Overrides ILocalTrack.getStats
获取本地视频轨道的相关信息。
deprecated
自 v4.1.0 起废弃,请使用 AgoraRTCClient.getLocalVideoStats 和 AgoraRTCClient.getLocalAudioStats。
| 返回类型 | 描述 |
|---|---|
getTrackId
getTrackId(): stringInherited from IBufferSourceAudioTrack.getTrackId
获取由 SDK 生成的对于媒体轨道来说的唯一 ID。
| 返回类型 | 描述 |
|---|---|
string | 媒体轨道 ID。 |
getTrackLabel
getTrackLabel(): stringInherited from IBufferSourceAudioTrack.getTrackLabel
获取本地轨道的来源描述。
| 返回类型 | 描述 |
|---|---|
string | 可能返回以下值:
|
getVideoElementVisibleStatus
getVideoElementVisibleStatus(): CheckVideoVisibleResult | undefinedInherited from ICameraVideoTrack.getVideoElementVisibleStatus
自从
4.8.0
获取 HTML <video> 标签的可见状态和不可见原因。
调用 localVideoTrack.play 后 SDK 会创建 HTML <video> 标签用于播放视频轨道。当 localVideoTrack.isPlaying 为 true 却看不到图像时,你可调用该方法进行问题排查。
| 返回类型 | 描述 |
|---|---|
CheckVideoVisibleResult | undefined | CheckVideoVisibleResult 对象。如果该方法返回
|
off
off(event: string, listener: Function): voidInherited from EventEmitter.off
取消一个指定事件的监听。
| 参数名 | 描述 |
|---|---|
eventstring | 指定事件的名称。 |
listenerFunction | 监听事件时传入的回调函数。 |
| 返回类型 | 描述 |
|---|---|
void |
on
on [1/4]
on(event: "track-updated", listener: typeof event_track_updated): voidInherited from ICameraVideoTrack.on
Overrides ILocalAudioTrack.on
| 参数名 | 描述 |
|---|---|
event"track-updated" | 事件名称。 |
listenertypeof event_track_updated | 详见 track-updated。 |
| 返回类型 | 描述 |
|---|---|
void |
on [2/4]
on(event: "track-ended", listener: typeof event_track_ended): voidInherited from ICameraVideoTrack.on
Overrides ILocalAudioTrack.on
| 参数名 | 描述 |
|---|---|
event"track-ended" | 事件名称。 |
listenertypeof event_track_ended | 详见 track-ended。 |
| 返回类型 | 描述 |
|---|---|
void |
on [3/4]
on(event: "video-element-visible-status", listener: typeof event_video_element_visible_status): voidInherited from ICameraVideoTrack.on
Overrides ILocalAudioTrack.on
| 参数名 | 描述 |
|---|---|
event"video-element-visible-status" | 事件名称。 |
listenertypeof event_video_element_visible_status |
| 返回类型 | 描述 |
|---|---|
void |
on [4/4]
on(event: "transceiver-updated", listener: typeof event_transceiver_updated): voidInherited from ICameraVideoTrack.on
Overrides ILocalAudioTrack.on
添加事件监听器。
| 参数名 | 描述 |
|---|---|
event"transceiver-updated" | 事件名称。 |
listenertypeof event_transceiver_updated |
| 返回类型 | 描述 |
|---|---|
void |
once
once(event: string, listener: Function): voidInherited from EventEmitter.once
监听一个指定的事件,当事件触发时会调用传入的回调函数。
当监听后事件第一次触发时,该监听和回调函数就会被立刻移除,也就是只监听一次指定事件。
| 参数名 | 描述 |
|---|---|
eventstring | 指定事件的名称。 |
listenerFunction | 传入的回调函数。 |
| 返回类型 | 描述 |
|---|---|
void |
pipe
pipe(processor: IBaseProcessor): IBaseProcessorInherited from ICameraVideoTrack.pipe
自从
4.10.0
将 Processor 注入本地视频轨道。
| 参数名 | 描述 |
|---|---|
processorIBaseProcessor |
|
| 返回类型 | 描述 |
|---|---|
IBaseProcessor |
|
play
play(element: string | HTMLElement, config?: VideoPlayerConfig): voidInherited from ICameraVideoTrack.play
Overrides ILocalTrack.play
在页面上播放远端视频轨道。
| 参数名 | 描述 |
|---|---|
elementstring | HTMLElement | 指定一个 DOM 元素,SDK 将在这个元素下创建
|
configVideoPlayerConfig | 设置播放参数(镜像/显示模式)。详见 VideoPlayerConfig。对于本地视频轨道,镜像模式默认开启。 |
| 返回类型 | 描述 |
|---|---|
void |
removeAllListeners
removeAllListeners(event?: string): voidInherited from EventEmitter.removeAllListeners
指定一个事件,取消其所有的监听。
| 参数名 | 描述 |
|---|---|
eventstring | 指定事件的名称,如果没有指定事件,则取消所有事件的所有监听。 |
| 返回类型 | 描述 |
|---|---|
void |
replaceTrack
replaceTrack(track: MediaStreamTrack, stopOldTrack: boolean): Promise<void>Inherited from ICameraVideoTrack.replaceTrack
自从
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);| 参数名 | 描述 |
|---|---|
trackMediaStreamTrack | 新的视频轨道。需要传入一个 MediaStreamTrack 对象。 |
stopOldTrackboolean | 是否停止原有的视频轨道:
|
| 返回类型 | 描述 |
|---|---|
Promise<void> |
sendSeiData
sendSeiData(sei: Uint8Array): voidInherited from ICameraVideoTrack.sendSeiData
在 H.264 视频流中添加 SEI 数据。
| 参数名 | 描述 |
|---|---|
seiUint8Array | SEI 数据。 |
| 返回类型 | 描述 |
|---|---|
void |
setDevice
setDevice(deviceId: string | RequiredOnlyOneOf<object>): Promise<void>设置负责采集视频数据的摄像头设备。
在发布前和发布后均可调用此方法。
| 参数名 | 描述 |
|---|---|
deviceIdstring | RequiredOnlyOneOf & lt;object & gt; | 设备 ID,支持通过以下方式传入:
|
| 返回类型 | 描述 |
|---|---|
Promise<void> |
setEnabled
setEnabled(enabled: boolean): Promise<void>Overrides IBufferSourceAudioTrack.setEnabled
自从
4.0.0
启用/禁用该轨道。
轨道禁用后,播放和发布都将被停止。
- 禁用轨道不会触发 LocalTrack.on("track-ended") 事件。
- 如果该轨道已发布,禁用轨道后,远端会触发 user-unpublished 事件。重新启用后,远端会触发 user-published 事件。
setEnabled和setMuted不能同时调用。
| 参数名 | 描述 |
|---|---|
enabledboolean | 是否启用该轨道:
|
| 返回类型 | 描述 |
|---|---|
Promise<void> |
setEncoderConfiguration
setEncoderConfiguration(config: VideoEncoderConfiguration | VideoEncoderConfigurationPreset): Promise<void>Inherited from ICameraVideoTrack.setEncoderConfiguration
设置视频的编码参数,包括分辨率、帧率、码率。
| 参数名 | 描述 |
|---|---|
required | 你可以传入 SDK 预设的视频编码配置 VideoEncoderConfigurationPreset,也可以传入自定义的 VideoEncoderConfiguration 对象。 |
| 返回类型 | 描述 |
|---|---|
Promise<void> |
setMuted
setMuted(muted: boolean): Promise<void>Inherited from IBufferSourceAudioTrack.setMuted
发送或暂停发送该轨道的媒体数据。
自从
4.0.0
如果该轨道已发布,调用 setMuted(true) 后,远端会触发 user-unpublished 事件。再调用 setMuted(false) 后,远端会触发 user-published 事件。
- 与 setEnabled 相比,调用该方法响应速度更快且不影响视频采集状态,详见 setEnabled 和 setMuted 有什么区别?。
setEnabled和setMuted不能同时调用。
| 参数名 | 描述 |
|---|---|
mutedboolean | 是否发送该轨道的媒体数据:
|
| 返回类型 | 描述 |
|---|---|
Promise<void> |
setOptimizationMode
setOptimizationMode(mode: OptimizationMode): Promise<void>Inherited from ICameraVideoTrack.setOptimizationMode
自从
4.2.0
设置视频传输优化模式。
你可以在视频通话、视频直播或屏幕共享过程中调用此方法动态调整视频的传输优化模式。例如你想要把屏幕共享内容从演示文稿切换为视频时,你可以将传输优化模式从 "detail" 切换为 "motion",确保视频画面在网络波动时不会出现卡顿。
注意事项
该方法只支持 Chrome 浏览器。
| 参数名 | 描述 |
|---|---|
modeOptimizationMode | 视频传输优化模式:
|
| 返回类型 | 描述 |
|---|---|
Promise<void> |
stop
stop(): voidInherited from IBufferSourceAudioTrack.stop
停止播放。
| 返回类型 | 描述 |
|---|---|
void |
unpipe
unpipe(): voidInherited from ICameraVideoTrack.unpipe
自从
4.10.0
取消本地视频轨道上注入的 Processor。
| 返回类型 | 描述 |
|---|---|
void |