#ios #replaykit
#iOS #replaykit
Вопрос:
Я пытаюсь реализовать расширение для широковещательной загрузки, и я хочу, чтобы пользователь мог нажать кнопку в моем приложении, чтобы остановить трансляцию.
Насколько я могу судить из документов, единственными способами остановить системную трансляцию являются:
- Отображение
RPSystemBroadcastPickerView
в приложении, когда пользователь нажимает на него, они переходят в системный пользовательский интерфейс и останавливают трансляцию там. - Сообщите об остановке расширения широковещательной передачи с помощью других средств и вызовите
finishBroadcastWithError
inRPBroadcastSampleHandler
, который покажет пользователю всплывающее окно с ошибкой. Похоже, что 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, как закрыть системную трансляцию? Спасибо