关于音视频:VoIP-Push-在海外音视频业务中的应用

13次阅读

共计 3819 个字符,预计需要花费 10 分钟才能阅读完成。

VoIP(Voice over Internet Protocol)也被称为 IP 电话,通过 IP 协定传输语音通信和多媒体会话,是一种性价比高且体系架构凋谢的技术计划,能够被利用在相亲、面试、征询等多种场景,提供优异的通信体验。而 VoIP Push 是 VoIP 利用实现流程上十分重要的一环。关注【融云寰球互联网通信云】理解更多

在音视频业务出海过程中,iOS 端 PushKit 与 CallKit 框架配合,提供与手机零碎一样的复电体验,间接在锁屏界面显示,并且通话过程中不会被其余利用打断。(因为受苹果审核政策的影响,CallKit 在边疆不可用。)

6 月 23 日的融云 RTC · 进阶实战高手课上,融云音视频研发工程师从 VoIP 概念、VoIP Push 在不同平台的实现过程等方面介绍了在 VoIP Push 海内我的项目中的利用,并重点分享了其在 iOS 端的实际。后盾回复【VoIP】获取残缺课件


什么是 VoIP?

传统的语音通信 应用的是基于电路替换的 PSTN,特点是间断门路采纳物理连贯,电路接通后,呈现在数据终端用户背后的电路就如同专线一样,交换机控制电路不会去查看传输的数据包中的任何内容,为用户提供了一条齐全通明的通信通路。

(传统通信采纳电路替换技术,图源:Nextiva)

电路替换技术为用户的每一个呼叫建设一个连贯技术,而连贯一旦建设,就始终被一对用户固定占用,无论他们是否通信,都不能被其余用户共享。当通信较少时,信息传输的理论效率升高,且因为其通信时电路被用户独占,通信老本较高。

VoIP(Voice over Internet Protocol,也称为 IP 电话)是一种通过 Internet 网络协议传送语音通信和多媒体会话的技术。

VoIP 技术采纳了分组替换技术作为通信平台。

(VoIP 采纳分组替换技术,图源:Nextiva)

分组替换技术采纳了报文交换的“存储 - 转发”形式,但不像报文交换机那样以报文作为单位进行替换,而是把报文截成较短的、对立格局的分组来进行替换和传输。每一个分组进入交换机后,交换机根据分组中的地址信息抉择该分组的传输门路,并将其沿着选定的门路传输给下一个交换机或用户终端。

同电路交换机技术相比拟,分组替换因为不存在专用链路,其通信通路的利用率很高。能够说,IP 骨干网中的每条线路都在为所有用户提供传输服务。

运营商在架设 PSTN 的终端时有很大的硬件设施上的老本投入,如通信电缆、数据交换设施、各节点设施、施工老本、人工成本、保护老本等。而 VoIP 全是基于 Internet 上的传输,充分利用了用户的宽带资源,性价比更高。加上专门的终端接入设施及相应的平台技术对语音的弱小解决性能,VoIP 的通话质量能达到传统的 IP 电话的通话质量。

综上所述,VoIP 与传统电话相比劣势在于:
① 可能更加无效地应用网络资源
② 性价比高
③ IP 电话网继承了计算机网络的智能个性,能够灵便地实现各种增值业务的开发
④ 凋谢的体系结构


VoIP Push 在不同平台的实现

VoIP Push 是 VoIP 利用实现流程上十分重要的一环。而它的实现在不同平台各有特点。

PC 端

PC 端目前与挪动的差别是在于 PC 端的 App 始终处于实时在线状态。能够通过融云 IMLib 下发复电进行响应和展现。

(PC 端呼叫流程)

与 PC 端不同,挪动端用户能够“杀死”App,就须要一种音讯触达的伎俩。

Android 端

这里就须要用到 FCM 服务了。
FCM (Firebase Cloud Messaging) 是一种基于 Google Play Services 构建的跨平台服务,用于解决服务器应用程序和挪动客户端利用之间的音讯的发送、路由和排队。

如下图,FCM 充当音讯发件人和客户端之间的中介。客户端利用启用 FCM,可在设施上运行。

(FCM 服务流程)

具体到融云 CallLib 呼叫解决方案中,流程如下图所示:

(融云 CallLib 呼叫流程)

FCM 服务收到一个复电的 Push 音讯,而后 App 会被零碎拉活。App 拉起后会去链接 IM 服务,IM 服务链接胜利后,客户端便会收到一条复电的信令。

融云 CallLib 会对来电信令进行解决,而后调用零碎的 Telecom 框架创立一个复电,App 须要注册一个 ConnectionService 用来接管零碎创立复电的回调。

而后,ConnectionService 会真正创立一个 Connection 对象来解决一个新的复电,在 Connection 中咱们能够拉起业务模块提供的呼入页面进行展现。

iOS 端

iOS 端的独特之处在于,苹果引入了反对 VoIP 推送的 PushKit,且必须配合苹果 CallKit 框架应用,否则 iOS 零碎将在收到 VoIP 推送后临时“杀掉”App 过程。

CallKit 提供了对立的语音通话 UI 及与该 UI 交互的 API,让 App 通话能够像 iOS 原生电话复电一样 展示全屏复电及接听界面;VoIP App 与零碎 Call 有着雷同的通话优先级别,而且在通讯录中的拨号记录、Siri 唤起、勿扰模式等都能够失去很好的反对。

上面的比照图能够更清晰地看出其体验劣势,左侧是通过 一般推送 收到的复电揭示,用户想要接听电话须要点击告诉并解锁屏幕进入到利用内。

右侧是通过 CallKit 实现复电响应,用户能够在锁屏或非锁屏状态下间接接听或回绝复电,取得与零碎电话统一的体验。


VoIP Push 和一般推送都是基于 APNs 的。

具体流程上,用户服务器决定要向用户发送哪些告诉,以及何时发送。

当须要发送告诉时,用户服务器生成一个申请,其中蕴含告诉数据和用户设施的惟一标识符。而后将申请转发给 APNs,后者负责将告诉传送到用户的设施。收到告诉后,用户设施上的操作系统会解决任何用户交互并将告诉传递给应用程序。

(VoIP Push 流程)

在以前,VoIP 利用必须与服务器放弃长久的网络连接能力接管复电和其余数据。

这意味着须要编写简单的代码,在应用程序和服务器之间来回发送定期音讯,以放弃连贯处于活动状态,即便在应用程序未应用时也是如此。这种技术会导致设施频繁被唤醒,浪费资源。这也意味着如果用户退出 VoIP 利用,将无奈再接管来自服务器的呼叫。

而应用 PushKit 框架——容许应用程序从近程服务器接管推送。每当收到推送时,应用程序就会被唤醒。

PushKit 具备以下个性:
① 仅当 VoIP 推送产生时设施才会被唤醒,节省能源。
② 与规范推送告诉不同,VoIP 推送间接进入到 App 外部进行解决。
③ VoIP 推送被认为是高优先级告诉,并且会立刻发送。
④ VoIP 推送能够蕴含比规范推送更多的数据内容,用于解决业务逻辑。
⑤ App 在收到 VoIP 推送时未运行,则会主动拉活 App。须要留神的是,咱们要正当应用 PushKit,否则 PushKit 会被零碎断定为非法激活,导致 PushKit 无奈应用。
⑥ 即便 App 在后盾运行,App 也有肯定工夫来解决推送。

与其搭配应用的 CallKit 具备以下个性:
① 容许用户在 VoIP App 中通过链接间接在苹果电话中发动呼叫。
② 零碎性能集成,例如勿打模式、静音或振动模式等。
③ 呼叫阻止性能,首先将发送者的利用内号码与接收者的 iPhone 用户阻止列表匹配。容许应用程序插入一个自定义的被阻止号码列表。
④ 辨认复电者,从保留的联系人列表中显示他的姓名。此性能在社交网络中特地有用,昵称与通讯录中的名称能够是不同的。


PushKit+CallKit 的实现

首先要在 Apple 开发者核心创立 VoIP 证书,其次要在 XCode 中配置 VoIP 性能失效。

代码中,咱们首先要注册并实现 PushKit 相干代码,包含通过 PushRegistry 初始化,注册 VoIP Push Token 并上传到服务端和响应复电等。

CallKit 的架构图


如上 CallKit 的架构图所示,VoIP 应用程序和其余零碎服务,比方蓝牙、Siri、电话等都蕴含 CallKit,能够通过与零碎通信相互响应激活。

在实现 CallKit 的应用程序中,须要引入两个 CallKit 外围类。

CXProvider 类和 CXCallController 类。

CXProvider:应用程序将用于让零碎晓得任何传入 / 传出呼叫。

CXCallController:应用程序将用于让零碎理解任何本地用户操作。
CXProviderConfiguration 提供了一些咱们能够自定义的内容,包含自定义 名称、视频性能反对、利用图标 以及 铃声

接听电话流程


① 当用户接听电话时,零碎会向 CXProvider 发送一个 CXAnswerCallAction 实例。
② 利用通过实现 CXProviderDelegate 办法来响应用户的接听行为。

复电呼入流程


① 为了响应复电,利用通过结构一个 CXCallUpdate 并应用 CXProvider 将其发送到 iOS 零碎。
② iOS 零碎将此作为一个呼入,同步到其余所有零碎服务。

个别的音视频我的项目,通常都须要对 AVAudioSession 进行配置。在什么机会去配置 AVAudioSession 呢?

如上图,这是当用户接听电话后,零碎调用 CXProviderDelegate 提供的一个响应接听办法。在该办法的实现中,配置一个 AVAudioSession 并在实现时调用 Action 对象上的 Fulfill 办法。

完结电话流程


① 首先用户在 UI 上点击了通话完结,Callkit 中获取对通话的援用。
② 因为通话行将完结,所以要进行解决通话的音频。
③ 调用 End 办法扭转状态,容许其余零碎服务对新状态做出反馈。
④ 此时,调用 Fullfill 标记为已实现,零碎会将其完结掉。

正文完
 0