Потоковое воспроизведение MP3 в С#.NET 4.5.1 MVC 5.2.2 на Samsung 6S

Мне нужно использовать SaaS TTS (Text to Speak) из ReadSpeaker, чтобы добавить аудио в приложение, которое я разработки.

Теперь основная учетная запись SCAPI, которую мы сейчас используем, имеет базовую настройку, вы просто установили URL-адрес и получили поток MP3, который нам нужно вывести. Поскольку ключ службы находится в URL-адресе, мы не можем использовать его в интерфейсе, поэтому нам нужно передавать файлы через наши серверы.

Все работало нормально, пока я не протестировал код разработки на Samsung 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>

в то время как тот же самый код через наши серверы не находится на Samsung 6S с той же ссылкой, что и источник потока в контроллере.

Я просмотрел несколько различных способов потоковой передачи файла на сервере, но просто упал каждый раз в Samsung 6S (новый из коробки без мод).

Вот код, который я использовал.

Контроллер Void:

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);

и даже измененный файл FileStreamResult, который я нашел здесь, который позволяет осуществлять фактическую поточную передачу 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, но не с аудио-тегами, но все же), но не с Samsung 6S. ​​

Я не знаю, что мне, должно быть, не хватает чего-то очень элементарного, потому что все, что я пробовал, прекрасно работает на все остальное, но на Samsung 6S ничего. Даже на других высоких андроидах, таких как LG G4, он работает, но на 6S... ничего, струйная прямая ссылка на службу в теге Audio работает просто отлично?

Значит, я знаю, что я должен делать что-то неправильно здесь, любые идеи?

Ответы

Ответ 1

Кодирование кажется прекрасным.

Samsung имеет свой собственный TTS, который может быть помехой вашему собственному. вы можете захотеть поиграть с ним, либо удалите его, либо включите. http://www.samsung.com/in/support/skp/htg/16082