RPBroadcastSampleHandler - любой метод не вызывается

Я хочу реализовать функцию совместного использования экрана, такую ​​как Skype (когда приложение находится в фоновом режиме, оно также будет использовать экран iPhone), и для этого я использую расширение широковещания.

Вот мой код в моем viewcontroller.swift

    import UIKit
    import ReplayKit
    @available(iOS 12.0, *)
    class ViewController: UIViewController {

        var broadcastPicker: RPSystemBroadcastPickerView?
        var broadcastSession : NSObject?
        override func viewDidLoad() {
            super.viewDidLoad()
            let kPickerFrame = CGRect(x: 100.0, y: 100.0, width: 100.0, height: 100.0)
            broadcastPicker = RPSystemBroadcastPickerView(frame: kPickerFrame)
            broadcastPicker?.backgroundColor = UIColor.green
            broadcastPicker!.preferredExtension = "com.sharescreen.Recoder"
            view.addSubview(broadcastPicker!)

            extensionContext?.loadBroadcastingApplicationInfo(completion: {
            (bundleID, displayName, appIcon) in

            })

        }
   }

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

Это мой класс расширения

    class SampleHandler: RPBroadcastSampleHandler {


    var session : VTCompressionSession?
    override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {
        // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.

    }

    override func broadcastPaused() {
        // User has requested to pause the broadcast. Samples will stop being delivered.
    }

    override func broadcastResumed() {
        // User has requested to resume the broadcast. Samples delivery will resume.
    }

    override func broadcastFinished() {
        // User has requested to finish the broadcast.
    }

    override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
        switch sampleBufferType {
        case RPSampleBufferType.video:
            // Handle video sample buffer

            break
        case RPSampleBufferType.audioApp:
            // Handle audio sample buffer for app audio
            break
        case RPSampleBufferType.audioMic:
            // Handle audio sample buffer for mic audio
            break
        @unknown default:
            // Handle other sample buffer types
            fatalError("Unknown type of sample buffer")
        }
    }
}

Не могли бы вы помочь мне понять, что я делаю неправильно?


person Govind Rakholiya    schedule 10.01.2020    source источник


Ответы (3)


Вы также можете выбрать и запустить расширение (вместо цели iOS). Затем XCode попросит вас «Выбрать приложение для запуска» со списком всех приложений на вашем устройстве. Выберите свое приложение и нажмите «запустить».

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

person ggs    schedule 20.01.2020

Я столкнулся с той же проблемой, когда переопределил метод - (void)beginRequestWithExtensionContext:(nonnull NSExtensionContext *)context { [self initScreenBroadcast]; }

Я разрешил ошибку, вызвав super этого метода.

- (void)beginRequestWithExtensionContext:(nonnull NSExtensionContext *)context {
[super beginRequestWithExtensionContext:context];
[self initScreenBroadcast];

}

Примечание. Я не использую расширение широковещательного пользовательского интерфейса с расширением широковещательной загрузки, поэтому у моего расширения нет пользовательского интерфейса, из-за чего метод broadcastStartedWithSetupInfo никогда не вызывался. Это вызывается, когда setupUI завершает работу. Следовательно, мне пришлось получить триггер, переопределив beginRequestWithExtensionContext

Надеюсь, это поможет!

person SaadurRehman    schedule 10.02.2020

Вам необходимо добавить расширение вручную из XCode- ›Debug-› Attach to Process by PID or Name. После того, как вы нажмете кнопку Выбрать расширение оттуда, у вас будет отладчик расширения.

Я надеюсь, что это поможет вам.

person kutay    schedule 17.01.2020