2010-01-20 3 views
1

test1.mp3과 test2.mp3은 동일한 비트 전송률과 샘플 속도를 가지고 있으며 HTTP 응답으로 병합하려고합니다. 결과 파일은 test.mp3입니다.MP3를 다른 두 곡에서 만든 MP3는 WMP11에서 재생되지 않습니까?

test.mp3은 WMP12 및 VLC에서 정상적으로 재생됩니다. WMP11에서는 test1.mp3에서 나온 오디오 만 들립니다. test2.mp3의 오디오의 시작을 듣고 자하는 순간, 플레이어는 연주를 멈 춥니 다. WMP11은 오류를보고하지 않습니다 ... 그냥 재생을 중지합니다.

WMP11에서 test.mp3이 올바르게 재생되도록 변경해야하는 항목은 무엇입니까?

protected void Page_Load(object sender, EventArgs e) { 
    Response.Clear(); 
    Response.ContentType = "audio/mpeg"; 
    Response.AddHeader("Content-Disposition", "attachment; filename=test.mp3"); 
    var bytes1 = System.IO.File.ReadAllBytes(@"C:\test1.mp3"); 
    WriteBytesToResponse(bytes1); 
    var bytes2 = System.IO.File.ReadAllBytes(@"C:\test2.mp3"); 
    WriteBytesToResponse(bytes2); 
    Response.End(); 
} 

private void WriteBytesToResponse(byte[] sourceBytes) { 
    using (var sourceStream = new MemoryStream(sourceBytes, false)) { 
     sourceStream.WriteTo(Response.OutputStream); 
    } 
} 

답변

0

MP3 파일에는 스트림 길이와 같은 기타 정보 중에서 전체 MPEG1 헤더가 들어 있습니다. 당신은 단순히 그들을 연결할 수 없습니다. WMP는 헤더를 읽고 재생 길이를 결정하고 첫 번째 파일이 완료되면 중지합니다. 나머지 데이터는 무시되어야하므로 무시됩니다.

연결을 수행하려면 MPEG1 또는 MP3 파일을 이해하는 라이브러리 나 유틸리티를 사용해야합니다.

+0

두 번째 파일의 오디오가 생성되기 전에 HTTP 응답을 통해 첫 번째 파일의 오디오를 보내야합니다 (응답 중에 동적으로 생성 됨). 클라이언트의 타임 아웃 허용 범위를 제어 할 수없고 (두 번째 오디오가 나올 때까지 한 바이트를 보내지 않으면 _will_이 발생하는 것을 방지하기 위해 첫 번째 오디오 파일이 즉시 전송됩니다.) 동적으로 생성됩니다 (몇 분 소요). 바위 같은 곳과 힘든 곳 사이에있는 것 같은데? – lance

+0

@lance : 비교적 빨리 HTTP 소켓을 통해 전달할 수 없다면 파일 생성 전략에 대한 귀하의 요청을 다시 생각해보십시오 - 다른 문제 (DoS 등) 호스트도 묻습니다 –

+0

마침내 나는 , 정말. 지난 며칠간 프로젝트의 디자인에도 다른 결함이 나타났습니다. 이것은 대중을위한 것이 아니었고, 이제는 쓸모없는 코드를 많이 배웠습니다. 나는 곧 귀하의 응답을 대답으로 표시 할 것입니다. 너는 매우 도움이되었다. 고맙습니다. – lance

관련 문제