Track 对象
Track
对象是 Track 模式下的媒体对象,可以用来在页面上播放媒体。
info
TrackInfo
类型标记这个 Track
的 TrackInfo
, 包含 trackId
、kind
、tag
等信息
userId
string
类型 标记这个 Track
是来自哪个用户发布的
mediaTrack
MediaStreamTrack
类型表示这个 Track
原生的浏览器媒体对象,一般场景不会用到
mediaElement
HTMLVideoElement | HTMLAudioElement | undefined
类型 如果调用了 Track
的 play
方法,这里可以访问到实际播放媒体的 <video>
或 <audio>
元素。如果没有 play
过或者 Track
被释放,为 undefined
。
play(container)
HTMLElement
container:在传入的 container
下创建相应的 <audio>
或 <video>
元素播放媒体。详细参见播放音视频轨
如果您在还没有与用户任何交互的情况下调用了play方法会导致音频无法播放,详情参考我们的博文:浏览器的自动播放策略的注意事项
getStats()
TrackStatsReport
返回 获取当前 Track
的传输状态数据,SDK 内部会每秒更新一次。TrackStatsReport
的详细格式见下:
TrackStatsReport {
bitrate: number; // 当前实时码率
bytes: number; // 截止目前一共发送/接收的字节数
packets: number; // 截止目前一共发送/接收的包数
packetLoss: number; // 截止目前一共的丢包数
packetLossRate: number; // 当前的丢包率
timestamp: number; //时间戳
}
该方法仅支持 Chrome 和 Firefox
release()
停止从远端或者采集设备拉取媒体数据,释放这个 Track
取消订阅会自动调用相应
Track
的release
,但是取消发布不会调用,如果需要请手动调用
getCurrentFrameDataURL()
视频Track调用才会生效
截帧
DataURL
返回:当视频不存在时返回 "data:,"
onAudioBuffer(callback, bufferSize?)
音频Track调用才会生效
(buffer: AudioBuffer) => any
callback: 设置这个方法后,SDK 会收集音频的原始 Buffer 数据,然后回调给传入的 callback
函数中。AudioBuffer 是浏览器原生的音频 Buffer 对象。
number
可选
bufferSize: 是指每次回调 Buffer 的长度,默为 4096 位。
bufferSize
必须是 2 的 n 次方且大于 256 小于 16394
track.onAudioBuffer((buffer) => {
console.log("get audio buffer!", buffer);
});
setVolume(value)
音频Track调用才会生效
number
value: 设置音量,目前仅对采集到的 Track 有效(订阅 Track 无效)
value 是增益值,0 代表静音,2,代表当前声音的 2 倍
getCurrentTimeDomainData()
音频Track调用才会生效
Uint8Array
返回获取当前 2048 位的时域数据
通常用于音频可视化的数据,可以配合 requestAnimationFrame 和 canvas 实现绘制声波图
getCurrentFrequencyDomainData()
音频Track调用才会生效
Uint8Array
返回获取当前 2048 位的频域数据
通常用于音频可视化的数据,可以配合 requestAnimationFrame 和 canvas 实现绘制频谱图
getCurrentVolumeLevel()
音频Track调用才会生效
number
返回 获取当前实时的音量等级,返回值的范围在 0 - 1 之间,可以用于音量的可视化。
setMaster(isMaster)
boolean
isMaster: 默认所有的 Track 的 master
属性都是 false
, 可以通过该方法设置 master
属性
关于
master
的介绍参见 模式选择
事件列表
release
当 Track
调用 release
方法的时候触发,表示这个 Track
已经被释放。无论是自己手动调用还是 SDK 自动调用都会触发。
track.once("release", () => {
console.log("track", track, "is released!");
})
ended
当 Track 由于任何原因不再向流提供数据时发生此事件,包括到达媒体输入的结束,用户撤消所需的权限,删除源设备或远程结束连接。
常见于 USB 输入设备被拔出或 Chrome 下在屏幕共享过程中用户自行取消了屏幕共享。订阅下来的 Track 不会触发此事件
track.once("ended", () => {
console.log("track ended!");
})