输入在线媒体流功能可以将媒体流作为一个发送端接入正在进行的直播房间。通过将正在播放的视频添加到直播中,主播和观众可以在一起收听/观看媒体流的同时,实时互动。
Agora SDK 从 v2.1.0 版本开始,新增 addInjectStreamUrl
接口,通过该接口:
在线流媒体输入主要适用于如下场景:
频道内同一时间只允许输入一个在线媒体流。
只有主播可以输入和移除在线媒体流,连麦主播和普通用户不可以。
主播在直播过程中启用输入在线媒体流。观众需要订阅主播才能观看外部视频。
支持的媒体流格式包括:RTMP、HLS、FLV。纯音频流也可以作为在线媒体流输入。
如果媒体流输入成功,该媒体流会出现在频道中,并收到 didJoinChannel
和 firstRemoteVideoDecodedOfUid
回调,其中 uid
为 666。
如果媒体流输入失败,会返回错误码。可能会出现的错误码及处理方法如下:
AgoraErrorCodeInvalidArgument(2)
:输入的 URL 为空。请重新调用该方法,并确认输入的媒体流的 URL 是有效的AgoraErrorCodeNotInitialized(7)
:引擎没有初始化。请确认调用该方法前已创建 RtcEngine
对象并完成初始化AgoraErrorCodeNotSupported(4)
:频道非直播模式。请调用 setChannelProfile
并将频道设置为直播模式再调用该方法AgoraErrorCodeNotReady(3)
:没有加入频道。请确认 App 在频道内实现在线媒体流输入首先需要用户以主播身份加入一个直播频道。如果你对如何初始化引擎对象和加入直播频道不了解,请参考 快速开始。
输入在线媒体流:
直播频道的主播可以使用 addInjectStreamUrl
,指定一个在线媒体流作为连麦端接入房间。
// swift
// Adds a voice or video stream into an ongoing broadcast.
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)
// 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];
你可以通过修改 config
的参数值控制接入媒体流的分辨率、码率、帧率、音频采样率等参数。详见 AgoraLiveInjectStreamConfig 参数说明。
移除在线媒体流:
频道内的主播可以使用 removeInjectStreamUrl
接口,移除一个已经接入的在线媒体流。
// swift
let urlPath = "Some online RTMP/HLS url path"
agoraKit.removeInjectStreamUrl(urlPath)
// objective-c
NSString *urlPath = @"Some online RTMP/HLS url path";
[agoraKit removeInjectStreamUrl: urlPath];
主播退出频道后,无需再调用
removeInjectStreamUrl
接口。