2016-09-16 4 views
0

Я пытаюсь сделать mp3-плеер потоковым. Mp3-файл, который находится в интернет-источнике, может воспроизводиться в реальном времени в этом проекте. Также я хочу, чтобы он поддерживал Pause, Stop, Forward, Backward. Чтобы получить эти функции, мне нужно написать гибкий плеер.NAudio Mp3Frame является нулевым при потоковом mp3

Так что я написал этот код:

WaveOut outer; 
    AcmMp3FrameDecompressor decompressor; 
    BufferedWaveProvider provider; 
    public void Play() 
    { 
     Task.Run(() => 
     { 
      var response = WebRequest.Create(url).GetResponse(); 
      var responseStream = response.GetResponseStream(); 
      Mp3Frame frame; 
      byte[] buffer = new byte[30000]; 
      int bytesRead = 0; 
      MemoryStream ms = new MemoryStream(); 
      ReadFullyStream fully = new ReadFullyStream(ms); 

      do 
      { 
       bytesRead = responseStream.Read(buffer, 0, buffer.Length); 
       ms.Write(buffer, 0, bytesRead); 

       frame = Mp3Frame.LoadFromStream(fully); 
       if (decompressor == null) 
       { 
        decompressor = CreateFrameDecompressor(frame) as AcmMp3FrameDecompressor; 
        provider = new BufferedWaveProvider(decompressor.OutputFormat); 
        provider.BufferDuration = TimeSpan.FromSeconds(50); 
        outer = new WaveOut(); 
        outer.Init(provider); 
        outer.Play(); 
       } 
       int decompressed = decompressor.DecompressFrame(frame, buffer, 0); 
       provider.AddSamples(buffer, 0, decompressed); 
      } 
      while (bytesRead > 0); 
     }); 

    } 

В коде выше он вызывает исключение из кадра равна нулю. Это означает, что LoadMp3FromStream не работает для MemoryStream. Как я могу это исправить?

ответ

1

Если вы получаете пустой фрейм MP3, это означает, что он не смог найти MP3-фрейм во входных данных. Итак, вы уверены, что это действительно MP3, который вы передаете.

Также вы можете проверить мой пост в блоге о playing streaming MP3 и посмотреть, работает ли этот код для вашего файла.

+0

Я внедрил этот код с изменениями из 'Mp3StreamingDemo/MP3StreamingPanel.cs'. Проблема здесь решена путем удаления ReadFullyStream и перестановки MemoryStream. Я забыл вопрос удалить, извините. Теперь у меня есть более важный вопрос, связанный с использованием памяти во время потоковой передачи. Я буду признателен, если взглянуть на http://stackoverflow.com/questions/39544929/how-to-stream-an-mp3-file-from-a-url-without-using-much-ram. Спасибо @Mark. –

 Смежные вопросы

  • Нет связанных вопросов^_^