如何保留来自Websocket调用Bluemix speech2text服务的音频?

问题描述:

我们有一个iOS本地应用程序客户端,它使用直接交互模式中的Websockets调用Bluemix speech2text服务,这对我们来说非常有用(非常快,非常低的延迟)。但我们确实需要保留音频流的副本。大多数音频片段很短(< 60秒)。有没有简单的方法来做到这一点?如何保留来自Websocket调用Bluemix speech2text服务的音频?

我们当然可以让客户端缓冲音频剪辑并在方便的时候将其上传到某个地方。这可能会增加内存占用空间,特别是对于较长的剪辑。如果不仔细做,影响应用性能。

或者,我们可以切换到使用HTTP接口并通过代理进行中继,然后可以为我们保留副本。这里的关注(其他重写一个完美适用于我们的应用程序)是因为主调用线程中额外的跳跃可能会增加延迟。

任何见解,将不胜感激。

-rg

+0

使用代理并在SDK中指定代理URL。您只需确保代理使用多线程语言(如Java),因为您将执行大量I/O操作。 –

+0

我看到两个主要选项:1)使用websocket代理并在将其推送到Watson STT之前捕获音频。 2)使用传输编码进行POST分块,将音频作为流发布到存储解决方案,这样您就不会遇到内存问题。这将在后台线程中完成,并且应该非常便宜。 –

+0

我在暗中希望可能有办法从Watson STT获得最后一个音频剪辑,唉,听起来不像它。简而言之,两个代理建议听起来都是合法的 - 我们会给他们一个尝试。谢谢。 –

我的两分钱....

我会切换到HTTP接口,如果你使事情更严厉的为您的用户,那么他们将不会使用你的应用程序,并会找出一个更好的方式去做事情。您不必重写应用程序 - 只需通信,然后使用某种服务器端应用程序来“缓存”这些音频流。

另一种方法是按原样保留应用程序,然后添加一个步骤,将音频文件发送到某个存储库,然后在另一个线程中将其发送到语音文本。在这种情况下,您不仅可以保存音频文件,还可以保存文本翻译。

经过一些额外的研究,我们决定使用适用于iOS的Amazon S3 TransferUtility Mobile SDK。它在单个对象中封装数据分块和多线程,甚至在iOS暂停应用程序后在后台完成传输。

http://docs.aws.amazon.com/mobile/sdkforios/developerguide/s3transferutility.html

主要优势,我们看到:

  • 现有的代码没有任何影响 - 只需添加一个电话来启动传送
  • 没有必要实现和维护一个代理服务器,它降低复杂性

Bluemix提供类似于S3的云对象存储,但我们无法找到支持anyt的iOS SDK除了一个同步的单线程解决方案外(我们最初很担心看到'Swift'的支持,但这已被证明只是巧合使用的术语)。