1.前言
互动连麦的场景,演示了如何通过云服务,并配合 anyRTC RTC SDK、anyRTC RTM SDK,快速实现连麦社交的场景。
方案选择:
RTC实时互动
客户端推流到CDN
服务端推流到CDN
2.场景实现
2.1视频互动连麦
效果预览
![](https://i-blog.csdnimg.cn/blog_migrate/0763dfc2dbef3bc824cbcb61341bb922.png)
App Store 体验
源码下载
2.2音频互动连麦
效果预览
![](https://i-blog.csdnimg.cn/blog_migrate/6b888a19cf172ca0ee230255662c1c46.png)
App Store 体验
源码下载
3.开发环境
开发工具:Xcode12 真机运行
开发语言:Swift
实现:连麦互动,包含推拉流、连麦、聊天等。
4.核心代码
4.1实例化 SDK 对象
funcinitializeEngine() {
// init ARtcEngineKit
rtcKit = ARtcEngineKit.sharedEngine(withAppId: UserDefaults.string(forKey: .appid)!, delegate: self)
rtcKit.setChannelProfile(.liveBroadcasting)
rtcKit.enableVideo()
ifinfoVideoModel.isBroadcaster {
rtcKit.setClientRole(.broadcaster)
letvideoCanvas = ARtcVideoCanvas()
videoCanvas.view = broadcasterVideo.renderView
rtcKit.setupLocalVideo(videoCanvas)
view.insertSubview(broadcasterVideo, at: 0)
videoArr.append(broadcasterVideo)
// setUp videoConfig
letvideoConfig = ARVideoEncoderConfiguration()
videoConfig.dimensions = getVideoDimensions(index: infoVideoModel.dimensions)
videoConfig.bitrate = 500
videoConfig.frameRate = 15
rtcKit.setVideoEncoderConfiguration(videoConfig)
}
// init ARtmKit
rtmEngine = ARtmKit.init(appId: UserDefaults.string(forKey: .appid)!, delegate: self)
rtmEngine.login(byToken: infoVideoModel.rtmToken, user: UserDefaults.string(forKey: .uid) ?? "0") { (errorCode) in
}
}
复制代码
4.2RTC实时互动
//------------ RTC 实时互动 ------------------
funcjoinChannel() {
letuid = UserDefaults.string(forKey: .uid)
rtcKit.joinChannel(byToken: infoVideoModel.rtcToken, channelId: infoVideoModel.roomId!, uid: uid) { (channel, uid, elapsed) in
// join sucess
}
}
funcleaveChannel() {
rtcKit.leaveChannel { (stats) in
print("leaveChannel")
}
}
复制代码
4.3客户端推流到CDN
//------------ 客户端推流到 CDN ------------------
funcinitializeStreamingKit() {
streamKit = ARStreamingKit()
streamKit?.setRtcEngine(rtcKit)
streamKit?.setMode(.vidMix)
lettransCodingUser = ARLiveTranscodingUser()
transCodingUser.uid = "0"
transCodingUser.rect = broadcasterVideo.frame
liveTranscoding.transcodingUsers = [transCodingUser]
streamKit?.setLiveTranscoding(liveTranscoding)
streamKit?.pushStream(infoVideoModel.pushUrl ?? "")
}
复制代码
![](https://i-blog.csdnimg.cn/blog_migrate/7adfe18b971c56213de49855c3394693.png)
4.4服务端推流到CDN
//------------ 服务端推流到 CDN ------------------
func initializeAddPublishStreamUrl() {
let transCodingUser = ARLiveTranscodingUser()
transCodingUser.uid = UserDefaults.string(forKey: .uid) ?? "0"
transCodingUser.rect = broadcasterVideo.frame
liveTranscoding.transcodingUsers = [transCodingUser]
rtcKit.setLiveTranscoding(liveTranscoding)
rtcKit.addPublishStreamUrl(infoVideoModel.pushUrl ?? "", transcodingEnabled: true)
}
复制代码
![](https://i-blog.csdnimg.cn/blog_migrate/e9c73abe8f78cd7fb2acaac6146057a5.png)
4.5媒体播放器组件
//------------ 播放器 -- 游客 ------------------
funcinitializeMediaPlayer() {
broadcasterVideo.frame = view.bounds
view.insertSubview(broadcasterVideo, at: 0)
broadcasterVideo.placeholderView.isHidden = false
mediaPlayer = ARMediaPlayer(delegate: self)
mediaPlayer?.setView(broadcasterVideo.renderView)
mediaPlayer?.open(infoVideoModel.pullRtmpUrl!, startPos: 0)
mediaPlayer?.play()
videoLayout()
}
复制代码
5.SDK 集成方式
方式一:官网获取
方式二:CocoaPods 获取
platform:ios, '9.0'
use_frameworks!
target'Your App'do
#anyRTC 音视频库
pod'ARtcKit_iOS', '~> 4.2.2.2'
#anyRTC 实时消息库
pod'ARtmKit_iOS', '~> 1.0.1.6'
end
原文链接:https://juejin.cn/post/6994703273764601892
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓