IOS技术分享| 互动连麦场景实现

1.前言


互动连麦的场景,演示了如何通过云服务,并配合 anyRTC RTC SDK、anyRTC RTM SDK,快速实现连麦社交的场景。

方案选择:

  • RTC实时互动

  • 客户端推流到CDN

  • 服务端推流到CDN

2.场景实现


2.1视频互动连麦

效果预览

App Store 体验

视频互动连麦

源码下载

点击跳转 Github

2.2音频互动连麦

效果预览

App Store 体验

音频互动连麦

源码下载

点击跳转 Github

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 ?? "")

}

复制代码

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)

}

复制代码

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 集成方式


方式一:官网获取

docs.anyrtc.io/download

方式二: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)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值