跳到主要内容

发布自定义流

捕获自定义媒体流

除了从本地摄像头、麦克风设备捕获默认音视频资源外,SDK 还支持获取本地/网络文件流,以及转化浏览器的 MediaStream 实例为 SDK 的音视频资源。

自定义转换 mediaStream

使用 createLocalTracks 可以将浏览器原生 API 获取的 mediaStream 对象转换为 RCLocalTrack 实例对象,满足 App 自行转换的需求。

/**
* 根据 MediaStream 实例对象创建 RCLocalTrack 实例
* @param tag 轨道标识,包含 A-Z、a-z、0-9、+、=、- 的字符串。trackId 中将包含该 tag。
* @param stream MediaStream 实例
* @param options 可用于指定 `withoutVideo` 与 `withoutAudio` 以剔除视轨与音轨
*/
const { code, tracks } = await rtcClient.createLocalTracks(tag: string, stream: MediaStream, options?: ICreateLocalTrackOptions)

捕获本地或网络文件流

从 RTCLib v5.0.5 开始,新增了 createLocalFileTracks 接口以方便用户实现自定义媒体流的发布。

/**
* 根据本地或网络媒体文件资源创建 `RCLocalFileTrack` 实例
* @param tag 资源标识
* @param file 网络文件地址,或通过 <input type='file'> 获取到的 File 实例
* @param options 可用于指定 `withoutVideo` 与 `withoutAudio` 以剔除视轨或音轨
*/
createLocalFileTracks (tag: string, file: string | File, options?: ICreateLocalTrackOptions): Promise<{ code: RCRTCCode, tracks: RCLocalFileTrack[] }>;

从网络媒体文件获取音视频流

提示

由于浏览器同源策略限制,网络媒体资源要求与调用 createLocalFileTracks API 的页面同源,或者允许跨域访问。

const { code, tracks } = await rtcClient.createLocalFileTracks(
'tag', // track 标识
'https://abc.com/a.mp4', // 网络资源 url 地址
{
withoutAudio: false, // 当值为 true 时将不产生音轨,默认为 false
withoutVideo: false, // 当值为 true 时将不产生视轨,默认为 false
}
)

从硬盘存储的媒体文件获取音视频流

使用 createLocalFileTracks 从硬盘存储的媒体文件获取音视频流。

// 此处假定已通过 <input type="file"> 成功获取 File 类型实例变量 file
const { code, tracks } = await rtcClient.createLocalFileTracks('tag', file)

发布自定义媒体流

使用房间实例的 publish 方法发布媒体流。

const { code } = await room.publish(tracks)