iOS отправляет пакеты видео (совместное использование экрана) по соединению UDP в фоновом режиме

Я работаю над приложением iOS с функцией совместного использования экрана, используя расширение Broadcast Upload. Я могу отправлять видеопакеты, используя соединение UDP для совместного использования экрана в режиме переднего плана, но когда приложение переходит в фоновый режим, видеопакеты не доставляются на медиасервер. Хотя аудио пакеты доставляются. Я включил фоновые режимы Audio 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];

Я вижу, что указанные выше кадры добавляются в программу захвата даже в фоновом режиме, но ничего не вижу на сервере.

Примечание. Весь код для отправки данных на сервер написан в содержащем приложении, а не в расширении.


person utkarsh agarwal    schedule 11.01.2019    source источник
comment
Чтобы заставить приложение работать в фоновом режиме, недостаточно просто включить фоновый режим, вы должны добавить дополнительный код, чтобы приложение знало, что этот код должен работать в фоновом режиме.   -  person Varun Naharia    schedule 11.01.2019
comment
@VarunNaharia какой код я должен написать, чтобы приложение знало, что я хочу писать из сокета в фоновом режиме?   -  person utkarsh agarwal    schedule 11.01.2019
comment
попробуйте поискать в Google фоновое выполнение iOS   -  person Sam Mason    schedule 11.01.2019


Ответы (1)


ReplayKit от Apple работает только на переднем плане из-за политики безопасности, которую Apple не разрешает использовать в фоновом режиме. в вашем случае, когда приложение переходит в фоновый режим, не будет генерироваться видеобуфер. вы можете проверить, отладив в

переопределить func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {

}

person Sumit Meena    schedule 10.02.2019
comment
Это неправда, есть несколько приложений, которые могут постоянно записывать экран iPhone/iPad, независимо от того, находится ли записывающее приложение на переднем или заднем плане. Вам просто нужно создать широковещательное расширение (это тоже ReplayKit). - person iSpain17; 11.09.2019
comment
да, теперь вы можете сделать это, используя широковещательное расширение - person Sumit Meena; 11.09.2019