首页 > 解决方案 > PJSIP 视频通话:没有视频……iOS 中只出现空白窗口?

问题描述

我正在尝试使用 pjsip 2.7.1 在我的 iOS 应用程序中添加视频通话功能。我已按照此链接中提到的步骤https://trac.pjsip.org/repos/wiki/Video_Users_Guide

if (pjsua_vid_win_get_info(i, &wi) == PJ_SUCCESS) {

        dispatch_async(dispatch_get_main_queue(), ^{

            UIView* videoView = (__bridge UIView *)wi.hwnd.info.ios.window;                    
                /* Resize it to fit width */
                videoView.bounds = CGRectMake(0, 0, 375,667);
                /* Center it horizontally */
                videoView.center = CGPointMake(375/2.0, 667/2.0);

                NSLog(@"*******  Native Window Called  ******** ");
}

当我进行视频通话时,一切似乎都很好,我在日志中没有发现任何问题。

2018-11-01 11:16:11.980945+0400 SwiftVoiceCallingApp[730:49599] 11:16:11.980 pjsua_media.c .....呼叫 0:更新媒体..

2018-11-01 11:16:11.981282+0400 SwiftVoiceCallingApp[730:49599] 11:16:11.981 pjsua_media.c ........媒体流 call00:0 被破坏

2018-11-01 11:16:11.981801+0400 SwiftVoiceCallingApp[730:49599] 11:16:11.981 pjsua_aud.c ......音频通道更新..

2018-11-01 11:16:11.982020+0400 SwiftVoiceCallingApp[730:49599] 11:16:11.981 strm0x14c817228 ..VAD 暂时禁用

2018-11-01 11:16:11.983647+0400 SwiftVoiceCallingApp[730:49599] 11:16:11.983 strm0x14c817228 .......编码器流开始

2018-11-01 11:16:11.994218+0400 SwiftVoiceCallingApp[730:49599] 11:16:11.994 strm0x14c817228 .......解码器流开始

2018-11-01 11:16:11.995006+0400 SwiftVoiceCallingApp[730:49599] 11:16:11.994 pjsua_media.c ......音频更新,流 #0: PCMU (sendrecv)

2018-11-01 11:16:11.995355+0400 SwiftVoiceCallingApp[730:49599] 11:16:11.995 pjsua_media.c .......媒体流 call00:1 被破坏

2018-11-01 11:16:11.995506+0400 SwiftVoiceCallingApp[730:49599] 11:16:11.995 pjsua_vid.c ......视频频道更新..

2018-11-01 11:16:12.021673+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.021 vstenc0x14c813e28 .......编码器流开始

2018-11-01 11:16:12.022508+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.022 vstdec0x14c813e28 .......解码器流开始

2018-11-01 11:16:12.023527+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.023 pjsua_vid.c ..设置 RX..

2018-11-01 11:16:12.024107+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.024 pjsua_vid.c ........创建视频窗口:type=stream,cap_id=-1,rend_id=0

2018-11-01 11:16:12.024864+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.024 vid_port.c .........打开设备 OpenGL 渲染器 [OpenGL] 进行渲染:格式=I420,大小=656x656 @22:1 fps

2018-11-01 11:16:12.153215+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.153 ios_opengl_dev.c .........iOS OpenGL ES 渲染器创建成功

2018-11-01 11:16:12.153426+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.153 vid_port.c .........设备 OpenGL 渲染器 [OpenGL] 打开:格式=B​​GRA,大小=656x656 @22:1 帧/秒

2018-11-01 11:16:12.153551+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.153 pjsua_vid.c .........为 cap_dev=-1rend_dev=0 创建的流窗口 id 0

2018-11-01 11:16:12.153590+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.153 pjsua_vid.c .........创建窗口 0

2018-11-01 11:16:12.153629+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.153 ios_opengl_dev.c ........开始 ios opengl 流

2018-11-01 11:16:12.153758+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.153 pjsua_vid.c ..设置 TX..

2018-11-01 11:16:12.153805+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.153 pjsua_vid.c ........创建视频窗口:type=preview,cap_id=2,rend_id=0

2018-11-01 11:16:12.155163+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.155 vid_port.c .........打开设备前置摄像头[AVF]进行捕获:格式=I420,大小=352x288 @15:1 fps

2018-11-01 11:16:12.175070+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.175 vid_port.c .........设备前置摄像头 [AVF] 打开:格式=I420,大小=352x288 @15:1 帧/秒

2018-11-01 11:16:12.179564+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.179 darwin_dev.m .........本机预览已初始化

2018-11-01 11:16:12.179708+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.179 pjsua_vid.c .........为 cap_dev 2 创建的预览窗口 id 1,使用内置预览!

2018-11-01 11:16:12.179743+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.179 pjsua_vid.c .........创建窗口 1

2018-11-01 11:16:12.179818+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.179 darwin_dev.m ........启动 Darwin 视频流

2018-11-01 11:16:12.560349+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.560 pjsua_media.c ......视频已更新,流 #1:H264 (sendrecv)

2018-11-01 11:16:12.560565+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.560 pjsua_aud.c .....Conf 连接:2 --> 0

2018-11-01 11:16:12.560631+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.560 Conference.c ......端口 2 (sip:1001@192.168.100.57) 传输到端口 0 (iPhone IO设备)

2018-11-01 11:16:12.560680+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.560 pjsua_aud.c .....Conf 连接:0 --> 2

2018-11-01 11:16:12.560729+0400 SwiftVoiceCallingApp[730:49599] 11:16:12.560 Conference.c ......端口 0(iPhone IO 设备)传输到端口 2(sip:1001@192.168。 100.57)

2018-11-01 11:16:12.560765+0400 SwiftVoiceCallingApp[730:49599] 窗口 ID:0

2018-11-01 11:16:12.560806+0400 SwiftVoiceCallingApp[730:49599] 媒体 ID:1

2018-11-01 11:16:12.560841+0400 SwiftVoiceCallingApp[730:49599] 1. PJSUA_CALL_MEDIA_ACTIVE

2018-11-01 11:16:12.594432+0400 SwiftVoiceCallingApp[730:49349] ******* 调用本机窗口 ********

挂断后:

2018-11-01 11:16:32.181814+0400 SwiftVoiceCallingApp[730:49599] 去电状态 ID 为:200

2018-11-01 11:16:32.187486+0400 SwiftVoiceCallingApp[730:49599] 11:16:32.187 pjsua_media.c ......调用 0:取消初始化媒体..

2018-11-01 11:16:32.203479+0400 SwiftVoiceCallingApp[730:49599] 11:16:32.203 pjsua_media.c ........媒体流 call00:0 被破坏

2018-11-01 11:16:32.204868+0400 SwiftVoiceCallingApp[730:49599] 11:16:32.204 pjsua_vid.c ........停止视频流..

2018-11-01 11:16:32.232410+0400 SwiftVoiceCallingApp[730:49599] 11:16:32.232 darwin_dev.m .........停止达尔文视频流

但是,我在 UIView 中没有找到任何视频。

 UIView* videoView = (__bridge UIView *)wi.hwnd.info.ios.window;

我刚刚将此 videoView 作为子视图添加到我的 ViewController 的视图中

 self.view.addSubView:videoView

我觉得videoView上面已经有视频流了。我还缺少什么吗?

标签: iospjsip

解决方案


添加账号pjsua_acc_add时需要开启视频自动播放和视频传输,默认是关闭的。

acc_cfg.vid_in_auto_show = PJ_TRUE;

acc_cfg.vid_out_auto_transmit = PJ_TRUE;

然后使用以下方法显示视频预览,

int vid_idx;
pjsua_vid_win_id wid;

vid_idx = pjsua_call_get_vid_stream_idx(*call_id);
if (vid_idx >= 0) {
    pjsua_call_info ci;

    pjsua_call_get_info(*call_id, &ci);
    wid = ci.media[vid_idx].stream.vid.win_in;

    if (wid >= 0) {

        pjsua_vid_win_info wi;
        pj_status_t myStatus;
        myStatus = pjsua_vid_win_get_info(wid, &wi);

        if (myStatus == PJ_SUCCESS) {
            UIView *view = (__bridge UIView *)wi.hwnd.info.ios.window;
        }

    }
}

很高兴帮助你:)


推荐阅读