iOS手机端 屏幕共享

关于iOS手机端,在集成互通直播之后,有没有好的视频共享方案。

屏幕共享在 iOS 平台上的实现,主要通过如下步骤:

  • 使用 Broadcast Upload Extension 开启一个新的进程
  • 使用 Apple ReplayKit 框架进行屏幕录制
  • 使用 Agora SDK 进行视频流的传输

我们在 Github 提供一个开源的 Agora Screen Sharing 示例项目。你可以前往下载,参考源代码。

另外 关于白板功能,有声网的解决方案麽

有没有object-c的屏幕共享demo,你给的git链接是swift的,我们项目用的是oc语言。

需要我们自行修改 swift demo麽。从步骤上来说,有没有要注意的,例如在配置外部视频源前 是否需要 停止原先的视频流 disableVideo
我们要做的会议,在进行中途切换 视屏共享,现有的sdk是否支持这种视频流的切换。

有集成了 HereWhite 的白板方案,需要联系商务获取,商务联系方式:400 6326626

暂时没有。

支持在中途切换的。必须要用 MediaIO 方式自采集屏幕共享流,这样才可在频道内切换视频源。需要调用 setVideoSource 方法,将自定义的视频源对象设置给 AgoraRtcEngineKit。

(不能用push方式,因为push方法不支持在频道内切换视频源。)


我看demo用到的是pushExternalVideoFrame,而它是push模式下,你又说push方法不支持频道内切换视频源。
那我如何做到开会过程中,发起屏幕共享。

是的,这个开源社区版 demo 是用 push 方式来实现的。你们如果需要实现

那必须自行通过 MediaIO 方式来实现屏幕共享源的导入。

所以我在joinChannelByToken 正常开会过程中,可以调用setVideoSource 接口,来实现切换视频源咯(对应demo里的sendVideoBuffer接口,调用api —— pushExternalVideoFrame )。
我是这么理解的,对麽?

对,在频道内调用 setVideoSource 方法,将获取到的屏幕视频源对象设置给 AgoraRtcEngineKit 即可。

1、这是什么库?你自己添加的第三方库嘛?google 下这个报错吧,参考资料:
https://blog.csdn.net/watson2017/article/details/79652985


https://blog.csdn.net/weixin_34090643/article/details/88616837

2、

不需要的吧

我按照官方gitdemo做了一些梳理,但是依然无法理解 会议中途切换视频源的代码逻辑。
目前我们项目里流程是
setChannelProfile --> enableVideo -->setClientRolem -->startPreview -->joinChannelByToken
上述步骤后就通过回调拿到了各个视频源。
而如你说的,会议中图切换视频源 从摄像头改变成屏幕共享源,只需要调用setVideoSource。
而setVideoSource需要传入实现AgoraVideoSourceProtocol协议的对象,协议接口需要处理数据流,数据流从哪里来啊。


这个RPBroadcastSampleHandler 类 基本还原demo。


这个AgoraUploader 模仿swiftdemo 写的,实现了相关方法,但是不懂屏幕共享那个里面怎么个意思。

这个类是按要求实现AgoraVideoSourceProtocol 协议的类。

或者我换一种思路,我能不能在 大家开会的时候,点击屏幕共享,然后就退出频道 重新加入 用push方法去推流。

我说的调用 setVideoSource,是指将你获取到的视频源对象设置给引擎。至于视频源的获取、数据流的处理,肯定是需要你们自己实现的啊。

其实视频流和屏幕共享流的切换,已经是你们业务逻辑层需要处理的事儿了。如果你觉得用 setvideosource 的方法实现起来有难度,那么也可以用 push 的那一套方案,参考 demo 就好了,这个实现起来应该会比较简单。但是这样子的话,就需要先退出频道,再重新加入频道,再push屏幕共享流。切回摄像头流时,也需要先退出频道再重进。用户感知到的切换速度可能会慢一些。

鉴于有较多用户有关于视频流和屏幕共享流切换的疑问,我们会和相关同事反馈,看下后续是否会提供一个 setvideosource 方法实现屏幕共享的 demo,便于你们参考。

要不你看看这个对你有没有帮助?:joy:


我想在横屏界面 完整展示竖屏的录屏画面,有相关的设置api麽?我用自己的项目接入 官方的录屏demo
,如下图:

你看看这篇文档:
https://docs.agora.io/cn/Video/video_rotation_android?platform=Android
调用 setVideoEncoderConfiguration 设置合适的方向模式即可。

demo采集端默认就是 orientationMode: .adaptative,按照 官方的解释


应该是 图一和图三的效果,但是我这边 显示出来 边上没有留白,视频无压缩,被裁剪。

这是 UI 不锁定且客户端开启屏幕自动旋转时 时的效果。

1、你试试看将其设置为 FixedPortrait 模式;
2、接收端,调用 setupRemoteVideo ,将 renderMode 设置为 AgoraVideoRenderModeFit
https://docs.agora.io/cn/Video/API%20Reference/oc/Classes/AgoraRtcEngineKit.html#//api/name/setupRemoteVideo:

我在用声网git的wift demo时候,能够录屏成功,而用oc去抄袭,却不能成功,两者之间的弹窗也不同,查阅了api是同一个。



第一张图的开启方式,可以触发系统录制,状态栏出现红条,而第二张图 就没有红条。