Как программно остановить системную трансляцию ReplayKit 2 без RPSystemBroadcastPickerView

#ios #replaykit

#iOS #replaykit

Вопрос:

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

Насколько я могу судить из документов, единственными способами остановить системную трансляцию являются:

  • Отображение RPSystemBroadcastPickerView в приложении, когда пользователь нажимает на него, они переходят в системный пользовательский интерфейс и останавливают трансляцию там.
  • Сообщите об остановке расширения широковещательной передачи с помощью других средств и вызовите finishBroadcastWithError in RPBroadcastSampleHandler , который покажет пользователю всплывающее окно с ошибкой. Похоже, что Zoom использует этот трюк.

Однако сегодня я пытался использовать функцию совместного доступа к экрану Facebook Messenger, и они каким-то образом обходят системный интерфейс (только для остановки потока). Когда я нажимаю кнопку «Стоп», общий доступ к экрану немедленно прекращается и не показывает ни системный интерфейс, ни всплывающее окно с ошибкой

Как они это делают? Мое лучшее предположение заключается в том, что они каким-то образом получают действительный RPBroadcastController объект, но я не могу понять, как.

Ответ №1:

В итоге я разобрался с этим.

По сути, вам просто нужно перейти nil к finishBroadcastWithError . Это выдаст предупреждение, потому что ошибка не обнуляется, но вы можете отключить ее с помощью этого:

 #pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
    [self finishBroadcastWithError:nil];
#pragma clang diagnostic pop
  

Комментарии:

1. Откуда вы получили действительный объект RPBroadcastController?

2. Я не использую RPBroadcastController, я не думаю, что есть способ его получить. Я вызвал finishBroadcastWithError из RPBroadcastSampleHandler

3. Как насчет swift?

4. @Atlante45, я использую RPSystemBroadcastPickerView, как закрыть системную трансляцию? Спасибо