2011-09-06 2 views
0

내가 무엇을하고 싶은지 먼저 결정 해주세요.웹 사이트에 오디오 녹음 : Red5 스트림 또는 오디오 데이터 게시?

내 사용자는 내 웹 사이트에 음성 메모를 녹음하고, 메모에 색인을 추가하고 제목을 추가 할 수 있습니다. 메모가 저장되면 메모의 경로를 내 DB의 다른 정보와 함께 저장합니다.

1) 내 서버에 오디오를 스트리밍하고 파일을 저장하고를 반환하는 Red5의 서버를 사용할 수 있습니다

지금, 나는 모두가 내 사이트에 포함 된 .swf 파일을 포함, 녹음을 할 2 개를 선택할 수 있습니다 경로를 내 애플 리케이션에 파일을 저장하는 DB를 할 오히려 나는 오디오를 변환하고 서버 측 Red5 앱에서 사용자에게 속한 적절한 폴더로 이동해야하기 때문에 다소 복잡해 보인다. 빌드하는 방법에 대해.

2) 오디오를 녹음하고 바이트 배열을 가져 와서 Base64 인코딩을 수행 한 다음 필요한 나머지 데이터 (간단한 POST 또는 AJAX 호출), 서버에서 디코드하고 적절한 확장명으로 파일을 만들면 ffmpeg를 사용하여 오디오 변환도 수행됩니다.이 옵션은 더 단순 해 보이지만 실행 가능 여부는 알 수 없습니다.

어떤 옵션을 선택하면 더 쉽게 개발할 수 있습니까? 미리 감사드립니다.

답변

4

녹화 예정 시간에 따라 2 번 옵션을 사용할 수 있습니다. 나는 최근에 비슷한 접근법을 프로젝트에 성공적으로 사용했지만 녹음은 최대 30 초 정도였습니다. 여기에 당신이 생각 제안하고 무엇을 다르게했고, 무엇을 왜 내가 더 나은 것 같아요 :

  • 은 사용 할 때마다 더 전달되는 SAMPLE_DATA 이벤트를 마이크에서 소리를 캡처하고이 ByteArray에 저장하려면 사운드 데이터가 마이크에서 들어옵니다. 설명서에는이 점을 충분히 설명해야 할 예제가 있습니다.

  • 대부분의 사용자는 특별한 녹화 장비없이 일반 가정용 컴퓨터를 사용하기 때문에 녹화의 전체 충실도가 필요 없다고 가정하는 것이 안전합니다. SAMPLE_DATA 이벤트에서 마이크에서 가져온 전체 64 비트 수레 (AS3 Number) 대신 샘플 당 단 2 바이트를 사용하고 모노 만 사용했습니다. Number을 읽고 myFloatSample * 0x7fff을 사용하여 16 비트 부호있는 정수로 변환하십시오.

  • 해당 주파수 범위에서 음성이나 다른 것을 녹음하는 경우 네이티브 44.1kHz 샘플링 속도를 사용하지 마십시오. 당신은 22.05kHz로 잘 빠져 나갈 것이고, 이것은 데이터의 양을 반으로 곧바로 줄일 것입니다. 그에 따라 Microphone.rate 속성을 설정하면됩니다.

  • 데이터를 인코딩 할 때 Base64를 사용하지 마십시오. 이진 데이터로 보내면 상당히 작아집니다. 원시 POST 데이터로 보내거나 AMF와 같은 것을 사용할 수 있습니다. 또한 보내기 전에 ByteArray에서 기본 compress() 또는 deflate() 메서드를 사용하여 압축합니다. 서버에서 각각 ZLIB 또는 DEFLATE (inflate) 알고리즘을 사용하여 압축을 푸십시오 (PHP supports).

  • 일단 서버에서 압축을 풀면 본질적으로 원시 16 비트 모노 PCM 스트림이라고합니다. 덧붙여 말하자면, 그것은 ffmpeg (또는 절름발이)가 지원하는 매우 입력 형식 중 하나 여야하므로 수동으로 디코딩하지 않고 mp3로 인코딩 할 수 있어야합니다.

분명히 Red5 솔루션은 작업에 더 적합하기 때문에 더 나을 것입니다. 그러나 Red5 서버를 설정하거나 Java를 사용하지 않으려는 리소스가 없다면 위의 솔루션은 너무 오래 녹음하지 않는 한 효과가있는 것으로 입증되었습니다.

간단한 예를 들자면, 초당 22,050 샘플에서 30 초 기록, 샘플 당 2 바이트는 ~ 1.3MB입니다. 한 번 수축 된 경우에도 서버로의 전송은 오디오 30 초 동안 거의 메가 바이트입니다. 이것은 귀하의 신청서에 대해 수용 가능할 수도 있고 그렇지 않을 수도 있습니다.

+0

응답 해 주셔서 감사합니다. 매우 완벽한 솔루션 인 것 같습니다. 비록 파일 크기가 약간 큰 것 같습니다. Red5는 오디오와 비디오를 모두 녹음하기 때문에 flv 파일은 오디오와 비디오의 20 초 동안 약 400K가되었습니다. 이제 문제는 플래시에서 오디오 스트림을 어떻게 가져올 수 있습니까? FMS 나 Red5와 같은 서버를 사용하지 않는 한 불가능한 것 같습니다. 어떻게 캡처 했습니까? – 8vius

+0

언급을 잊어 버렸습니다. 최대 2 분 동안 녹음을 허용하고 싶습니다. – 8vius

+0

소리를 캡처하여 다시 녹음합니다. 오디오가 클라이언트 측에서 파괴적으로 인코딩되기 때문에 스트리밍 할 때 파일 크기가 작습니다 (예 : MP3 사용). AS3에서도 클라이언트 측에서이 작업을 수행하는 것을 고려해 볼 수는 있지만, 느린 시스템에서 인코딩하는 데 시간이 걸리면 PCM을 보내는 것보다 시간이 오래 걸릴 것입니다. – richardolsson