OpenTok iOS SDK 2.18.1 屏幕共享质量问题

如何解决OpenTok iOS SDK 2.18.1 屏幕共享质量问题

我们正在使用 ReplayKit 获取 CMSSampleBuffers 并将它们转发给 OTVideoCaptureConsumer,在将 ReplayKit 缓冲区大小调整为 1280x720 或 1024x768 缓冲区后,我们获得了屏幕共享提要,但它总是变得模糊。

在确保我们控制发送到 videoCaptureConsumer 的 FPS 以限制带宽后,我们仍然无法从订阅设备上的媒体路由器接收到高质量的图像。

我们验证发送到 OpenTok OTVideoCaptureConsumer 的图像是清晰的图像,但在订阅者端生成的流总是很快变得模糊

问题:有人想出一种使用 OpenTok iOS SDK 获得干净的 OTPublisher 屏幕共享提要的方法吗?

尝试:

  • 发送帧的不同方式:

我尝试使用 CVPixelBuffer 和 OTVideoFrame 发送图像。当没有从相机接收到帧时,sample suggested by OpenTok support 对相机图像使用 CVPixelBuffer 方法,对黑色图像使用 OTVideoFrame 方法。但无论哪种方式,结果流都会变得模糊

  • 不同的格式和尺寸:

我没有找到任何提及 iOS SDK 预期图像规格的文档。有什么东西可以帮助我们了解支持的图像格式、数据大小限制和支持的分辨率吗?

我尝试从我们的应用程序向 videoCaptureConsumer 发送 ReplayKit 缓冲区,例如:9.7 Pro iPad 的原生屏幕分辨率为 1920x1440,这似乎被 iOS SDK 接受(返回成功),但只呈现黑色订阅者端的屏幕。

我只是没有其他想法

  • 当 ReplayKit 停止发送帧时重传最后一帧:

我在 Twilio ReplayKit 示例中看到了这种行为,但是当 ReplayKit 不发送任何帧时,我们是否应该重新发送最后一帧?如果没问题,或者如果我们这样做,媒体路由器是否会正常运行,我没有看到任何文档

PS:我找到的一些参考资料,以防对其他人有帮助

我在 OpenTok's support suggested sample 中看到的所有内容是:

  • iOS AVCaptureSession 支持的预设,然后转发到 OTVideoCapturer (Custom-Video-Driver/Lets-Build-OTPublisher/Single-Cam-Capturer/TBExampleVideoCapture.m#L255)

  • 黑帧的硬编码大小(Custom-Video-Driver/Lets-Build-OTPublisher/Single-Cam-Capturer/TBExampleVideoCapture.m#L552)

  • 未处理的 CMSampleBuffer 直接转发给 videoCaptureConsumer (Custom-Video-Driver/Lets-Build-OTPublisher/Single-Cam-Capturer/TBExampleVideoCapture.m#L711)

来自 OpenTok 的文档和论坛帖子:

我还发现了一些有助于理解可能是什么问题的其他帖子:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?