首页 > 解决方案 > 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")
        }
    }
}

你能帮我找出我做错了什么吗?

标签: iosswiftios13swift5replaykit

解决方案


您还可以选择并运行扩展程序(而不是 iOS 目标)。然后 XCode 将询问您“选择要运行的应用程序”并列出您设备上的所有应用程序。选择您的应用程序,然后单击“运行”。

然后您的应用程序将启动,但在您长按控制视图中的录制/广播按钮,选择您的扩展程序并开始广播后,您的扩展程序将被调试(断点将应用并且打印将显示在输出控制台中)。


推荐阅读