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相关推荐

  1. iOS录屏直播(一)初识ReplayKit

    Morris_2019.05.08 本篇主要功能: 认识ReplayKit框架 RPScreenRecorder实现在应用内录屏功能 RPPreviewViewController查看录屏内容 RPB ...

  2. iOS录屏直播(四)主App和宿主App数据共享,通信功能实现

    文章目录 CFNotificationCenterGetDarwinNotifyCenter 发送通知 接收通知 注意事项 遗留问题 补充 Morris_ 2019.06.17 上一篇总结了一下App ...

  3. iOS录屏直播(三)AppGroup

    Morris_2019.06.14 AppGroup是什么 App Groups Entitlement AppGroup是一个App组,里面可以有若干个App,AppGroup组是个虚无的存在,若干 ...

  4. iOS rtmp 摄像头/录屏直播以及观看

    之前讲过如何在centos上使用nginx搭建rtmp服务器(链接),本文介绍一下iOS 端如何通过rtmp录屏直播以及观看,完整的工程代码地址(https://github.com/zxm006/R ...

  5. Android实现录屏直播(二)需求才是硬道理之产品功能调研

    请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/54254244 Android实现录 ...

  6. android 录屏自动运行,Android实现录屏直播+远程控制(二)

    前言 前面Android实现录屏直播+远程控制(一)的文章说到Android5.0的录屏直播实现方式,今天来说说实现录屏直播的另外一种方案 1 启动一个后台服务实现录屏 1.服务的创建这边就不在赘述了 ...

  7. 手游录屏直播技术详解 | 直播 SDK 性能优化实践

    直播无疑是 2016 年的大热话题,七牛云在 6 月底发布了实时流网络 LiveNet 和直播云解决方案后,我们用<直播技术详解>系列文章系统地介绍了直播各个环节的关键技术,帮助视频直播创 ...

  8. 如何做电脑游戏桌面录屏直播实现手机直接观看

    原创教程 ( 转载请注明出处 ) 2017-6-26,今天来做一下是电脑游戏桌面录屏直播的教程,就是把桌面的游戏直播出去,加上话筒做讲解.最终实现在电脑.手机.微信中都可以观看到游戏的直播和讲解画面. ...

  9. Android之间互相的录屏直播 --点对点传输(tcp长连接发送h264)(一)

    前言 转载请注明出处 ,来自: 暂时两篇: (1) Android之间互相的录屏直播 –点对点传输(tcp长连接发送h264)(一) http://blog.csdn.net/baidu_335462 ...

最新文章

  1. AI一分钟 | 小米发布小爱音箱mini,169元;天猫汽车无人贩卖机大楼落地,刷脸可购车试驾
  2. java 数据聚合_Java数据聚合问题请教?
  3. 链式向前星(一个优秀的存储图的数据结构)
  4. 越是牛逼的人,越是不在意面子
  5. C语言实现二叉树的各种遍历及求解深度
  6. SecureCRT中解决乱码的问题
  7. Initialize flexnet service failed error code 50003错误
  8. vue 点击a链接 实现url下载文件
  9. 【初等概率论】 01
  10. 低代码平台表单引擎技术方案选型
  11. 国内智能网联汽车信息安全政策汇总及思考
  12. 计算机网络复习训练题
  13. UE官网ARPG游戏学习笔记1
  14. python 求3位数的水仙花数_python 求3到8位数的水仙花数Pycharm实现
  15. 2008-09赛季NBA直播表(cctv5 广东体育)
  16. mt7688 ap-client 模式下连接上级路由
  17. 串行的blast+2.2.25本地化: blastdbcmd,makeblastdb,blastn.简介
  18. 概率论:先验与后验与似然
  19. 2017-4-14校内训练
  20. 部署工具(deploy-tool)开源拉!

热门文章

  1. Tips: Disk Performance On FreeBSD
  2. Good Luck in CET-4 Everybody!(sg函数模板)
  3. ROS ,how to subscriber hark_msgs----hark-ros
  4. linux est 时间,Linux中的时区设置
  5. mysql中如何去除重复数据_mysql数据库如何去除重复数据
  6. 爱情智慧:当他人生气时,如何聆听
  7. 概率论知识回顾(二):古典概型,几何概型
  8. .netcore的mysql链接字符串ConnectionString到底应该怎么设置
  9. 在线电子书阅读小程序,微信小程序电子书阅读,微信小程序小说阅读器毕业设计作品
  10. Sony DRP-RP1装微信读书