1

你好溢出堆栈的圣人,这里是安卓菜鸟..

我正在使用 CSipSimple 并希望以 1 秒的音频数据块将呼叫音频流式传输到另一个应用程序,以便它可以处理原始 pcm 数据。CSipSimple 中处理音频的代码是原生的,所以我更喜欢使用原生方法而不是回调 Java。我想到了几种方法:

  1. 使用音频流并让其他应用程序获取它。
  2. 将数据写入文件并让其他应用程序读取它。
  3. 在其他应用程序中调用服务 (AIDL)
  4. 使用意图。

这些是导致我进退两难的考虑因素: 流式传输看起来是自然的选择,但我找不到 Android 支持从音频流中检索原始 pcm 数据。意图机制灵活方便,但我不认为这就是它们的目的。使用文件似乎很麻烦,尽管它得到了很好的支持。最后,使用服务似乎是一个不错的选择,但它似乎不太灵活,可能需要更多的错误处理和线程管理。

你们能指出最好的选择吗?如果你还有其他的,欢迎分享。。

4

1 回答 1

0

我不知道流式音频 API 支持,所以我不会触及这个案例。至于将数据写入文件并让其他应用程序读取它 - 这是如何解决您的问题的可能情况。

至于通过 AIDL 调用服务并使用意图,我认为这不是一个好的解决方案。问题是 Binder 对可以在事务中传递的数据大小 (1MB) 有限制。

在我看来,最好的解决方案(特别是如果您使用本机工作)是使用 AshMem。这是一个专门为Android开发的共享内存驱动。因此,在您的服务中,您创建一个共享内存区域并将对它的引用传递到您的客户端应用程序中,该应用程序从该内存中读取信息。

于 2014-04-01T11:25:48.117 回答