2015-12-15 2 views
15

Ich muss ein TTS (Text zu sprechen) SaaS von ReadSpeaker verwenden, um Audio zu der Anwendung hinzuzufügen, die ich entwickle.MP3-Streaming in C# .NET 4.5.1 MVC 5.2.2 auf Samsung 6S

Jetzt hat das grundlegende SCAPI-Konto, das wir gerade verwenden, eine grundlegende Einrichtung, wo Sie einfach eine URL setzen und einen MP3-Stream zurückbekommen, den wir ausgeben müssen. Da der Dienstschlüssel in der URL enthalten ist, können wir ihn nicht im Frontend verwenden, daher müssen wir die Dateien über unsere Server streamen.

Alles funktionierte gut, bis ich den Entwicklungscode auf dem Samsung 6S testete. Wo es überhaupt nicht spielen, aber die Dienste eigener Link funktioniert heißt dies funktioniert:

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

während der exakt gleiche Code über unsere Server nicht auf Samsung 6S mit dem gleichen Link als Stromquelle in der Steuerung.

Ich habe verschiedene Wege durchgespielt, um die Datei auf dem Server zu streamen, aber jedes Mal einfach in Samsung 6S flachgelegt (brandneue out of the box no mods).

Hier ist der Code, den ich verwendet habe.

Void Controller:

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

Standard-FileStreamResult, wo ich den obigen Code des Memory nehmen und senden durch sie also mit einem Filestreamresult Controller stattdessen die Header der Einstellung manuell:

return new FileStreamResult(ms, response.ContentType); 

und even a modified FileStreamResult I found here, die erlaubt für das tatsächliche Streaming der URL, ohne dass sie auf den Server heruntergeladen werden muss.

Ich habe auch diese Methode, um die Byte-Daten von Readspeaker verwendet:

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

Und dann Vielzahl von Möglichkeiten, um es auszugeben, aber immer ist das Ergebnis das gleiche, Arbeiten auf alles andere in Ordnung (auch IE7, nicht mit Audio-Tags, aber immer noch), aber nicht mit Samsung 6S.

Ich weiß nicht, ich muss hier etwas sehr Grundlegendes vermissen, weil alles, was ich ausprobiert habe, funktioniert gut auf alles andere als auf dem Samsung 6S nichts. Selbst auf anderen High-End-Androids wie dem LG G4 funktioniert es aber auf dem 6S ... nichts, jet der direkte Dienst-Link in einem Audio-Tag funktioniert ganz gut?

Also weiß ich, ich muss hier etwas falsch machen, irgendwelche Ideen?

+0

Ihre beste Wette hier ist fiddler (oder eine ähnliche Proxy-Stil http Sniffer) in die Kette einfügen. Sie können fiddler so konfigurieren, dass er alle Ports abhören kann (nicht nur localhost), und den Proxy auf dem Sammy so einstellen, dass er auf den ip/port der fiddler Instanz verweist, die auf Ihrem PC läuft. Dann sollte es darum gehen, die Antworten von Ihrer eigenen Proxy-Controller-Aktion und der ursprünglichen URL zu vergleichen und zu sehen, wo die Unterschiede liegen. – spender

+0

Ich würde besonders auf die Unterschiede zwischen den Querverweisen in den Kopfzeilen achten. – spender

Antwort

1

Codierung scheint in Ordnung zu sein.

Samsung hat seine eigene TTS, die möglicherweise Ihre eigenen stören könnte. Vielleicht möchten Sie damit spielen, es entweder deinstallieren oder es aktivieren. http://www.samsung.com/in/support/skp/htg/16082

Verwandte Themen