跳到主要内容

发布自定义流

捕获自定义媒体流

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

自定义转换 mediaStream

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

接口

typescript
rtcClient.createLocalTracks(tag, stream, options)

参数说明

参数类型必填说明
tagstring轨道标识
streamMediaStream浏览器原生 API 获取的 mediaStream 对象
optionsICreateLocalTrackOptions创建 Track 的配置项

示例代码

typescript
/**
* 根据 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 接口以方便用户实现自定义媒体流的发布。

接口

typescript
rtcClient.createLocalFileTracks(tag, file, options)

参数说明

参数类型必填说明
tagstring资源标识
filestring获取到的 File 实例
optionsICreateLocalTrackOptions创建 Track 的配置项

示例代码

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

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

提示

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

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

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

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

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

发布自定义媒体流

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

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