在 PJSIP 中配置单向视频流以进行门铃视频通话

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

我正在使用 PJSIP 开发一个视频通话应用程序,其目标是从门铃摄像头接收视频源,而不从我端发回视频。这种设置旨在确保隐私,同时允许用户通过门铃的摄像头看到谁在门口。但是,我在正确配置媒体流方向时遇到了问题。

这是我用来接听来电的代码片段,目的是设置仅解码(接收)视频的呼叫:

var msgData = pjsua_msg_data()
pjsua_msg_data_init(&msgData)
var opt = pjsua_call_setting()
pjsua_call_setting_default(&opt)
opt.aud_cnt = 1
opt.vid_cnt = 1
opt.flag = PJSUA_CALL_SET_MEDIA_DIR.rawValue
opt.media_dir.1 = PJMEDIA_DIR_DECODING
pjsua_call_answer2(id, &opt, code, nil, &msgData)

在此配置中,我预计仅接收来自门铃的视频(将 opt.media_dir.1 设置为 PJMEDIA_DIR_DECODING)。然而,这似乎并没有像预期的那样工作——我无法从门铃上观看视频。

我还尝试将 opt.media_dir.1 设置为 PJMEDIA_DIR_ENCODING,这在逻辑上对于我的用例来说是不正确的,因为它意味着发送视频。正如预期的那样,这允许门铃从我这边接收视频,但我仍然看不到门铃的视频,而且当我没有对 media_dir 设置任何内容时,我能够看到门铃,但同时我还发送视频。

我应该如何针对我的特定用例在 PJSIP 中正确配置媒体方向?

是否需要额外的步骤或配置才能实现仅显示门铃视频的单向视频流?

尽管正确配置了媒体方向,是否还有其他因素(例如防火墙或 NAT 设置)可能会阻止接收视频流?

任何有关如何解决此问题的见解或指导将不胜感激。我希望确保应用程序能够可靠地接收来自门铃的视频而不发送回视频,从而维护用户隐私。

提前感谢您的帮助!

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

啊,我明白了!以下是关于在 PJSIP 中设置单向视频流(考虑 NAT 挑战)的 Stack Overflow 问题的简洁且格式化的答案:

您在 PJSIP 中设置单向视频流(您打算接收视频而不发送任何视频)时遇到的问题可能与您的设置中处理 NAT(网络地址转换)的方式有关。使用私有 IP 地址 (c=IN IP4 192.1......) 的本地 SDP 应答表明,当位于 NAT 之后时,PJSIP 根据传入数据包的来源确定将数据包发送到何处。如果不发送数据包,PJSIP 无法确定视频流的正确目的地,导致视频数据包无法到达。

要解决此问题,您有两个主要选择:

1、启用 STUN(NAT 会话遍历实用程序):这允许您的媒体传输在 SDP 中发布其映射的 IP 地址。此方法的有效性可能会有所不同,具体取决于您正在处理的 NAT 类型,因此它可能适用于您的具体情况,也可能不适用于您的具体情况。

2、启用 NAT 打洞保活:此方法涉及定期发送空 RTP 数据包以维护视频流的 NAT 映射。这特别有用,因为当媒体是双向的时(即,您在发送视频的同时可以看到视频),这表明维护数据包的活动路由可以解决问题。要实现 NAT 打洞,您需要:

编译时:通过在 config_site.h 中将宏 PJMEDIA_STREAM_ENABLE_KA 设置为 1,在媒体流中启用保持活动状态。该宏对于指示 PJSIP 对流媒体使用保持活动机制至关重要。 运行时:使用 PJSUA 的 pjsua_acc_config.use_stream_ka 或 PJSUA2 的 AccountConfig.mediaConfig.streamKaEnabled 选项激活保持活动状态。此运行时设置可确保在应用程序运行期间主动使用保持活动机制。 通过采用这些策略之一,您应该能够将应用程序配置为可靠地接收来自门铃摄像头的视频,而无需发回视频,从而维护用户隐私。使用 STUN 或 keep-alive 机制的选择取决于您的网络环境和 NAT 的具体行为。

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