我正在创建一个 Android 应用程序,其中客户端可以在不使用 SIP 代理(服务器)的情况下互相呼叫。
我下载了CSipSimple,它有一个“本地”选项,本地网络中的客户端可以直接互相呼叫。
如果我连接到移动网络怎么办?如果我知道目的地的公网IP,我可以直接打电话给他吗?
如果您可以推荐满足上述要求的其他应用程序,请提及。
谢谢
要通过 VoIP 拨打电话,用户需要先注册。所以注册是强制性的。我对注册过程有一些基本了解。用户向服务器发送 REGISTER 请求,其过期标头值为 30 秒。服务器收到用户的请求后,会发送带有过期标头值 120 秒的响应。用户需要在expire header时间段结束之前或60秒之前再次注册。注册完成后,注册服务器将在位置服务器中发送用户的 uri 和位置。因此用户的位置将出现在位置服务器中。如果位置服务器有用户的位置,那么为什么用户需要在时间段结束之前再次注册。而且用户只需要在该时间段之前重新注册一次还是多次?用户 ip 将在位置服务器中存在多长时间?
我想在 linphone 中使用 opus 编解码器
但我在使用它时遇到了一些问题。如果具有 opus 编解码器知识的人可以帮助我,我将不胜感激。如何强制音频采样方案为 8000 Hz?目前,它仅使用 48000 Hz。
提前致谢
我正在开发SIP移动软电话,客户需要完全隐藏从软电话到SIP服务器的SIP消息,因为VOIP呼叫是区域性禁止的,但是使用TLS连接是不够的,因为消息标题很容易被识别为SIP消息.最常见的替代方案是什么?怎么样openvpn,IPSec隧道?
处理需要在电话上监控呼叫活动/状态的 SIP 应用程序。我的应用程序 (UA) 已在代理服务器上注册,被监控的手机也是如此。我正在使用 SUBSCRIBE/NOTIFY 消息告诉手机我想知道它的“对话”事件,一旦订阅,这工作正常。我遇到了两个问题:
我要求订阅时长为 900 秒,并且始终从手机返回 4000+ 秒的荒谬数量。
当订阅处于活动状态时,电话可能会被拔掉(不要问,但是,是的,这是一种可能性)。发生这种情况时,我不会收到有关电话不再可用的任何类型的通知。因此,我必须等待我的订阅超时,尝试更新它,处理失败并创建一个新订阅。
我意识到我可以在订阅到期之前更新我的订阅,但有没有更好的方法来解决这个问题?例如,我能否获得“存在”事件并使用它们来知道电话何时在那里?这些事件是否总是保证在手机启动时发生,即使如此,由于中间有一个代理,我是否会收到通知,或者我仍然不知道手机重新启动并且不再识别我的订阅( s)?这些“存在”更新是我可以从代理请求的吗?
任何见解都会很棒;目前,我将简单地尝试以更短的时间间隔刷新我的订阅,但我很想知道是否有更好的方法来解决它。提前致谢。
我需要在Lua脚本中设置Kamailio 3.3.1中的自定义标头.理论上我可以在配置脚本中设置一个这样的 -
append_hf("X-MyHeader: myvalue\r\n");
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何从Lua脚本中调用它,这是我首选的地方.我的CFG文件中有以下内容 -
modparam("app_lua", "load", "/usr/local/etc/kamailio/lua/kamailio.lua")
modparam("app_lua", "register", "sl")
modparam("app_lua", "register", "rr")
modparam("app_lua", "register", "tm")
Run Code Online (Sandbox Code Playgroud)
而且我的Lua脚本可以正常工作.文档似乎暗示append_hf()是textops模块的一部分,但我看不到将它暴露给Lua脚本的方法.
请任何人帮助我理解这一点,或者建议另一种方法来实现我的目标?
查看过去关于此的问题,但这些问题的答案已经应用于我的项目,但是没有调用pushRegistry()委托方法.
首先是这里的代码:
import UIKit
import PushKit
import UserNotifications
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate{
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let notificationSettings = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)
application.registerUserNotificationSettings(notificationSettings)
UNUserNotificationCenter.current().delegate = self
UIApplication.shared.registerForRemoteNotifications()
let voipRegistry = PKPushRegistry(queue: DispatchQueue.main)
voipRegistry.desiredPushTypes = Set([PKPushType.voIP])
voipRegistry.delegate = self;
return true
}
...
}
extension AppDelegate: PKPushRegistryDelegate {
func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
NSLog("voip token: \(pushCredentials.token)")
}
Run Code Online (Sandbox Code Playgroud)
已启用以下应用程序功能: - 推送通知 …
我已经使用 tokbox 进行视频通话,并按照此处的步骤实现了 VoIP 推送通知。
当脚本在后端运行时,它显示推送已成功发送,但应用程序端未收到 VoIP 推送。
当应用程序成功接收 APNs 通知时。
任何人都可以为此提出解决方案吗?
该reportNewIncomingCall完成参数不会被调用,这意味着我没有得到任何反馈,为什么我的VOIP应用程序不显示呼叫接收警报。
func reportIncomingCall(uuid: UUID, handle: String, hasVideo: Bool = false, completion: ((NSError?) -> Void)?) {
// 1.
let update = CXCallUpdate()
update.remoteHandle = CXHandle(type: .phoneNumber, value: handle)
update.hasVideo = hasVideo
// 2.
provider.reportNewIncomingCall(with: uuid, update: update) { error in
if error == nil {
// 3.
let call = Call(uuid: uuid, handle: handle)
self.callManager.add(call: call)
}
// 4.
completion?(error as? NSError)
}
}
Run Code Online (Sandbox Code Playgroud)
我尽可能准确地复制了代码。它适用于教程,但不适用于我的项目。
我想从我的应用程序中向联系人拨打 WhatsApp 电话,我已经搜索了很多,但没有找到任何答案,似乎仅限于操作系统,但这些问题有点过时了
例如:从 iOS 应用程序以编程方式进行 WhatsApp 呼叫的 URL 方案(语音呼叫 VOIP)?
以及:如何从 iOS 应用程序拨打 WhatsApp 电话?
也在 WhatsApp 文档中:https://faq.whatsapp.com/iphone/how-to-link-to-whatsapp-from-a- Different-app
我想知道 2021 年是否可能
谢谢