【问题标题】:Streaming screenshots over WebRTC as a video stream from iOS通过 WebRTC 流式传输屏幕截图作为来自 iOS 的视频流
【发布时间】:2016-05-20 12:35:08
【问题描述】:

我们希望将屏幕(屏幕截图)从 iPad 共享到浏览器。 目前我们截取屏幕截图并通过 WebRTC 数据通道发送,但这需要大量带宽。

每秒发送 5 帧完全压缩和缩放,仍然需要大约 1.5-2mb/s 的上传速度。

我们需要利用某种形式的视频编码,因此我们可以降低带宽要求,让 WebRTC 处理流量控制,具体取决于连接速度。

AVAssetWriter 获取图像并将它们转换为 .MOV 文件,但不允许我们从中获取流。

对我们有什么想法吗?暂时卡住了,所有想法都表示赞赏。

感谢您建议这是重复的,但这对我没有多大帮助。我已经有一个可行的解决方案,但是还不够好。

编辑:

UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.7); //Scaling is slow, but that's not the problem. Network is


[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

NSData *data = UIImageJPEGRepresentation(image, 0.0); //Compress alot, 0.0 is max, 1.0 is least


NSString *base64Content = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

然后按照文档的建议,我通过 WebRTC DataChannel 以 16Kb 块的形式发送 base64 数据。

dc.send(...)

【问题讨论】:

  • @Kevin 这个问题已经结束,而且非常笼统。答案仅显示如何将屏幕捕获到文件中。这个问题有很好的定义,并解释了他们目前如何实施解决方案(捕获屏幕并通过数据通道发送)。
  • @xdumaine 这只是一个建议。谁知道呢,也许它对 Jakkra 有帮助。标记为重复也是链接到 SO 中相关信息的便捷方式。注意它是如何添加 ?最后,这不是一个声明。
  • @Kevin 谢谢,但正如 xdumaine 所说,对我帮助不大。已经有了一个可行的解决方案,但还不够好。还是谢谢!
  • @Jakkra 你能添加你的相关代码吗?如果我们不知道您如何处理数据,我们将无法帮助您优化。你如何截取屏幕截图?你如何压缩和缩放它们?你如何包装它们?你如何打开它们?如果您可以发布这些部分的代码,我们或许可以告诉您如何改进它。

标签: ios objective-c swift webrtc screensharing


【解决方案1】:

我会使用 javascript 编码器(即 MPEG)压缩屏幕截图,然后在服务器端将此流转码为 VP8 for WebRTC。

但它可能无法在旧的 iOS 设备上正常工作,即 iPad 2010-2011 由于 CPU 资源不足,因此即使您对此流进行编码,它也可能会不稳定,不适合流畅播放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多