Martini

随着互联网技术的普及,网络视频通话已经成为人们交流的一种重要方式。
优质、可靠的互联网通信,也逐渐成为具有普遍性的需求。

目前,在国内外相关技术领域的市场中,已有 Skype,FaceTime,微信视频 / 语音通话等多种成熟的解决方案。然而,它们都不可避免地具有中心化、商业性等特征,对于需要具有定制性、保密性和隐私性的企业级应用,很难满足要求。
这种情况下,一种开源的解决方案就变得有必要。


● Based on Linphone

Linphone 是一个自由的 IP 语音电话,SIP 客户端和服务开源项目。
它可用于通过任何 VoIP 软交换机或 IP-PBX 进行音频、视频呼叫。 
Linphone 还提供了交换即时消息的可能性。
它有一个基于 GTK + for GUI 的简单多语言界面,也可以在 Linux 上作为控制台模式应用程序运行。

而本次课程设计,我们将基于 Linphone 封装好的 SDK 做应用层的客制化,开发 Martini,
在网络音视频通讯软件领域开发进行初次接触和尝试。​​​​​​​
需求分析阶段汇报展示


● 100% Kotlin, and More

目前,Linphone 在各个平台上已经有官方实现的应用,经测试可用。
这些应用的内核均为 liblinphone SDK。
在这个 SDK 中,包含了必要的通讯协议及主要逻辑。
而本次任务中,我们将通过研读 liblinphone SDK 的源码与文档,
结合官方 Linphone 应用的实现方式,
在其上层重新封装一个包含了我们团队的设计语言和交互思想体系的 Android 应用。

我们企图通过这一层开发,
完成一个简洁、美观、易用,
尤其是对初次使用者友好的交互与界面实现。

在完成该 Android 骨干架构与基本功能实现之外,
我们还计划通过部署 Jenkins 实现持续集成,结合我们单独开发的 Web 发布平台,
实现软件的编译、测试和发布等流程全自动化。

此外,我们还计划准备针对 Kotlin 的集中引导式讲解,
整个 Android 应用也将实现 100% 通过 Kotlin 编写。





● Keep Trying

在设计软件架构时,
身为软件架构师的成员 Huimin Wang 先后设想了五种方案,
经历了四次失败。

我们设想过将 Linphone“换壳”,
从 Linphone 的 SDK 上直接搭建,
或是使用第三方的原型协助。
最后,Huimin 决定自行实现一个中间件,
并在其上搭建我们的应用界面的形式。











● On The Same Boat

三周工作的进程绝非一帆风顺。
从一开始架构选择的不断尝试和失败,到最后视频打通的集中开发,
我们一直经历着遇到问题、解决问题、新问题出现的循环往复之过程。

在整个课程设计的全程中,组内氛围融洽、分工合理,
并及时交流了过程中出现的各类事项。




使用 Teambition 进行协作管理


借助 twt-mobile-static 平台进行公开发布




● ​​​​​​​One More Thing...

在最终的演示之外,
我们还带来了一次技术分享。

在 Maritini 中,我们在拨号盘界面中
使用了 RecyclerView-DSL。
这是一个由天外天工作室前成员开发的框架。
技术分享中,
我们带来了更多关于框架使用和领域特定语言内容的思考。






在完成基本功能的前提下,我们还积极地学习、探索新技术,开发的范围从 Android App 本身向外拓展,完成了使用 Jenkins 持续部署、Web 发布平台等进阶任务,并最终成功上架 Google Play。

在新学期开始后的课余时间,我们组内还尝试部署了 Sonar,实现了代码质量检查的自动化。我们基于 Sonar 完成了一轮工程质量与健壮性的自检与改进。此外,我们还计划了 Git 仓库拓出 dev 分支,减少主分支推送频率等优化措施。在项目的最后,Martini 将遵照 Linphone 的指令,以 GPL 协议开源。

总而言之,课程设计的结束并不意味着项目的中止,我们学习的步伐也不会停步。





Huimin Wang / Jingtao Zhou / Steve Huang / Yinyi Zhang / Yuxuan Wang
Copyright © The Bartenders 2018


Martini App
1
7
1
Published:

Martini App

An Android IP Phone app based on Linphone.
1
7
1
Published:

Creative Fields