DirectPlay DirectPlay Voice 지터- 버퍼   [목차열람] [주소복사] [슬롯비우기]
지터-버퍼
 
Microsoft DirectX 9.0

지터-버퍼


Microsoft® DirectPlay® Voice 에는, 지터-버퍼라고 하는 특징적인 기능이 있다. 지터-버퍼는, 최소한의 지연 시간에 최적인 음질을 제공하는, 유연한 버퍼링 알고리즘이다.

혼잡한 네트워크에서는, 음성 데이터 정보의 각 패킷이, 호스트 컴퓨터로 encode 되었을 때와 다른 순서로 닿는 일이 있다. 음성 데이터는 본래 연속한 것이므로, 패킷이 만일 늦어도 순서 자주(잘) 재생하기 위해서, 이러한 수신 패킷은, 당분간 큐에 넣어 둘 필요가 있다.

음성 통신의 품질을 최대로 하도록(듯이) 지터-버퍼를 설정 하면, 필요한 수의 음성 패킷이 닿아, 큐에 배치 될 때까지 시간이 걸린다. 이 때문에 음성이 늦어 음성 통신을 리얼타임에 들을 수가 없다. 대신에, 음성 데이터가 들리는 타이밍은, 녹음보다 수밀리 세컨드로부터 몇 초(정도)만큼 늦을 가능성이 있다. player가 서로 협력하는 게임에서는, 이 지연에 의해 문제가 발생한다. 게임에서 이벤트가 발생했을 때에, player가 그 이벤트에 근거해 리얼타임에 정보를 교환할 수 없기 때문에이다. 예를 들어, 일인칭형의 슈팅 게임에서, player가 배후로부터 공격받을 것 같게 되어 동료가 경고하려고 해도, 공격받아 버릴 때까지 음성 통신이 들리지 않을 가능성이 있다.

지연 시간을 줄이도록(듯이) 지터-버퍼를 설정 하면, 큐를 가득하게 하기 위해서 필요한 패킷수가 적게 된다. 다만 이 경우, 연속 패킷의 일부가 시간에 맞지 않고, 그 결과, 재생시에 버퍼내에 음성 데이터가 갖추어지지 않을 가능성이 있다. 음성 통신이 들리는 타이밍은, 실제의 녹음과 거의 일치하고 있다. 다만 이 경우, 음성이 "팽이 조각" 으로 품질은 낮다.

DirectPlay 지터-버퍼에서는, 최소한의 지연 시간에 최고 품질의 음성 통신을 제공하는 방법을, 2 개의 방법에 의해 판단한다. 최초로, 네트워크 상태를 감시해, 지연이나 혼잡 상황을 판단한다. 다음에, 음성의 중단을 최소한으로 억제하면서 지연 시간을 가능한 한 단축하기 위해(때문에), 지터-버퍼 (또는 큐)의 사이즈를 동적으로 조정한다.

DirectPlay Voice 지터-버퍼는, 네트워크 상태에 맞추어 자동적으로 조정된다 (디폴트 동작의 경우). 알고리즘으로 네트워크 상태를 어느 정도 엄밀하게 추적할까는,DVCLIENTCONFIG 구조체의 dwBufferAggressiveness 멤버와 dwBufferQuality 멤버를 사용해 수동으로 조정할 수 있다. "아그렛시브네스 (즉응성)" 의 레벨을 올리는 만큼, 네트워크 상태가 엄밀하게 감시된다. 보통, 품질의 값이 높을 정도 음질은 오르지만, 지연 시간은 길어진다. 또, 값이 작을 정도(수록), 지연 시간은 짧아지지만 음질은 저하한다. IDirectPlayVoiceClient::Connect 를 호출해 세션에 접속 할 때는, 이러한 2 개의 멤버를 설정할 수 있다. 또,IDirectPlayVoiceClient::SetClientConfig 를 호출해, 세션중은 언제라도 설정할 수 있다.

아그렛시브네스의 레벨은, 게임 애플리케이션 실행중의 네트워크 상태에 맞추어 선택하는 것이 중요하다. 네트워크 퍼포먼스가 안정되어 있을 때 고레벨의 아그렛시브네스가 선택되고 있으면 일시적인 문제가 오 기다려 해석되어 존재 하지 않을 지도 모르는 문제가 과잉에 보정될 가능성이 있기 때문에 있다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP