Q&A

  • 음성 채팅 관련 허접하지만 답변 부탁드립니다.
이제 델파이 시작한지 2달째 접어드는 델파이 초보입니다.
음성채팅을 만들구 싶어서 시작했는데
ACM컴포넌트를 이용해서 구현을 해보았습니다.
자료실에 있는 소스를 보고 그대루 따라했죠.
근데 이넘이 엄청나게 지연된다는 것입니다.
첨에는 잘 들리다가도 좀 지나면 환장하게 뒤에 옵니다.
제 생각에는 말하지 않아도 잡음이 전송되고 그래서 인거 같은데
필터링을 해주면 좀 빨라질것 같고 또 여러명이 대화를 할경우 여러명의 소리를 하나로 믹싱하는 것도 좋을것 같은데 관련 컴포넌트가 어떤건지 멀라서요.
초보에 영어도 약해서 아무리 돌아다니구 뒤져도 잘 모르겠습니다.
답변좀 해 주십시오.
염체없이 부탁드립니다.
3  COMMENTS
  • Profile
    이경문 2002.04.05 09:25
    음성이 지연되는 원인은 크게 3가지가 있습니다.
    1. Transfer Delay.
    실제로 네트워크상으로 전송에 걸리는 지연으로 이는 Application으로는 해결할 수 없는 지연입니다.

    2. Process Delay
    Peer로부터 음성이 온 직후 Sound Device로 출력(재상)할 때까지의 지연을 말합니다.
    일반적으로 음성통신을 구현할 때 Peer(상대방)로부터 음성데이터가 왔을 때 곧바로 Play를 하는 것이 아니고 어느정도의 버퍼링을 한 후에 Play를 합니다.

    3. Play Delay
    Sound Device가 일반적으로 Queue 방식을 사용하기 때문에 기존에 n sec만큼의 재생해야 할 음성데이터가 이미 Sound Device상으로 출력되어 있는 상태이면 지금 출력(재상)하고자 하는 음성데이터는 n sec이후에 출력(재생)이 됩니다.
    일반적으로 네트워크 송수신에는 jitter가 생기게 되는 데, 이 jitter때문에 수신측(재생측)에서 약간의 빈 공백이 생기게 되며, 이 빈 공백이 누적되게 되면서 지연이 커지게 됩니다.

    말씀하신 질문은 3번 Delay로 예상되며, 해결할 수 있는 방법은 송신측에서 Silence Detection(VAD)을 하여 묵음일 경우 송신을 하지 않는 방법을 사용하거나
    수신측에서 주기적으로(10초정도) 버퍼에 싸여 있는 내용들을 Flush하는 방법을 구현하면 됩니다.
    MSN 음성채팅에는 이 기능이 구현되어 있으므로 테스트해 보시기 바랍니다.
    아울러 브이드림(http://www.vdream.co.kr)에서도 관련 모듈을 다운받을 수 있습니다.



  • Profile
    최용일 2002.04.05 04:06
    안녕하세요. 최용일입니다.

    지연문제는 아마도 버퍼설정때문일거 같네요...

    버퍼크기와 버퍼수를 잘 맞추어 보세요... 버퍼크기가 클수록 지연이 많이 생길겁니다. 버퍼크기는 음성포멧과 샘플링레이트에 따라서 적당히 맞추어 주시구요...

    믹싱은 DirextSound를 쓰시면 쉽게 해결될겁니다... 2차버퍼에다가 각각의 클라이언트에서 전송받은 음성 데이터를 올려주시기만 하면 되거든요...

    DirectX에 관한 API부분을 많이 공부하세요... DirectX를 포팅한 DelphiX란 컴포넌트를 사용하시는 것두 괜찮겠구요... DelphiX는 델파이 사이트 돌아다니다 보시면 찾을 수 있을겁니다. 여기 자료실에도 있나 모르겠네요...

    ^^ 항상 즐코하세요...

  • Profile
    김동일 2002.04.06 04:50
    오옷~~
    정말 두분 다 대단하시군여...
    도대체 이런건 어떻게 해야 잘 할수 있을까여?
    전 몇일동안 사이트 돌아다녀봐도 정말 알아내기 힘들던데
    정말 감사드리고
    고생하셔서 공부하신걸 아낌없이 가르쳐 주시니
    몸들바를 모르겠네요.
    시간이 지날수록 델파이를 시작하길 잘했다는 생각이 드네요.^^