2014-01-24 77 views
1

我有一個在線收音機的URL,我想播放它。所以,我這樣做了:讀取流並將其寫入字節數組並使用audioTrack類播放它。這裏的代碼:Xamarin Android C#播放音頻流(在線廣播)

private static async Task Play() 
     { 
      using (WebClient wcDownload = new WebClient()) 
      { 
       // Create a request to the file we are downloading 
       WebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://media.vmariel.ru:8000/puls"); 
       // Set default authentication for retrieving the file 
       webRequest.Credentials = CredentialCache.DefaultCredentials; 
       // Retrieve the response from the server 
       WebResponse webResponse = (HttpWebResponse)webRequest.GetResponseAsync().Result; 
       // Ask the server for the file size and store it 
       Int64 fileSize = webResponse.ContentLength; 

       // Open the URL for download 
       System.IO.Stream strResponse = wcDownload.OpenRead(new System.Uri("http://media.vmariel.ru:8000/puls")); 


       // It will store the current number of bytes we retrieved from the server 
       int bytesSize = 0; 
       // A buffer for storing and writing the data retrieved from the server 
       byte[] downBuffer = new byte[131072]; 
       // Loop through the buffer until the buffer is empty 
       AudioTrack audioTrack = new AudioTrack(
        // Stream type 
        Android.Media.Stream.Music, 
        // Frequency 
        48000, 
        // Mono or stereo 
        ChannelConfiguration.Stereo, 
        // Audio encoding 
        Android.Media.Encoding.Pcm16bit, 
        // Length of the audio clip. 
        downBuffer.Length, 
        // Mode. Stream or static. 
        AudioTrackMode.Stream); 

       audioTrack.Play(); 
       while ((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0) 
       { 
        await audioTrack.WriteAsync(downBuffer, 0, downBuffer.Length); 
       } 

      } 
     } 

但這種方式,我只能聽到噪音,沒有音樂。

回答

2

您可以使用MediaPlayer類通過提供URL來傳輸音頻。

MediaPlayer player = new MediaPlayer(); 
player.SetAudioStreamType (Stream.Music); 
player.SetDataSource ("http://media.vmariel.ru:8000/puls"); 
player.Prepare(); 
player.Start();