移动视频通话流的Qt实现

9

我对Qt移动开发完全不了解,甚至没有实际的移动开发经验,如果我问一些显而易见的问题,请原谅。

我需要开发一个移动应用程序,应该具有接收呼叫(通过互联网,而不是GSM呼叫)的功能。当接听时,它应该从我们的服务器开始流式传输音频和视频。通话只能单向进行,即流只从服务器到设备,而从设备到服务器则不行。

所以我的问题是:

  1. 在Qt中是否可能?我选择Qt是因为我熟悉它,并且我想支持桌面,安卓和iOS,也许之后还有Windows Phone。
  2. 在屏幕关闭且我的应用程序未运行时是否可能接听呼叫?我的意思是,这是移动设备,应用程序不会始终运行,只有在从服务器到设备进行通话时才会启动。我如何做到这一点? 我认为Viber,Skype和其他一些通信应用程序都可以做到这一点。

提前感谢您的帮助 :)


我认为你更或多或少是在要求重写Skype,但我很想看到一个答案。 - Jacob Krieg
不,只是来自 Skype 的一小部分。我只需要一些指导去哪里寻找和来自有经验的人的建议 :) - Davita
2
很棒的问题,我迫不及待地等待答案! - Jacob Krieg
唉,Qt是一个庞大的框架,但对于那个特定的任务,它还没有提供太多帮助。 - dtech
4个回答

6

1 - 当然可以,尽管可能不像您想象的那样容易和直接。Qt Multimedia提供了必要的类,但您必须检查它们在所需目标平台上的支持程度。

然而,Qt提供的类要么过于高级以至于除了其预期目的外无法发挥任何作用,要么过于低级,因此您必须手动实现几乎所有内容。在这方面,Qt能够生成可移植应用程序的好处可能不足以弥补使用某些平台特定库提供开箱即用的视频流的便利性。换句话说,编写单个可在两个平台上运行的Qt应用程序可能比使用Android和iOS库编写单独的Android和iOS应用程序更容易。

但是,以防您决定使用Qt,正如我先前提到的,目前只留下一个选择——自己完成大部分工作。这意味着您应该使用 QAudioRecorder 录制音频,并从给定长度的缓冲区中周期性地捕获 QCamera 的帧,压缩数据(如果安全性是一个问题,则最好加密),通过 QTcpSocket 连接将其发送到客户端,解压(和解密)数据并同步播放回来。当然可行,但如前所述,它将更加困难,因为Android和iOS库提供了几乎“开箱即用”的解决方案。或者,您可能决定使用第三方解决方案,该解决方案支持您针对的所有平台。

2 - 无论您的屏幕是打开还是关闭 - 那都是调用特定于平台的API,请求打开或保持打开一段时间同理。无论您的应用程序是否在设备上运行,这很容易 - 只需在设备上尝试与客户端进行TCP连接,如果成功,则表示客户端正在运行。如果要在应用程序未运行时接收电话,则必须实现一个全天候运行的特定于平台的服务,并在接收到呼叫时启动您的应用程序。


4

3
Qt 移动版可以帮助您设计应用程序的用户界面,但是您需要为每个要使用的平台编写一些本地代码。请注意,Qt 正在快速扩展,您可能在即将发布的 Qt 版本中不需要亲自处理特定于平台的本地代码。
是的,您可以通过创建后台服务来在应用程序关闭时接收 VoIP 电话(但据我所知,Qt 并不能为您完成此工作,您需要本地实现),这是 Skype 和 Viber 的工作方式。

1
据我所知,新的Blackberry10操作系统使用qt进行开发。有一个关于在qt中进行VoiP通话的源代码可用。我仍在搜索视频通话方面的信息。
请查看下面的链接,可能会有所帮助: 1) Blackberry Developer Blog (2) PjSip Blog (3)Download Source Code 我不知道如何使用qt语言开发Android、iOS和桌面应用程序。
但是我建议使用所有本地语言而不是qt来开发应用程序。

除了这个几乎只是“仅链接答案”之外,您的建议并没有意义——Qt是本地C++代码,速度非常快,绝对比在Android上的Java快。 - dtech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接