IOS技术分享| 互动连麦场景实现
前言
anyRTC 提供互动连麦的场景,演示了如何通过 anyRTC云服务,并配合 anyRTC RTC SDK、anyRTC RTM SDK,快速实现连麦社交的场景。
方案选择:
- RTC实时互动
- 客户端推流到CDN
- 服务端推流到CDN
场景实现
一、视频互动连麦
效果预览
App Store 体验
视频互动连麦
源码下载
点击跳转 Github
二、音频互动连麦
效果预览
App Store 体验
音频互动连麦
源码下载
点击跳转 Github
开发环境
开发工具:Xcode12 真机运行
开发语言:Swift
实现:连麦互动,包含推拉流、连麦、聊天等。
核心代码
实例化 SDK 对象
func initializeEngine() {// init ARtcEngineKitrtcKit = ARtcEngineKit.sharedEngine(withAppId: UserDefaults.string(forKey: .appid)!, delegate: self)rtcKit.setChannelProfile(.liveBroadcasting)rtcKit.enableVideo()if infoVideoModel.isBroadcaster {rtcKit.setClientRole(.broadcaster)let videoCanvas = ARtcVideoCanvas()videoCanvas.view = broadcasterVideo.renderViewrtcKit.setupLocalVideo(videoCanvas)view.insertSubview(broadcasterVideo, at: 0)videoArr.append(broadcasterVideo)// setUp videoConfiglet videoConfig = ARVideoEncoderConfiguration()videoConfig.dimensions = getVideoDimensions(index: infoVideoModel.dimensions)videoConfig.bitrate = 500videoConfig.frameRate = 15rtcKit.setVideoEncoderConfiguration(videoConfig)}// init ARtmKitrtmEngine = ARtmKit.init(appId: UserDefaults.string(forKey: .appid)!, delegate: self)rtmEngine.login(byToken: infoVideoModel.rtmToken, user: UserDefaults.string(forKey: .uid) ?? "0") { (errorCode) in}}
RTC实时互动
//------------ RTC 实时互动 ------------------func joinChannel() {let uid = UserDefaults.string(forKey: .uid)rtcKit.joinChannel(byToken: infoVideoModel.rtcToken, channelId: infoVideoModel.roomId!, uid: uid) { (channel, uid, elapsed) in// join sucess}}func leaveChannel() {rtcKit.leaveChannel { (stats) inprint("leaveChannel")}}
客户端推流到CDN
//------------ 客户端推流到 CDN ------------------func initializeStreamingKit() {streamKit = ARStreamingKit()streamKit?.setRtcEngine(rtcKit)streamKit?.setMode(.vidMix)let transCodingUser = ARLiveTranscodingUser()transCodingUser.uid = "0"transCodingUser.rect = broadcasterVideo.frameliveTranscoding.transcodingUsers = [transCodingUser]streamKit?.setLiveTranscoding(liveTranscoding)streamKit?.pushStream(infoVideoModel.pushUrl ?? "")}
服务端推流到CDN
//------------ 服务端推流到 CDN ------------------func initializeAddPublishStreamUrl() {let transCodingUser = ARLiveTranscodingUser()transCodingUser.uid = UserDefaults.string(forKey: .uid) ?? "0"transCodingUser.rect = broadcasterVideo.frameliveTranscoding.transcodingUsers = [transCodingUser]rtcKit.setLiveTranscoding(liveTranscoding)rtcKit.addPublishStreamUrl(infoVideoModel.pushUrl ?? "", transcodingEnabled: true)}
媒体播放器组件
//------------ 播放器 -- 游客 ------------------func initializeMediaPlayer() {broadcasterVideo.frame = view.boundsview.insertSubview(broadcasterVideo, at: 0)broadcasterVideo.placeholderView.isHidden = falsemediaPlayer = ARMediaPlayer(delegate: self)mediaPlayer?.setView(broadcasterVideo.renderView)mediaPlayer?.open(infoVideoModel.pullRtmpUrl!, startPos: 0)mediaPlayer?.play()videoLayout()}
SDK 集成方式
方式一:官网获取
https://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
结束语
连麦项目中还存在一些bug和待完善的功能点。仅供参考,欢迎大家fork。有不足之处欢迎大家指出issues。
最后再贴一下 Github开源下载地址 。
视频连麦互动 Github
语音连麦互动 Github
IOS技术分享| 互动连麦场景实现相关推荐
- IOS技术分享| anyRTC 互动白板场景实现
前言 互动白板提供一整套完整的互动白板解决方案,客户端 SDK 覆盖 iOS.Android.Web 等主流平台,同时提供完整的服务端配套功能,可用于在线教育.在线会议.协作办公.在线互动娱乐等场景. ...
- ios技术分享| iOS 发布 framework 到 Cocoapods 以及常见问题
前言 CocoaPods 是一个用来管理 Xcode 依赖库的项目,通过 CocoaPods,我们可以直观集中和 自动化地管理我们项目的第三方库. 本篇文章讲述如何将 framework 发布到 Co ...
- iOS技术周报-第28期
iOS技术周报第28期 访问iOS wiki(www.ios-wiki.com)获得更多内容. 欢迎大家投递关于iOS的新闻.技术.代码等文章,@吴发伟Ted即可. 关注微信公众账号:iOS技术分享 ...
- 云信小课堂|5分钟快速实现iOS端PK连麦场景
Vol. 4 2021年开年,音频社交风靡互联网,语音社交再成风口,直播连麦开启社交新赛道.在实时通信技术不断革新的现状下,直播平台需要不断探索新的方式以满足用户日益增长的需求,直播连麦就是在此背景下 ...
- iOS中 UISearchController 搜索栏 UI技术分享
iOS中 UISearchController 搜索栏 UI技术分享 [objc] view plain copy <p style="margin-top: 0px; margin- ...
- 阿里技术分享:电商IM消息平台,在群聊、直播场景下的技术实践
本文由淘宝消息业务团队李历岷(花名骨来)原创分享,首次发表于公众号"淘系技术",有修订和改动. 1.引言 本文来自淘宝消息业务团队的技术实践分享,分析了电商IM消息平台在非传统IM ...
- 腾讯技术分享:微信小程序音视频技术背后的故事
1.引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视,小程序上的各种技术体验也越来越丰富.而音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也当然不能错过. ...
- 淘宝技术分享:手淘亿级移动端接入层网关的技术演进之路
本文由手机淘宝技术团队原创分享,吴志华(天施).洪海(孤星).陈虓将(仲升)等专家参与了本文创作,首次发表于公众号"淘系技术",收录整理时有修订和改动. 1.引言 移动端网络的优化 ...
- 阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处
本文引用了唐小智发表于InfoQ公众号上的"钉钉企业级IM存储架构创新之道"一文的部分内容,收录时有改动,感谢原作者的无私分享. 1.引言 业界的 IM 产品在功能上同质化较高,而 ...
最新文章
- LVM逻辑卷轴管理和磁盘配额实验
- Android平台利用OpenCL框架实现并行开发初试
- StaggeredGridView 实现分析--首次填充过程(一)
- PHP基础知识--函数
- 编程之美 求数组中的最长递增子序列
- 如何创建自定义进度栏
- Sharepoin学习笔记—架构系列—07nSharepoint服务(Services)与服务应用程序框架(Service Application Framework) 2
- 爬虫python下载电影_python爬虫:抓取下载电影文件,合并ts文件为完整视频
- Bootstrap 可切换的标签导航
- 【树叶识别】基于matlab BP神经网络树叶类别【含Matlab源码 799期】
- 如何不下载百度网盘下载资源
- html控制萤石云摄像头转动,怎么控制云台转动 ?
- 论文阅读|目标检测之CE-FPN,将通道增强运用到上采样,减少信息丢失,同时添加了通道注意力机制
- 01-05.经典市场营销 Marketing公开课《科特勒营销管理》(一)
- 总结知识,提高认知--牛腩总结
- [LSTM]时间序列预测存在的问题--滑动窗口是一把双刃剑【持续更新】
- 本机php环境搭建教程:windows环境下wampserver的配置教程——超级详细
- WaaSMedicAgent是什么程序?又叫Windows更新医生服务
- 高一职上册计算机技能考试,职高数学高一基础模块上册
- cinder(cinderella怎么读英语)
热门文章
- ERP咨询顾问必备的7种公关能力
- Android OKHttp 可能你从来没用过的拦截器 【实用推荐】
- 数值计算与MATLAB微积分
- idea 配置文件中的中文与ASCII码互转
- APISpace 的 星座配对API
- 用python根据生日判断星座_星座生日配对测试爱情,用Python做输入生日,判
- 【FineReport企业日常问题 1.0】帆软决策服务端管理员密码忘记怎么办?
- 跑过的城市,走过的路
- 如何快速构建一套稳定、高效、可靠的网页无插件监控、直播、点播解决方案
- win7家庭版和旗舰版区别_Win7 ultimate是什么版本?ultimate是什么意思功能区别介绍!...