输入在线媒体流功能可以将音视频流作为一个发送端输入正在进行的直播房间。通过将正在播放的音视频输入到直播频道中,主播和观众可以一起收听/观看该媒体流并实时互动。
直播频道中的主播通过 Video Inject 服务器将在线媒体流拉到 Agora SD-RTN 中,输入到直播频道内。
- 频道内同一时间只允许输入一个在线媒体流。
- 支持的编码格式:音频 AAC,视频 H.264。
- 纯音频流也可作为在线媒体流输入直播频道。
- 只有主播可以输入/删除在线媒体流,连麦主播、普通观众和 CDN 观众都不可以。
在实现输入在线媒体流功能前,请确保你已在项目中完成基本的实时音视频功能。详见开始互动直播。
请确保已开通旁路推流的功能,详见前提条件。
参考如下步骤,在你的项目中实现输入在线媒体流功能:
频道内主播调用 addInjectStreamUrl
方法向直播频道内输入指定在线媒体流。你也可以修改 config 的参数设置媒体流输入的分辨率、码率和帧率等参数,详见AgoraInjectStreamConfig
。
频道内同一时间只允许输入一个在线媒体流。
输入媒体流成功后,该媒体流会在直播频道内自动播放,频道内所有用户都会收到 didJoinedOfUid(uid: 666)
回调,输入媒体流的主播同时还会收到 streamInjectedStatusOfUrl
回调。
如果输入媒体流失败,查阅 API 参考排查问题。
频道内主播调用 removeInjectStreamUrl
方法从直播频道内删除指定的已输入在线媒体流。
删除媒体流成功后,频道内所有用户都会收到 didOfflineOfUid(uid: 666)
回调。
主播退出频道后,无需再调用
removeInjectStreamUrl
接口。
// Swift
// 输入在线媒体流
let config = AgoraLiveInjectStreamConfig()
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
agoraKit.addInjectStreamUrl("media stream url", config: config)
// 删除在线媒体流
let urlPath = "Some online RTMP/HLS url path"
agoraKit.removeInjectStreamUrl(urlPath)
// Objective-C
// 输入在线媒体流
AgoraLiveInjectStreamConfig *config = [[AgoraLiveInjectStreamConfig 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
[agoraKit addInjectStreamUrl: @"media stream url" config: config];
// 删除在线媒体流
NSString *urlPath = @"Some online RTMP/HLS url path";
[agoraKit removeInjectStreamUrl: urlPath];
同时,我们在 GitHub 提供一个开源的 Live-Streaming-Injection 示例项目。
主播在直播过程中启用输入在线媒体流时,观众需要订阅主播才能观看外部视频。