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
이 작동하지 않는다는 의미입니다. 어떻게 해결할 수 있습니까?
나는이 코드를'Mp3StreamingDemo/MP3StreamingPanel.cs'의 변경으로 구현했습니다. 여기에있는 문제는 ReadFullyStream을 제거하고 MemoryStream의 위치를 변경하여 해결됩니다. 나는 삭제할 질문을 잊어 버렸습니다, 미안 해요. 이제 스트리밍하는 동안 사용하는 메모리와 관련된 중요한 질문이 있습니다. http://stackoverflow.com/questions/39544929/how-to-stream-an-mp3-file-from-a-url-without-using-much-ram을 살펴 보시면 감사하겠습니다. @Mark에게 감사합니다. –