【问题标题】:MP3 streaming in C# .NET 4.5.1 MVC 5.2.2 on Samsung 6S三星 6S 上 C# .NET 4.5.1 MVC 5.2.2 中的 MP3 流式传输
【发布时间】:2016-03-21 19:29:44
【问题描述】:

我必须使用来自ReadSpeaker 的 TTS(文本到语音)SaaS 才能将音频添加到我正在开发的应用程序中。

现在,我们当前使用的基本 SCAPI 帐户具有基本设置,您只需设置一个 URL 并获取我们需要输出的 MP3 流。因为服务密钥在 URL 中,我们不能在前端使用它,所以我们需要通过我们的服务器流式传输文件。

在我在三星 6S 上测试开发代码之前,一切正常。在根本没有播放的地方,但是服务自己的链接有效,即有效:

<audio controls>
    <source 
        src="http://tts.readspeaker.com/a/speak?key=[ServiceKey]&lang=en_uk&voice=Female01&audioformat=mp3&volume=200&text=test text 2"
        type="audio/mp3">
        Your browser does not support the audio element.
</audio>

虽然通过我们服务器的完全相同的代码在与控制器中的流源具有相同链接的三星 6S 上却没有。

我已经通过几种不同的方式在服务器上流式传输文件,但每次在三星 6S 中都失败了(全新的开箱即用,没有模组)。

这是我使用的代码。

虚空控制器:

string url = "http://tts.readspeaker.com/a/speak?key=[ServiceKey]&lang=en_uk&voice=Female01&audioformat=mp3&volume=200&text=test text 2";

HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)HttpWRequest.GetResponse();

Stream stream = response.GetResponseStream();

MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);

Response.AddHeader("Content-Type", response.ContentType);
Response.AddHeader("Content-Length", response.ContentLength.ToString());
Response.AddHeader("Access-Control-Allow-Origin", "*");
Response.AddHeader("Connection", "close");

Response.Flush();

audioData = ms.ToArray();
Response.BinaryWrite(audioData);

Response.End();

标准FileStreamResult 我采用上述代码的 MemoryStream 并通过它发送,即使用 FileStreamResult 控制器而不是手动设置标头:

return new FileStreamResult(ms, response.ContentType);

even a modified FileStreamResult I found here 允许实际流式传输 URL 而无需将其下载到服务器。

我也用这种方法从 ReadSpeaker 获取字节数据:

byte[] audioData;
using (WebClient client = new WebClient())
{
    audioData = client.DownloadData("http://tts.readspeaker.com/a/speak?key=[ServiceKey]&lang=en_uk&voice=Female01&audioformat=mp3&volume=200&text=test text 2");
}

然后有无数种方法来输出它,但结果总是一样的,在其他所有东西上都可以正常工作(即使是 IE7,不带音频标签,但仍然如此),但不适用于三星 6S。

我不知道我一定错过了一些非常基本的东西,因为我尝试过的所有东西在其他所有东西上都可以正常工作,但在三星 6S 上什么也没有。即使在 LG G4 等其他高端 Android 上也能正常工作,但在 6S 上……什么都没有,将音频标签中的直接服务链接喷射出来就可以了吗?

所以我知道我在这里一定做错了什么,有什么想法吗?

【问题讨论】:

  • 您最好的选择是将 fiddler(或类似的代理式 http 嗅探器)插入到链中。您可以将 fiddler 配置为侦听所有端口(不仅仅是 localhost),并将 sammy 上的代理设置为指向您 PC 上运行的 fiddler 实例的 ip/port。然后应该比较您自己的代理控制器操作和原始 url 的响应并查看差异所在。
  • 我会特别注意标题中与跨域相关的任何内容之间的差异。

标签: c# android asp.net-mvc audio-streaming samsung-mobile


【解决方案1】:

编码似乎没问题。

三星有自己的 TTS,可能会干扰您自己的 TTS。你可能想玩它,要么卸载它,要么启用它。 http://www.samsung.com/in/support/skp/htg/16082

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2019-03-30
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多