2017-09-03 47 views
1

我們有一個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獲得最後一個音頻剪輯,唉,聽起來不像它。簡而言之,兩個代理建議聽起來都是合法的 - 我們會給他們一個嘗試。謝謝。 –

回答

0

我的兩分錢....

我會切換到HTTP接口,如果你使事情更嚴厲的爲您的用戶,那麼他們將不會使用你的應用程序,並會找出一個更好的方式去做事情。您不必重寫應用程序 - 只需通信,然後使用某種服務器端應用程序來「緩存」這些音頻流。

另一種方法是按原樣保留應用程序,然後添加一個步驟,將音頻文件發送到某個存儲庫,然後在另一個線程中將其發送到語音文本。在這種情況下,您不僅可以保存音頻文件,還可以保存文本翻譯。

1

經過一些額外的研究,我們決定使用適用於iOS的Amazon S3 TransferUtility Mobile SDK。它在單個對象中封裝數據分塊和多線程,甚至在iOS暫停應用程序後在後臺完成傳輸。

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

主要優勢,我們看到:

  • 現有的代碼沒有任何影響 - 只需添加一個電話來啓動傳送
  • 沒有必要實現和維護一個代理服務器,它降低複雜性

Bluemix提供類似於S3的雲對象存儲,但我們無法找到支持anyt的iOS SDK除了一個同步的單線程解決方案外(我們最初很擔心看到'Swift'的支持,但這已被證明只是巧合使用的術語)。

相關問題