2012-12-13 4 views
0

현재 mp3를 프레임으로 분할하고 websocket을 통해 클라이언트 (브라우저)로 보내고 WebAudio를 사용하여 재생하려는 작은 프로젝트에서 작업 중입니다. webkitAudioContext). 내 서버에서 nodejs를 실행 중이고 이진 데이터를 전송하려면 binaryJS를 사용합니다. 내가 테스트중인 브라우저는 Chrome 25.0.1354.0 dev이며 우분투 12.04에서 실행됩니다.DOM 예외 12는 websocket을 통해 MP3를 스트리밍하려고 할 때

나는 프레임을 mp3로 성공적으로 분할하거나 적어도 내 테스트를 토대로 작동하는 것으로 보인다. 프레임에 파일을 다시 작성하면 mplayer는 파일을 재생할 때 아무런 문제가 없으며 헤더를 올바르게 구문 분석합니다. 각 프레임은 올바른 크기의 nodejs 버퍼에 저장되고 버퍼의 마지막 바이트는 항상 다음 동기화 단어 이전의 첫 번째 바이트입니다.

초기 테스트에서 첫 번째 MP3 프레임 만 보내고 있습니다. 클라이언트는 프레임을 성공적으로 수신하고 (ArrayBuffer에 저장 됨) 버퍼에 올바른 데이터가 들어 있습니다. 내가 디코드를 호출 할 때, 나는 다음과 같은 메시지가 얻을 :

Uncaught Error: SyntaxError: DOM Exception 12 

내 기능, 나는 decodeAudio를 호출 다음과 같습니다

streamDone = -> 
    bArray = new Uint8Array(arr[0].byteLength) 
    console.log "Stream is done, bytes", bArray.length 
    context.decodeAudioData bArray, playAudio, err 

내가 deocde하려고 초기 프레임 수 찾을 수 here.

나는이 문제를 해결하기 위해 며칠 동안 벽에서 내 머리를 두드렸다. 누구든지이 문제를 해결하고 mp3 프레임을 성공적으로 디코딩 할 수 있었고 내가 뭘 잘못했는지 알아 보았습니까? StackOverflow에 관한 두 가지 관련 질문을 찾았지만 답변이 내 문제를 해결하지 못했습니다. 그러나 받아 들인 응답 here에 따르면, 내 프레임은 유효한 mp3 청크로 적합해야하며 따라서 디코딩됩니다.

미리 도움을 청하십시오!

+0

ID3 태그가없는 작은 파일로 더 테스트했습니다. 프레임을 디스크에 기록 할 때 새 파일의 원본과 동일한 md5 해시를 사용합니다. 모든 프레임을 서버에 보내면 하나의 binaryJS 청크 안에 들어가고 ArrayBuffer의 내용이 파일과 일치합니다. 나는 여전히 DOM Exception을 얻는다. –

답변

0

휴식과 신선한 눈이 놀라운 일을 할 수 있다고 밝혀지면 일반적인 코드 정리로 문제가 해결되었습니다. 누구든지 코드에 관심이 있다면 here으로 게시했습니다.

+0

좀 더 구체적으로 기재 할 수 있습니까? 코드에서 특정 문제에 대한 예외를 추적 했습니까? – Vince

+0

아니요, 실제로는 아닙니다. 그러나 필자의 이론은 바이너리 데이터를 저장하는 것과 관련하여 내가 클라이언트에서 한 일이 있다는 것이다. –

관련 문제