iOS录屏直播(二)Broadcast Upload Extension和Broadcast Setup UI Extension
Morris_2019.06.13
上一篇总结了ReplayKit相关的知识点,实现了应用内的录屏功能,同时涉及到了很少一部分Broadcast Upload Extension和Broadcast Setup UI Extension的东西,这篇总结Broadcast Upload Extension和Broadcast Setup UI Extension在iOS录屏直播中的运用。
通过ReplayKit的RPScreenRecorder可以实现应用内录屏,在iOS10上录制完还可以编辑和查看录制内容,在iOS11上可以直接边录制一遍获取到音视频数据sampleBuffer。但是没办法实现应用外录屏功能。
要想实现这个手机的录屏,并不受App限制,比如王者荣耀录屏,直接直播到斗鱼App上这种需求,就需要Broadcast Upload Extension和Broadcast Setup UI Extension的支持,最起码的需要Broadcast Upload Extension。iOS10苹果推出Broadcast Upload Extension和Broadcast Setup UI Extension来支持手机的录屏直播功能。
Extension是什么
Extension是扩展,做iOS开发的对这个并不陌生,我们经常对类进行扩展,扩展出分类来,即Category。对App的扩展使用的比较少,在录屏直播功能中我们需要使用App的扩展Broadcast Upload Extension和Broadcast Setup UI Extension。
Broadcast Upload Extension和Broadcast Setup UI Extension
Broadcast Upload Extension和Broadcast Setup UI Extension都是对录屏功能的扩展。在我们的App中,在TARGET下,点击“+”,选择iOS下的Broadcast Upload Extension,然后创建一个新的Target,XXBroadcastUploadExtension。创建时,可以选择同时创建Broadcast Setup UI Extension。
这两个对应用的扩展就被添加在了我们主TARGET下,同时在项目中会生成对应的文件,这些文件是有用的。
我们知道每个TARGET是对应一个工程,我们新创建的两个Terget,引入了两个新的工程,也就是两个新的App,这两个新的App是依赖于我们的App的,随着我们的App的安装也会被安装,随着我们App的卸载被卸载。我们把这两个子target叫做子App,把我们的App叫做宿主App,子App是依赖于宿主App的。
在录屏直播中,虽然我们的App是主App,但是宿主App可单独运行的。在添加Broadcast Upload Extension后,在手机的录屏上,会出现我们的扩展Broadcast Upload Extension。
Broadcast Upload Extension
创建Broadcast Upload Extension后,项目里会生成一个类SampleHandler,这个类继承RPBroadcastSampleHandler并需要实现了父类的几个方法。
开始录屏该方法会被执行
- (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *> *)setupInfo {// User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.
}
开始录屏,这个方法会被执行,如果实现了Broadcast Setup UI Extension,里面有个setupInfo,这里的setupInfo就是从Broadcast Setup UI Extension中传过来的,如果没实现Broadcast Setup UI Extension,这里的setupInfo会是空的。
对于录屏直播功能来说,不实现Broadcast Setup UI Extension也可以,Broadcast Upload Extension是必须要实现的,否则,没办法没拿屏幕数据,也就没法直播。
暂停屏该方法会被执行
- (void)broadcastPaused {// User has requested to pause the broadcast. Samples will stop being delivered.
}
继续录屏该方法会被执行
- (void)broadcastResumed {// User has requested to resume the broadcast. Samples delivery will resume.
}
结束录屏该方法会被执行
- (void)broadcastFinished {// User has requested to finish the broadcast.
}
录屏中该方法会被执行,通过这个方法将录屏数据返回到这里
- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {}
Broadcast Setup UI Extension
创建这个扩展会生成一个继承UIVieController的BroadcastSetupViewController,在这个contrller里你可以自己添加一些按钮啊输入框之类的东西,它就是一个简单的contrller,不要想的太负责。其具体作用就是,在开始录屏的时候,弹出来这个controller,让用户如输入一些用户名啊什么的,然后把这些信息通过以下方法,通过setupInfo传到Broadcast Upload Extension的broadcastStartedWithSetupInfo这个方法里,然后开始录屏推流。
// Call this method when the user has finished interacting with the view controller and a broadcast stream can start
- (void)userDidFinishSetup {// URL of the resource where broadcast can be viewed that will be returned to the applicationNSURL *broadcastURL = [NSURL URLWithString:@"http://apple.com/broadcast/streamID"];// Dictionary with setup information that will be provided to broadcast extension when broadcast is startedNSDictionary *setupInfo = @{ @"broadcastName" : @"example" };// Tell ReplayKit that the extension is finished setting up and can begin broadcasting[self.extensionContext completeRequestWithBroadcastURL:broadcastURL setupInfo:setupInfo];
}
这个注释注意一下:Call this method when the user has finished interacting with the view controller and a broadcast stream can start
在这个界面上起码得有一个开始直播的操作吧,开始直播后调用userDidFinishSetup这个方法将数据传给Broadcast Upload Extension。
Broadcast Setup UI Extension可以不要,但是也不是多余的,某些用户可能有这个需求,直播前先填写直播房间id,昵称什么的,然后开始直播,这种就需要Broadcast Setup UI 这个Extension了。反正是个controller,界面自己怎么定义都行。
iOS录屏直播(二)Broadcast Upload Extension和Broadcast Setup UI Extension相关推荐
- iOS录屏直播(一)初识ReplayKit
Morris_2019.05.08 本篇主要功能: 认识ReplayKit框架 RPScreenRecorder实现在应用内录屏功能 RPPreviewViewController查看录屏内容 RPB ...
- iOS录屏直播(四)主App和宿主App数据共享,通信功能实现
文章目录 CFNotificationCenterGetDarwinNotifyCenter 发送通知 接收通知 注意事项 遗留问题 补充 Morris_ 2019.06.17 上一篇总结了一下App ...
- iOS录屏直播(三)AppGroup
Morris_2019.06.14 AppGroup是什么 App Groups Entitlement AppGroup是一个App组,里面可以有若干个App,AppGroup组是个虚无的存在,若干 ...
- iOS rtmp 摄像头/录屏直播以及观看
之前讲过如何在centos上使用nginx搭建rtmp服务器(链接),本文介绍一下iOS 端如何通过rtmp录屏直播以及观看,完整的工程代码地址(https://github.com/zxm006/R ...
- Android实现录屏直播(二)需求才是硬道理之产品功能调研
请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/54254244 Android实现录 ...
- android 录屏自动运行,Android实现录屏直播+远程控制(二)
前言 前面Android实现录屏直播+远程控制(一)的文章说到Android5.0的录屏直播实现方式,今天来说说实现录屏直播的另外一种方案 1 启动一个后台服务实现录屏 1.服务的创建这边就不在赘述了 ...
- 手游录屏直播技术详解 | 直播 SDK 性能优化实践
直播无疑是 2016 年的大热话题,七牛云在 6 月底发布了实时流网络 LiveNet 和直播云解决方案后,我们用<直播技术详解>系列文章系统地介绍了直播各个环节的关键技术,帮助视频直播创 ...
- 如何做电脑游戏桌面录屏直播实现手机直接观看
原创教程 ( 转载请注明出处 ) 2017-6-26,今天来做一下是电脑游戏桌面录屏直播的教程,就是把桌面的游戏直播出去,加上话筒做讲解.最终实现在电脑.手机.微信中都可以观看到游戏的直播和讲解画面. ...
- Android之间互相的录屏直播 --点对点传输(tcp长连接发送h264)(一)
前言 转载请注明出处 ,来自: 暂时两篇: (1) Android之间互相的录屏直播 –点对点传输(tcp长连接发送h264)(一) http://blog.csdn.net/baidu_335462 ...
最新文章
- AI一分钟 | 小米发布小爱音箱mini,169元;天猫汽车无人贩卖机大楼落地,刷脸可购车试驾
- java 数据聚合_Java数据聚合问题请教?
- 链式向前星(一个优秀的存储图的数据结构)
- 越是牛逼的人,越是不在意面子
- C语言实现二叉树的各种遍历及求解深度
- SecureCRT中解决乱码的问题
- Initialize flexnet service failed error code 50003错误
- vue 点击a链接 实现url下载文件
- 【初等概率论】 01
- 低代码平台表单引擎技术方案选型
- 国内智能网联汽车信息安全政策汇总及思考
- 计算机网络复习训练题
- UE官网ARPG游戏学习笔记1
- python 求3位数的水仙花数_python 求3到8位数的水仙花数Pycharm实现
- 2008-09赛季NBA直播表(cctv5 广东体育)
- mt7688 ap-client 模式下连接上级路由
- 串行的blast+2.2.25本地化: blastdbcmd,makeblastdb,blastn.简介
- 概率论:先验与后验与似然
- 2017-4-14校内训练
- 部署工具(deploy-tool)开源拉!
热门文章
- Tips: Disk Performance On FreeBSD
- Good Luck in CET-4 Everybody!(sg函数模板)
- ROS ,how to subscriber hark_msgs----hark-ros
- linux est 时间,Linux中的时区设置
- mysql中如何去除重复数据_mysql数据库如何去除重复数据
- 爱情智慧:当他人生气时,如何聆听
- 概率论知识回顾(二):古典概型,几何概型
- .netcore的mysql链接字符串ConnectionString到底应该怎么设置
- 在线电子书阅读小程序,微信小程序电子书阅读,微信小程序小说阅读器毕业设计作品
- Sony DRP-RP1装微信读书