2015-12-15 15 views
15

Tôi phải sử dụng một TTS (Text to Speak) SaaS từ ReadSpeaker để thêm âm thanh vào ứng dụng mà tôi đang phát triển.Phát trực tuyến MP3 trong C# .NET 4.5.1 MVC 5.2.2 trên Samsung 6S

Bây giờ tài khoản SCAPI cơ bản mà chúng tôi hiện đang sử dụng có thiết lập cơ bản là bạn chỉ cần đặt URL và nhận lại luồng MP3 mà chúng tôi cần xuất. Vì khóa dịch vụ nằm trong URL mà chúng tôi không thể sử dụng trong giao diện người dùng nên chúng tôi cần truyền các tệp qua máy chủ của chúng tôi.

Mọi thứ hoạt động tốt cho đến khi tôi kiểm tra mã phát triển trên Samsung 6S. Nơi mà nó đã không chơi ở tất cả, tuy nhiên các dịch vụ liên kết riêng của các công trình ví dụ: công trình này:

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

trong khi mã chính xác tương tự thông qua các máy chủ của chúng tôi không về Samsung 6S với các liên kết tương tự như nguồn suối trong bộ điều khiển.

Tôi đã trải qua nhiều cách khác nhau để phát trực tuyến tệp trên máy chủ nhưng chỉ đơn giản là giảm phẳng mỗi lần trong Samsung 6S (thương hiệu mới ra khỏi hộp không có mod).

Đây là mã tôi đã sử dụng.

khiển 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(); 

Chuẩn FileStreamResult nơi tôi mất MemoryStream đoạn mã trên và gửi qua nó tức là với một bộ điều khiển FileStreamResult thay vì thiết lập các tiêu đề bằng tay:

return new FileStreamResult(ms, response.ContentType); 

even a modified FileStreamResult I found here cho phép để thực sự phát trực tiếp URL mà không cần tải xuống máy chủ.

Tôi cũng đã sử dụng phương pháp này để lấy dữ liệu byte từ 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"); 
} 

Và sau đó vô số cách để đầu ra nó, nhưng luôn luôn kết quả là như nhau, hoạt động tốt trên mọi thứ khác (thậm chí IE7, không phải với các thẻ âm thanh, nhưng vẫn còn) nhưng không phải với Samsung 6S.

Tôi không biết mình phải thiếu thứ gì đó rất cơ bản ở đây, bởi vì mọi thứ tôi đã thử chỉ hoạt động tốt trên mọi thứ khác nhưng trên Samsung 6S không có gì. Ngay cả trên Android cao cấp khác như LG G4 nó hoạt động nhưng trên 6S ... không có gì, máy bay phản lực liên kết dịch vụ trực tiếp trong một thẻ Audio hoạt động tốt?

Vì vậy, tôi biết tôi phải làm điều gì đó sai ở đây, bất kỳ ý tưởng nào?

+0

Đặt cược tốt nhất của bạn ở đây là chèn fiddler (hoặc một proxy theo kiểu proxy tương tự http) vào chuỗi. Bạn có thể cấu hình fiddler để lắng nghe tất cả các cổng (không chỉ localhost), và thiết lập proxy trên sammy để trỏ vào ip/port của cá thể fiddler đang chạy trên PC của bạn. Sau đó, nó sẽ là một vấn đề so sánh các phản ứng từ hành động điều khiển proxy của riêng bạn và url gốc và nhìn thấy nơi sự khác biệt nằm. – spender

+0

Tôi đặc biệt chú ý đến sự khác biệt giữa bất kỳ thứ gì có nguồn gốc chéo có liên quan trong các tiêu đề. – spender

Trả lời

Các vấn đề liên quan