功能描述
输入在线媒体流功能是将一路媒体流(可以是直播源(hls、m3u8、RTMP 、RTSP),也可以是录播的媒体文件(mp4,m3u8))作为一个发送端用户进入当前的频道,频道内的用户可以一起接听/观看该媒体流并实施互动。
使用场景
- 赛事直播中,主播直接拉比赛的音视频流,实现主播和观众边看比赛边点评的功能。
- 同一直播间内,主播与观众一同欣赏电影、音乐、演出,并实时交流讨论。
- 无人机或网络摄像头直接采集视频,该视频作为在线媒体流输入直播频道中。
工作原理
主播调用addInjectStreamUrl
方法将媒体流拉到 anyRTC GT-RTN 中,经过转码输入到直播频道中。
- 频道内的用户都可以听/看到该媒体流。
- 如果主播开启了 CDN 旁路推流,该媒体流也会被推送到 CDN 上, CDN 观众就可以听/看到这路媒体流。
频道内同一时间只允许输入一个在线媒体流。
支持的编码格式:音频 AAC,视频 H.264。
纯音频流也可作为在线媒体流输入直播频道。
只有主播可以输入/删除在线媒体流,普通观众和 CDN 观众都不可以。
实现方法
在实现输入在线媒体流功能前,请确保已实现基本的音视频功能。
请确保已开通旁路推流的功能。
操作步骤
-
频道内主播调用
addInjectStreamUrl
方法向直播频道内输入指定在线媒体流。你也可以修改 config 的参数设置媒体流输入的分辨率、码率和帧率等参数,详见ARLiveInjectStreamConfig
。频道内同一时间只允许输入一个在线媒体流。
输入媒体流成功后,该媒体流会在直播频道内自动播放,频道内所有用户都会收到
didJoinedOfUid(uid: 666)
回调,输入媒体流的主播同时还会收到streamInjectedStatusOfUrl
回调。如果输入媒体流失败,查阅
API 参考
排查问题。 -
频道内主播调用
removeInjectStreamUrl
方法从直播频道内删除指定的已输入在线媒体流。删除媒体流成功后,频道内所有用户都会收到
didOfflineOfUid(uid: 666)
回调。主播退出频道后,无需再调用
removeInjectStreamUrl
接口。
示例代码
// Swift
// 输入在线媒体流
let config = ARLiveInjectStreamConfig()
config.size = CGSize(width: 640, height: 360)
config.videoGop = 30
config.videoBitrate = 400
config.videoFramerate = 15
config.audioSampleRate = 48000
config.audioBitrate = 48
config.audioChannels = 1
rtcKit.addInjectStreamUrl("media stream url", config: config)
// 删除在线媒体流
let urlPath = "Some online RTMP/HLS url path"
rtcKit.removeInjectStreamUrl(urlPath)
// Objective-C
// 输入在线媒体流
ARLiveInjectStreamConfig *config = [[ARLiveInjectStreamConfig alloc] init];
config.size = CGSizeMake(640, 360);
config.videoGop = 30
config.videoBitrate = 400
config.videoFramerate = 15
config.audioSampleRate = 48000
config.audioBitrate = 48
config.audioChannels = 1
[rtcKit addInjectStreamUrl: @"media stream url" config: config];
// 删除在线媒体流
NSString *urlPath = @"Some online RTMP/HLS url path";
[rtcKit removeInjectStreamUrl: urlPath];
API 参考
开发注意事项
- 频道内同一时间只允许输入一个在线媒体流。
- 只有主播用户才能调用输入在线媒体流功能。