Swift PJ-SIP 集成:在 UIView 中显示视频流时出现问题

问题描述 投票:0回答:1

我正在使用 PJ-SIP 开发基于 Swift 的 VoIP 应用程序,并面临在 UIView 中显示视频流的问题。我已经设置了 PJSIPManager 来处理 SIP 功能,并且我正在尝试将视频流嵌入到我的 UIViewController 中的 UIView 中。但是,视频没有按预期显示。

代码设置: 在我的 PJSIPManager 中,我有以下配置:

struct PJSIPManager {
    private init() {
        var cfg = pjsua_config()
        pjsua_config_default(&cfg)
        cfg.cb.on_call_media_state = on_call_media_state
    }

    var vid_win: UIView? = nil

    private func on_call_media_state(pjsipID: pjsua_call_id) {
        // ... [media state handling code] ...
        if (media[Int(mi)].type == PJMEDIA_TYPE_VIDEO) {
            PJSIPManager.instance?.isVideoCall = true
            let wid = media[Int(mi)].stream.vid.win_in;
            var wi = pjsua_vid_win_info();
            if (pjsua_vid_win_get_info(wid, &wi) == PJ_SUCCESS.rawValue) {
                PJSIPManager.instance?.vid_win = Unmanaged<UIView>.fromOpaque(wi.hwnd.info.ios.window).takeUnretainedValue();
            }
        }
    }
}

在我的 UIViewController 中,我正在执行以下操作:

override func viewDidLoad() {
    super.viewDidLoad()
         DispatchQueue.main.async {
            if let isVideoCall = PJSIPManager.getInstance()?.isVideoCall ,isVideoCall{
                if PJSIPManager.getInstance()?.vid_win != nil {
                    self.view.addSubview(PJSIPManager.getInstance()!.vid_win!)
                }
                PJSIPManager.getInstance()!.vid_win!.layer.borderColor = UIColor.red.cgColor
                PJSIPManager.getInstance()!.vid_win!.layer.borderWidth = 2.0
                PJSIPManager.instance?.vid_win?.isHidden = false
                PJSIPManager.getInstance()!.vid_win!.translatesAutoresizingMaskIntoConstraints = false
                NSLayoutConstraint.activate([
                    PJSIPManager.getInstance()!.vid_win!.centerXAnchor.constraint(equalTo:self.view.centerXAnchor),
                    PJSIPManager.getInstance()!.vid_win!.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
                    PJSIPManager.getInstance()!.vid_win!.widthAnchor.constraint(equalToConstant: 100),
                    PJSIPManager.getInstance()!.vid_win!.heightAnchor.constraint(equalToConstant: 100)
                ])
            }
        }   
    }
}

使用此设置,我无法看到视频流。

问题:

当我直接从PJSIPManager使用vid_win时,视频无法播放。但是如果我为视图设置背景颜色,当呼叫是视频呼叫时,我可以看到带有背景颜色的视图,表明该视图是添加到视图层次结构,但它不渲染视频流。

如何确保vid_win正确接收并显示视频流? PJ-SIP 中对于在 UIView 中嵌入视频有什么具体注意事项吗?

我确保 isVideoCall 为 true 并且 PJSIPManager.getInstance()?.vid_win 不为零

ios swift uikit video-streaming pjsip
1个回答
0
投票

问题是我打电话了

acc_cfg.vid_out_auto_transmit = pj_bool_t(PJ_TRUE.rawValue)
acc_cfg.vid_in_auto_show = pj_bool_t(PJ_TRUE.rawValue)

之前

pjsua_acc_config_default(&acc_cfg);

而不是相反

© www.soinside.com 2019 - 2024. All rights reserved.