2016-09-16 8 views
0

스트리밍으로 MP3 플레이어를 만들려고합니다. 인터넷 소스에있는 mp3 파일은이 프로젝트에서 실시간으로 재생할 수 있습니다. 또한 Pause, Stop, Forward, Backward를 지원하도록 만들고 싶습니다. 이러한 기능을 사용하려면 유연한 플레이어를 작성해야합니다. 프레임이 null의 때문에 예외를 throw 위의 코드에서스트리밍하는 동안 NAudio Mp3Frame이 null입니다.

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

    } 

:

그래서 나는이 코드를 썼다. MemoryStream에 대해 LoadMp3FromStream이 작동하지 않는다는 의미입니다. 어떻게 해결할 수 있습니까?

답변

1

null 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에게 감사합니다. –