RPBroadcastSampleHandler любой метод, не вызываемый - PullRequest
5 голосов
/ 10 января 2020

Я хочу реализовать функцию совместного использования экрана, например, 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")
        }
    }
}

Можете ли вы помочь мне выяснить, что я делаю неправильно?

Ответы [ 3 ]

1 голос
/ 10 февраля 2020

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

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

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

}

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

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

0 голосов
/ 20 января 2020

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

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

0 голосов
/ 17 января 2020

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

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

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

...