【问题标题】:iOS send video (screen sharing) packets on UDP connection in backgroundiOS 在后台通过 UDP 连接发送视频(屏幕共享)数据包
【发布时间】:2019-01-11 05:50:37
【问题描述】:

我正在使用广播上传扩展开发具有屏幕共享功能的 iOS 应用程序。 我可以在前台模式下使用 UDP 连接发送视频数据包以进行屏幕共享,但是当应用程序进入后台模式时,没有视频数据包被传送到媒体服务器。虽然音频数据包正在传递。我已打开音频 Airplay 和 Voip 背景模式。

还使用以下代码将帧添加到捕获器中。

RTCCVPixelBuffer *rtcPixelBuffer = [[RTCCVPixelBuffer alloc] 
initWithPixelBuffer:pixelBuffer];
int64_t timeStampNs =
CMTimeGetSeconds(CMSampleBufferGetPresentationTimeStamp(sampleBuffer)) 
* NSEC_PER_SEC;
RTCVideoFrame *videoFrame = [[RTCVideoFrame alloc] 
initWithBuffer:rtcPixelBuffer rotation:RTCVideoRotation_0                                                     
timeStampNs:timeStampNs];

//NSLog(@"videoframe %@",videoFrame.buffer.description);
[_videoSource capturer:_capturer didCaptureVideoFrame:videoFrame];

即使在后台模式下,我也可以看到上述帧被添加到捕获器中,但在服务器上看不到任何内容。

注意 - 所有向服务器发送数据的代码都写在包含应用程序而不是扩展程序中。

【问题讨论】:

  • 要让应用程序在后台运行,仅仅启用后台模式是不够的,您需要添加额外的代码让应用程序知道该代码应该在后台模式下运行
  • @VarunNaharia 我应该写什么代码让应用程序知道我想在后台模式下从套接字写入?
  • 尝试谷歌搜索“ios background execution

标签: ios sockets background webrtc replaykit


【解决方案1】:

由于安全策略苹果不允许在后台运行,Apple 的 replayKit 只能在前台运行。 在您的情况下,当应用程序进入后台时,不会生成任何视频缓冲区。你可以通过调试来检查

覆盖 func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, 与 sampleBufferType:RPSampleBufferType) {

}

【讨论】:

  • 这不是真的,有几个应用程序可以持续录制 iPhone/iPad 屏幕,无论录制应用程序在前台还是后台。你只需要创建一个广播扩展(也就是 ReplayKit)。
  • 是的,现在你可以使用广播扩展来做到这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多