KR101877699B1 - 지터-제거 버퍼 업데이트 - Google Patents

지터-제거 버퍼 업데이트 Download PDF

Info

Publication number
KR101877699B1
KR101877699B1 KR1020177029386A KR20177029386A KR101877699B1 KR 101877699 B1 KR101877699 B1 KR 101877699B1 KR 1020177029386 A KR1020177029386 A KR 1020177029386A KR 20177029386 A KR20177029386 A KR 20177029386A KR 101877699 B1 KR101877699 B1 KR 101877699B1
Authority
KR
South Korea
Prior art keywords
frame
buffer
data
packet
timestamp
Prior art date
Application number
KR1020177029386A
Other languages
English (en)
Other versions
KR20170137750A (ko
Inventor
수바싱하 샤민다 수바싱하
비베크 라젠드란
두민다 데와수렌드라
찬드라 모우리 폴리세티
벤카트라만 에스 아티
벤카타 수브라마니암 찬드라 세카르 체비얌
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20170137750A publication Critical patent/KR20170137750A/ko
Application granted granted Critical
Publication of KR101877699B1 publication Critical patent/KR101877699B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/04Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
    • G10L19/16Vocoder architecture
    • G10L19/167Audio streaming, i.e. formatting and decoding of an encoded audio signal representation into a data stream for transmission or storage purposes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04JMULTIPLEX COMMUNICATION
    • H04J3/00Time-division multiplex systems
    • H04J3/02Details
    • H04J3/06Synchronising arrangements
    • H04J3/062Synchronisation of signals having the same nominal but fluctuating bit rates, e.g. using buffers
    • H04J3/0632Synchronisation of packets and cells, e.g. transmission of voice via a packet network, circuit emulation service [CES]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04JMULTIPLEX COMMUNICATION
    • H04J3/00Time-division multiplex systems
    • H04J3/02Details
    • H04J3/06Synchronising arrangements
    • H04J3/0635Clock or time synchronisation in a network
    • H04J3/0638Clock or time synchronisation among nodes; Internode synchronisation
    • H04J3/0658Clock or time synchronisation among packet nodes
    • H04J3/0661Clock or time synchronisation among packet nodes using timestamps
    • H04J3/0664Clock or time synchronisation among packet nodes using timestamps unidirectional timestamps
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/54Store-and-forward switching systems 
    • H04L12/56Packet switching systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/10Active monitoring, e.g. heartbeat, ping or trace-route
    • H04L43/106Active monitoring, e.g. heartbeat, ping or trace-route using time related information in packets, e.g. by adding timestamps
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9023Buffering arrangements for implementing a jitter-buffer
    • H04L65/608
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/65Network streaming protocols, e.g. real-time transport protocol [RTP] or real-time control protocol [RTCP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/70Media network packetisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/75Media network packet handling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/75Media network packet handling
    • H04L65/756Media network packet handling adapting media to device capabilities
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L7/00Arrangements for synchronising receiver with transmitter
    • H04L7/0016Arrangements for synchronising receiver with transmitter correction of synchronization errors

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • Acoustics & Sound (AREA)
  • Cardiology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

디바이스가 패킷을 수신하도록 구성되는 지터-제거 버퍼를 포함하며, 패킷은 제 1 데이터와 제 2 데이터를 포함한다. 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함한다. 제 2 데이터는 프레임들의 시퀀스 중 제 2 프레임에 대응한다. 디바이스는, 패킷을 수신하는 것에 응답하여, 제 1 데이터에 연관되는 제 1 프레임 수신 타임스탬프를 생성하도록 구성되는 분석기를 또한 포함한다. 분석기는 또한, 패킷을 수신하는 것에 응답하여, 제 2 데이터에 연관된 제 2 프레임 수신 타임스탬프를 생성하도록 구성된다. 제 1 프레임 수신 타임스탬프는 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시한다.

Description

지터-제거 버퍼 업데이트{DE-JITTER BUFFER UPDATE}
관련 출원들에 대한 상호참조
본 출원은 발명의 명칭이 "DE-JITTER BUFFER UPDATE"이며 2015년 8월 18일자로 출원된 미국 특허 출원 제14/829,560호와, 발명의 명칭이 "DE-JITTER BUFFER UPDATE"이며 2015년 4월 14일자로 출원된 미국 임시 특허 출원 제62/147,386호와, 발명의 명칭이 "BUFFER PARAMETER ADJUSTMENT"이며 2015년 4월 14일자로 출원된 미국 임시 특허 출원 제62/147,431호를 우선권 주장하며, 그 내용들은 그 전부가 참조로 본 명세서에 포함된다.
분야
본 개시물은 대체로 지터-제거 (de-jitter) 버퍼에의 업데이트들에 관한 것이다.
기술에서의 진보가 컴퓨팅 디바이스들이 더 작고 더 강력해지게 하였다. 예를 들어, 작으며, 경량이고, 사용자들이 쉽게 운반하는 무선 컴퓨팅 디바이스들, 이를테면 휴대용 무선 전화기들, 개인 정보 단말기들 (PDA들), 및 페이징 디바이스들을 포함한 다양한 휴대용 개인 컴퓨팅 디바이스들이 현재 존재한다. 더 구체적으로는, 휴대용 무선 전화기들, 이를테면 셀룰러 전화기들 및 인터넷 프로토콜 (IP) 전화기들이 무선 네트워크들을 통해 음성 및 데이터 패킷들을 통신할 수도 있다. 게다가, 많은 이러한 무선 전화기들은 그 속에 통합되는 다른 유형들의 디바이스들을 포함한다. 예를 들어, 무선 전화기가 디지털 스틸 카메라, 디지털 비디오 카메라, 디지털 레코더, 및 오디오 파일 플레이어를 또한 포함할 수도 있다. 또한, 이러한 무선 전화기들은, 소프트웨어 애플리케이션들, 이를테면 인터넷에 액세스하는데 사용될 수도 있는 웹 브라우저 애플리케이션을 포함하는 실행가능 명령들을 프로세싱할 수도 있다. 이처럼, 이들 무선 전화기들은 상당한 컴퓨팅 능력들을 포함할 수도 있다.
전자 디바이스들, 이를테면 무선 전화기들이, 네트워크들을 통해 데이터를 전송하고 수신할 수도 있다. 예를 들어, 오디오 데이터는 회선-교환 네트워크 (예컨대, 공중전화망 (PSTN), 이동 통신 세계화 시스템 (GSM) 네트워크 등) 또는 패킷-교환 네트워크 (예컨대, VoIP (voice over internet protocol) 네트워크, VoLTE (voice over long term evolution) 네트워크 등) 를 통해 전송되고 수신될 수도 있다. 패킷-교환 네트워크에서, 오디오 프레임들의 시퀀스에 대응하는 오디오 패킷들이 소스 디바이스로부터 목적지 디바이스로 개별적으로 라우팅될 수도 있다. 네트워크 상태들로 인해, 오디오 패킷들은 순서가 뒤바뀌어 도착할 수도 있다. 목적지 디바이스는 수신된 패킷들을 지터-제거 버퍼에 저장할 수도 있고 수신된 패킷들이 비순서적이면 수신된 패킷들을 재배열할 수도 있다.
목적지 디바이스는 수신된 패킷들에 기초하여 프로세싱된 오디오 신호를 생성할 수도 있다. 소스 디바이스에 의해 전송된 특정 패킷이 수신되지 않을 수도 있거나, 또는 목적지 디바이스에 의해 오류들과 함께 수신될 수도 있다. 지터-제거 버퍼의 버퍼 깊이가 증가하고 프로세싱되기 전의 패킷의 버퍼링 시간이 증가함에 따라, 더 많은 패킷들이 목적지 디바이스에 도달할 시간이 있기 때문에 프로세싱된 오디오 신호의 품질은 개선될 수도 있다. 그러나, 버퍼 깊이를 증가시키는 것이 사용자 경험에 악영향을 주는 단 대 단 지연을 증가시킬 수도 있다. 버퍼 깊이를 감소시키는 것이 단 대 단 지연을 감소시키지만, 프레임들에 대응하는 패킷들이 시간에 맞춰 목적지 디바이스에 도달하지 않았기 때문에, 프레임들의 시퀀스 중 일부 프레임들에 대해 데이터 없이 프로세싱된 오디오 신호가 생성될 기회들을 증가시킨다.
특정 양태에서, 디바이스가 지터-제거 버퍼와 분석기를 포함한다. 지터-제거 버퍼는 제 1 데이터와 제 2 데이터를 포함하는 패킷을 수신하도록 구성된다. 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함한다. 제 2 데이터는 프레임들의 시퀀스 중 제 2 프레임에 대응한다. 분석기는, 그 패킷을 수신하는 것에 응답하여, 제 1 데이터에 연관되는 제 1 프레임 수신 타임스탬프와 제 2 데이터에 연관되는 제 2 프레임 수신 타임스탬프를 생성하도록 구성된다. 제 1 프레임 수신 타임스탬프는 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시한다.
다른 양태에서, 방법이 지터-제거 버퍼에서 패킷을 수신하는 단계를 포함한다. 그 패킷은 제 1 데이터와 제 2 데이터를 포함한다. 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함한다. 제 2 데이터는 프레임들의 시퀀스 중 제 2 프레임에 대응한다. 그 방법은 또한, 그 패킷을 수신하는 것에 응답하여, 제 1 데이터에 연관되는 제 1 프레임 수신 타임스탬프를 생성하는 단계와 제 2 데이터에 연관되는 제 2 프레임 수신 타임스탬프를 생성하는 단계를 포함한다. 제 1 프레임 수신 타임스탬프는 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시한다.
다른 양태에서, 컴퓨터 판독가능 저장 디바이스가, 프로세서에 의해 실행될 때, 프로세서로 하여금 지터-제거 버퍼에서 패킷을 수신하는 동작을 포함한 동작들을 수행하게 하는 명령들을 저장한다. 그 패킷은 제 1 데이터와 제 2 데이터를 포함한다. 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함한다. 제 2 데이터는 프레임들의 시퀀스 중 제 2 프레임에 대응한다. 그 동작들은 또한, 그 패킷을 수신하는 것에 응답하여, 제 1 데이터에 연관되는 제 1 프레임 수신 타임스탬프를 생성하는 동작과 제 2 데이터에 연관되는 제 2 프레임 수신 타임스탬프를 생성하는 동작을 포함한다. 제 1 프레임 수신 타임스탬프는 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시한다.
다른 양태에서, 디바이스가 제 1 데이터와 제 2 데이터를 포함하는 패킷을 수신하는 수단을 포함한다. 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함한다. 제 2 데이터는 프레임들의 시퀀스 중 제 2 프레임에 대응한다. 디바이스는 또한, 패킷을 수신하는 것에 응답하여 제 1 데이터에 연관되는 제 1 프레임 수신 타임스탬프를 생성하는 수단과, 패킷을 수신하는 것에 응답하여 제 2 데이터에 연관되는 제 2 프레임 수신 타임스탬프를 생성하는 수단을 포함하는 버퍼 관리를 수행하는 수단을 포함한다. 제 1 프레임 수신 타임스탬프는 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시한다.
본 개시물의 다른 양태들, 장점들, 및 특징들은 다음의 섹션들, 즉, 도면의 간단한 설명, 상세한 설명 및 청구범위를 포함하는 출원서의 검토 후에 명확하게 될 것이다.
도 1은 지터-제거 버퍼를 업데이트하도록 동작 가능한 시스템의 특정 구체적인 예의 블록도이며;
도 2a는 도 1의 시스템의 특정 예의 동작을 도시하는 도면이며;
도 2b는 도 1의 시스템의 특정 예의 동작을 도시하는 도면이며;
도 3은 도 1의 시스템의 특정 예의 동작을 도시하는 도면이며;
도 4a는 도 1의 시스템의 특정 예의 동작을 도시하는 도면이며;
도 4b는 도 1의 시스템의 특정 예의 동작을 도시하는 도면이며;
도 5는 도 1의 시스템의 특정 예의 동작을 도시하는 도면이며;
도 6은 도 1의 시스템의 특정 구현예들의 동작을 도시하는 도면이며;
도 7은 도 1의 시스템의 특정 구현예들의 동작을 도시하는 도면이며;
도 8은 도 1의 시스템의 특정 구현예들의 동작을 도시하는 도면이며;
도 9는 버퍼 파라미터를 업데이트하도록 동작 가능한 시스템의 특정 구체적인 예의 블록도이며;
도 10은 지터-제거 버퍼를 업데이트하는 특정 방법을 예시하는 흐름도이며;
도 11은 지터-제거 버퍼를 업데이트하는 특정 방법을 예시하는 흐름도이며;
도 12는 버퍼 파라미터를 조정하는 특정 방법을 예시하는 흐름도이며; 그리고
도 13은 지터-제거 버퍼를 업데이트하도록 동작 가능한 디바이스의 특정 구체적인 예의 블록도이다.
본 개시물의 특정 양태들이 도면들을 참조하여 아래에서 설명된다.  설명에서, 공통 특징들이 도면들의 전체에 걸쳐 공통 참조 번호들에 의해 지정된다.
지터-제거 버퍼를 업데이트하는 시스템들 및 방법들이 개시된다. 소스 디바이스가 패킷들을 목적지 디바이스로 전송할 수도 있다. 예를 들어, 목적지 디바이스에서의 제 1 사용자가 소스 디바이스의 제 2 사용자와의 음성 통화에 참여할 수도 있다. 음성 통화 동안, 제 2 사용자는 소스 디바이스에 커플링되거나 또는 소스 디바이스에 포함되는 마이크로폰에 말을 할 수도 있다. 소스 디바이스는 제 2 사용자의 스피치에 대응하는 입력 오디오 신호를 수신할 수도 있다. 입력 오디오 신호는 오디오 프레임들의 시퀀스에 대응할 수도 있다. 예를 들어, 오디오 프레임들의 시퀀스는 제 1 프레임과 제 2 프레임을 포함할 수도 있다. 소스 디바이스는 오디오 프레임들의 시퀀스에 대응하는 패킷들을 생성할 수도 있다. 예를 들어, 소스 디바이스는 제 1 프레임에 대응하는 제 1 프레임 데이터를 포함하는 제 1 패킷을 생성할 수도 있다. 예시하기 위해, 제 1 프레임 데이터는 제 1 프레임의 제 1 스피치 파라미터들을 포함할 수도 있다. 다른 예로서, 소스 디바이스는 제 2 프레임에 대응하는 제 2 프레임 데이터를 포함하는 제 2 패킷을 생성할 수도 있다. 예시하기 위해, 제 2 프레임 데이터는 제 2 프레임의 제 2 스피치 파라미터들을 포함할 수도 있다.
패킷들은 부분적 리던던시를 가질 수도 있다. 예를 들어, 제 2 패킷은 제 1 패킷의 부분 사본 (예컨대, 부분 데이터) 을 포함할 수도 있다. 예시하기 위해, 제 2 패킷은 제 1 스피치 파라미터들의 서브세트를 포함할 수도 있다. 특정 예에서, 부분 데이터는 제 1 스피치 파라미터들과 제 2 스피치 파라미터들 사이의 차이를 표시할 수도 있다.
제 1 패킷은 제 1 프레임에 대응하는 제 1 생성 타임스탬프 (예컨대, 실시간 전송 프로토콜 (RTP) 타임스탬프) 를 포함할 수도 있다. 제 2 패킷은 제 2 프레임에 대응하는 제 2 생성 타임스탬프 (예컨대, RTP 타임스탬프) 를 포함할 수도 있다. 제 1 생성 타임스탬프와 제 2 생성 타임스탬프는 제 1 프레임이 오디오 프레임들의 시퀀스에서 제 2 프레임보다 일찍 발생한다는 것을 표시할 수도 있다. 소스 디바이스는 프레임들의 시퀀스에 대응하는 패킷들 (예컨대, 제 1 패킷 및 제 2 패킷) 을 목적지 디바이스로 전송할 수도 있다. 소스 디바이스는 특정 패킷에 특정 생성 타임스탬프를 인코딩 또는 첨부할 수도 있다. 소스 디바이스는 소스 디바이스의 클록에 기초하여 특정 생성 타임스탬프를 결정할 수도 있으며, 소스 디바이스의 클록은 목적지 디바이스의 클록에 동기될 수도 있거나 또는 동기되지 않을 수도 있다. 부가적으로 또는 대안적으로, 소스 디바이스는 소스 디바이스에 의해 인코딩된 샘플들의 수에 기초하여 특정 생성 타임스탬프를 결정할 수도 있다. 일부 예들에서, 생성 타임스탬프들은 RTP 유닛들의 측면에서 표현된다. 생성 타임스탬프는 프레임들의 시퀀스의 순서를 표시할 수도 있다.
목적지 디바이스는 소스 디바이스로부터 하나 이상의 패킷들을 수신할 수도 있다. 목적지 디바이스는 수신된 패킷들을 버퍼 (예컨대, 지터-제거 버퍼) 에 저장할 수도 있고 그 패킷들이 비순서적으로 수신되면 그 패킷들을 재배열할 수도 있다. 목적지 디바이스는 지터-제거 버퍼에서의 각각의 특정 프레임을 그 특정 프레임에 대응하는 데이터가 최소 지속기간 (예컨대, 플레이아웃 지연) 동안 버퍼링된 후 프로세싱할 수도 있다. 특정 프레임을 프로세싱함에 있어서의 지연은 후속 프레임들이 프로세싱될 때 후속 프레임들에 대응하는 패킷들이 지터-제거 버퍼에 있을 기회들을 증가시킬 수도 있다.
일부 경우들에서, 목적지 디바이스는 제 1 패킷을 수신하기에 앞서 제 2 패킷을 수신할 수도 있다. 제 1 패킷은 제 2 패킷 후에 수신될 수도 있거나 또는 수신되지 않을 수도 있다 (예컨대, 제 1 패킷은 손실될 수도 있다). 목적지 디바이스는 제 2 패킷이 제 1 프레임에 대응하는 부분 데이터를 포함한다고 결정하는 것에 응답하여 제 2 패킷을 이중-인큐잉 (dual-enqueuing) 할 수도 있다. 예를 들어, 목적지 디바이스는, 제 2 패킷을 수신 시, 제 1 프레임이 지터-제거 버퍼에 없는지의 여부를 결정할 수도 있다. 목적지 디바이스는, 제 1 프레임이 없다고 결정하는 것에 응답하여, 가장 최근에 프로세싱된 프레임이 프레임들의 시퀀스에서 제 1 프레임에 앞서는지의 여부를 결정할 수도 있다. 목적지 디바이스는 가장 최근에 프로세싱된 프레임이 프레임들의 시퀀스에서 제 1 프레임에 앞선다고 결정하는 것에 응답하여 제 1 프레임에 대응하는 제 2 패킷의 제 1 사본을 버퍼링할 수도 있다. 목적지 디바이스는, 제 2 패킷을 수신 시, 제 2 프레임에 대응하는 제 2 패킷의 제 2 사본을 버퍼링할 수도 있다.
목적지 디바이스는 지터-제거 버퍼로부터의 프레임들을 프로세싱할 수도 있다. 예를 들어, 목적지 디바이스는 제 1 프레임의 제 1 생성 타임스탬프에 기초하여 프로세싱될 다음 프레임이 제 1 프레임이라고 결정할 수도 있다. 제 1 패킷이 제 1 프레임의 플레이아웃을 위한 시간에 맞춰 수신되지 않았다면, 목적지 디바이스는 제 2 패킷으로부터의 부분 데이터를 프로세싱할 수도 있다. 목적지 디바이스는 그 부분 데이터에 기초하여 프로세싱된 스피치 신호를 생성할 수도 있다. 부분 데이터에 기초하여 생성된 프로세싱된 스피치 신호는 제 1 프레임에 대응하는 임의의 데이터 없이 생성된 프로세싱된 스피치 신호보다 더 나은 오디오 품질을 가질 수도 있다.
목적지 디바이스는 지터-제거 버퍼에서 제 1 버퍼 엔트리를 가산 (또는 업데이트) 함으로써 제 2 패킷의 제 1 사본을 버퍼링할 수도 있다. 제 1 버퍼 엔트리는 제 2 패킷의 제 1 사본을 포함 (또는 제 2 패킷의 제 1 사본의 로케이션을 표시) 할 수도 있다. 제 1 버퍼 엔트리는 제 1 프레임과 연관될 수도 있다. 예를 들어, 제 1 버퍼 엔트리는 제 1 생성 타임스탬프를 표시할 수도 있다. 제 1 프레임에 대응하는 버퍼 엔트리 (예컨대, 제 1 버퍼 엔트리) 에 부분 데이터가 저장되도록 제 2 패킷을 이중-인큐잉하는 것은, 제 1 프레임 데이터를 포함하는 제 1 패킷이 손실되었다고 (또는 수신되지 않았다고) 결정하는 일 없이, 목적지 디바이스가 부분 데이터를 더 효율적으로 프로세싱하는 것을 가능하게 할 수도 있다. 예를 들어, 이중-인큐잉 없다면, 목적지 디바이스는 제 1 프레임이 프로세싱될 다음 프레임일 때 지터-제거 버퍼에 제 1 프레임에 대응하는 버퍼 엔트리가 없다고 결정하는 것에 응답하여 제 1 패킷이 손실되었다고 결정할 수도 있다. 목적지 디바이스는, 제 1 패킷이 손실되었다는 결정에 응답하여, 제 1 프레임에 대응하는 부분 데이터를 포함하는 다른 버퍼 엔트리를 지터-제거 버퍼가 포함하는지의 여부를 결정할 수도 있다. 목적지 디바이스는 다른 버퍼 엔트리가 부분 데이터를 포함한다고 결정하는 것에 응답하여 다른 버퍼 엔트리를 프로세싱할 수도 있다. 이중-인큐잉이 있다면, 목적지 디바이스는 (예컨대, 제 1 프레임의 부분 사본을 지터-제거 버퍼에서 검색하는 일 없이) 제 1 프레임이 프로세싱될 다음 프레임이라고 결정하는 것에 응답하여 제 1 버퍼 엔트리를 프로세싱할 수도 있다.
목적지 디바이스는 플레이아웃 지연 (예컨대, 최소 플레이아웃 지연) 을 갖는 이점들과 지연된 프로세싱의 단점들 사이에서 균형을 잡기 위해 부분 데이터를 프로세싱할 수도 있다. 플레이아웃 지연을 갖는 것의 이점들은 후속 프레임들이 프로세싱될 시간에 후속 프레임들에 연관되는 패킷들이 수신되었을 공산을 증가시키는 것을 포함할 수도 있다. 지연된 프로세싱의 단점들은 증가된 단 대 단 지연을 포함할 수도 있다.
목적지 디바이스는 프레임이 지터-제거 버퍼에 없다고 결정하는 것에 응답하여 소거 (erasure) 를 플레이 (play) 할 수도 있다. 예를 들어, 목적지 디바이스는 제 2 패킷을 수신하기에 앞서 제 1 프레임에 대응하는 소거를 플레이할 수도 있다. 목적지 디바이스는 프레임들의 시퀀스에서 제 1 프레임에 후속하는 프레임이 프로세싱되지 않았다고 결정하는 것에 응답하여 제 1 프레임에 대응하는 소거를 플레이하는 것에 후속하여 제 1 프레임 (예컨대, 부분 데이터) 을 프로세싱할 수도 있다. 예를 들어, 목적지 디바이스는 가장 최근에 프로세싱된 프레임이 프레임들의 시퀀스에서 제 1 프레임에 앞선다고 결정하는 것에 응답하여 제 1 프레임 (예컨대, 부분 데이터) 을 프로세싱할 수도 있다.
제 1 프레임에 대응하는 소거를 플레이하는 것에 후속하여 제 1 프레임 (예컨대, 부분 데이터) 을 프로세싱하는 것이 암시적 버퍼 적응 (implicit buffer adaptation, IBA) 을 가능하게 할 수도 있다. 예를 들어, 제 1 프레임에 대응하는 소거를 플레이하는 것에 후속하여 제 1 프레임의 부분 데이터를 버퍼링함으로써 지터-제거 버퍼의 버퍼 깊이가 (예컨대, 1 프레임만큼) 암시적으로 증가될 수도 있다. 제 1 프레임에 대응하는 소거는 시간 t0에 플레이될 수도 있고 제 1 프레임에 대응하는 부분 데이터는 시간 t1에 프로세싱될 수도 있다. 시간 t1에 프로세싱될 것이었던 후속 프레임 (예컨대, 제 2 프레임) 은 시간 t2에 프로세싱될 수도 있다. 후속 프레임의 (예컨대, 시간 t1부터 시간 t2까지의) 프로세싱 지연이 제 1 프레임의 플레이아웃 지속기간 (예컨대, 20 밀리초) 에 대응할 수도 있다. 후속 프레임 (예컨대, 제 2 프레임) 에 뒤따르는 프레임들 (예컨대, 제 3 프레임) 의 프로세싱은 프로세싱 지연에 의해 또한 지연될 수도 있다. 지터-제거 버퍼는 프로세싱 지연에 대응하는 추가적인 시간을 위해 후속 프레임들 (예컨대, 제 2 프레임 및 제 3 프레임) 의 프레임 데이터를 저장할 수도 있다. 지터-제거 버퍼는 암시적 버퍼 적응의 결과로서 더 많은 프레임들에 대응하는 프레임 데이터를 저장할 수도 있다. 예를 들어, 시간 t1에 후속 프레임을 제거하는 대신 시간 t1부터 시간 t2까지 지터-제거 버퍼에 후속 프레임 (예컨대, 제 2 프레임) 을 유지하는 것은 시간 t1 후 지터-제거 버퍼에 저장되는 프레임들의 수를 (예컨대, 1 프레임만큼) 증가시킬 수도 있다.
특정 예에서, 지터-제거 버퍼의 깊이는 입력 오디오 신호에서의 후속 무음 (silence) 기간 후 복귀 (예컨대, 1 프레임만큼 감소) 할 수도 있다. 예를 들어, 목적지 디바이스는 후속 프레임에 연관되는 버퍼링 기간이 (예컨대, 추가적인 지연 없이) 만료되었다고 결정하는 것에 응답하여 무음 기간 후 후속 프레임을 프로세싱할 수도 있다. 프로세싱된 오디오 신호는 입력 오디오 신호보다 더 짧은 무음을 포함할 수도 있다.
암시적 버퍼 적응의 결과로서, 지터-제거 버퍼의 깊이는 변화하는 네트워크 상태들에 대해 동적으로 조정될 수도 있다. 예를 들어, 네트워크 상태들 (예컨대, 혼잡 또는 패킷 손실) 이 프레임 (예컨대, 그 프레임의 부분적 데이터) 을 그 프레임에 대응하는 소거의 프로세싱에 후속하여 수신되게 할 때 지터-제거 버퍼의 깊이는 (예컨대, 1 프레임만큼) 증가할 수도 있다. 다른 예로서, 지터-제거 버퍼의 깊이는 후속 무음 후 복귀 (예컨대, 1 프레임만큼 감소) 할 수도 있다.
도 1을 참조하면, 지터-제거 버퍼를 업데이트하기 위해 동작 가능한 시스템의 특정 구체적인 예가 개시되고 전체가 100으로 지정된다. 시스템 (100) 은 네트워크 (190) 를 통해 하나 이상의 다른 디바이스들 (예컨대, 소스 디바이스 (104)) 과 통신하는 목적지 디바이스 (102) 를 포함할 수도 있다. 소스 디바이스 (104) 는 마이크로폰 (146) 에 커플링될 수도 있거나 또는 그 마이크로폰과 통신할 수도 있다. 예를 들어, 소스 디바이스 (104) 는 마이크로폰 (146) 을 포함할 수도 있다. 목적지 디바이스 (102) 는 스피커 (142) 에 커플링될 수도 있다. 목적지 디바이스 (102) 는 메모리 (176) 에 커플링된, 또는 그 메모리와 통신하는 분석기 (122) 를 포함할 수도 있다. 목적지 디바이스 (102) 는 수신기 (124), 지터-제거 버퍼 (126), 스피치 디코더 (160), 또는 그 조합을 포함할 수도 있다. 특정 구현예에서, 분석기 (122) 는 지터-제거 버퍼 (126) 와 스피치 디코더 (160) 사이에서 인터페이스 모듈로서 동작하도록 구성될 수도 있다. 메모리 (176) 는 분석 데이터 (120) 를 저장하도록 구성될 수도 있다. 분석 데이터 (120) 는 프레임 오프셋 (136) (예컨대, 1 프레임 이상), 마지막 생성 타임스탬프 (138), 플레이아웃 지연 (128), 버퍼 타임라인 (106), 또는 그 조합을 포함할 수도 있다.
목적지 디바이스 (102) 는 도 1에 예시된 것보다 더 적거나 또는 더 많은 컴포넌트들을 포함할 수도 있다. 예를 들어, 목적지 디바이스 (102) 는 하나 이상의 프로세서들, 하나 이상의 메모리 유닛들, 또는 양쪽 모두를 포함할 수도 있다. 목적지 디바이스 (102) 는 네트워크형 또는 분산형 컴퓨팅 시스템을 포함할 수도 있다. 예를 들어, 메모리 (176) 는 네트워크형 또는 분산형 메모리일 수도 있다. 특정 구체적인 예에서, 목적지 디바이스 (102) 는 통신 디바이스, 헤드셋, 디코더, 스마트 폰, 셀룰러 폰, 모바일 통신 디바이스, 랩톱 컴퓨터, 컴퓨터, 태블릿, 개인 정보 단말기 (PDA), 셋톱 박스, 비디오 플레이어, 엔터테인먼트 유닛, 디스플레이 디바이스, 텔레비전, 게이밍 콘솔, 뮤직 플레이어, 라디오, 디지털 비디오 플레이어, 디지털 비디오 디스크 (DVD) 플레이어, 튜너, 카메라, 내비게이션 디바이스, 또는 그 조합을 포함할 수도 있다.
동작 동안, 제 1 사용자 (152) 가 제 2 사용자 (154) 와의 음성 통화에 참여할 수도 있다. 제 1 사용자 (152) 는 목적지 디바이스 (102) 를 사용할 수도 있고 제 2 사용자 (154) 는 음성 통화를 위해 소스 디바이스 (104) 를 사용할 수도 있다. 음성 통화 동안, 제 2 사용자 (154) 는 소스 디바이스 (104) 에 커플링된 마이크로폰 (146) 에 말을 할 수도 있다. 입력 오디오 신호 (130) 가 제 2 사용자 (154) 에 의해 말해진 단어의 부분, 단어, 또는 다수의 단어들에 대응할 수도 있다. 입력 오디오 신호 (130) 는 오디오 프레임들의 시퀀스에 대응할 수도 있다. 예를 들어, 오디오 프레임들의 시퀀스는 제 1 프레임 (184) 과 제 2 프레임 (186) 을 포함할 수도 있다. 제 1 프레임 (184) (예컨대, 오디오 프레임 N) 은 오디오 프레임들의 시퀀스에서 제 2 프레임 (186) (예컨대, 오디오 프레임 N+3) 보다 이를 수도 있다. 소스 디바이스 (104) 는 제 2 사용자 (154) 로부터 마이크로폰 (146) 을 통해 입력 오디오 신호 (130) 를 수신할 수도 있다. 특정 구현예에서, 마이크로폰 (146) 은 오디오 신호를 캡처할 수도 있고 아날로그-디지털 변환기 (ADC) 가 캡처된 오디오 신호를 아날로그 파형으로부터 디지털 오디오 샘플들로 이루어진 디지털 신호로 변환할 수도 있다. 디지털 오디오 샘플들은 보코더 (음성 인코더-디코더) 에 의해 "압축될" 수도 있다. 보코더의 인코더가 디지털 오디오 샘플들을 압축하고 패킷들 (예컨대, 제 1 패킷 (132) 및 제 2 패킷 (134)) 의 시퀀스를 형성할 수도 있다. 제 1 패킷 (132) 은 제 1 프레임 (184) 에 대응하는 제 1 프레임 데이터 (164) 를 포함할 수도 있다. 제 2 패킷 (134) 은 제 2 프레임 (186) 에 대응하는 제 2 프레임 데이터 (166) 를 포함할 수도 있다.
제 1 패킷 (132) 은 제 1 프레임 (184) 의 제 1 생성 타임스탬프 (예컨대, RTP 타임스탬프) 를 표시할 수도 있다. 제 2 패킷 (134) 은 제 2 프레임 (186) 의 제 2 생성 타임스탬프 (예컨대, RTP 타임스탬프) 를 표시할 수도 있다. 제 1 생성 타임스탬프와 제 2 생성 타임스탬프는 제 1 프레임 (184) 이 오디오 프레임들의 시퀀스에서 제 2 프레임 (186) 보다 이르다는 것을 표시할 수도 있다. 제 1 생성 타임스탬프와 제 2 생성 타임스탬프는 소스 디바이스 (104) 에 의해 생성될 수도 있다. 소스 디바이스 (104) 는 소스 디바이스 (104) 의 클록 (이는 목적지 디바이스 (102) 의 클록과 동기될 수도 있거나 또는 동기되지 않을 수도 있음) 에 기초하여 특정 생성 타임스탬프를 결정할 수도 있다. 부가적으로 또는 대안적으로, 소스 디바이스 (104) 는 소스 디바이스 (104) 에 의해 인코딩된 샘플들의 수에 기초하여 특정 생성 타임스탬프를 결정할 수도 있다. 특정 예들에서, 생성 타임스탬프는 RTP 유닛들의 측면에서 표현된다. 소스 디바이스 (104) 는 제 1 생성 타임스탬프를 제 1 패킷 (132) 에 인코딩 또는 첨부하고 제 2 생성 타임스탬프를 제 2 패킷 (134) 에 인코딩 또는 첨부할 수도 있다. 생성 타임스탬프는 프레임들의 시퀀스의 순서를 표시할 수도 있다.
일부 구현예들에서, 하나 이상의 패킷들이 부분적 리던던시를 가질 수도 있다. 예를 들어, 후속 패킷 (예컨대, 제 2 패킷 (134)) 이 이전 오디오 프레임 (예컨대, 오디오 프레임 N) 을 복원하는데 사용될 수도 있는 용장성 데이터 (예컨대, 제 1 프레임 데이터 (164) 의 부분 사본) 를 포함할 수도 있다. 예를 들어, 제 2 패킷 (134) 은, 제 1 프레임 (184) 의 재생을 가능하게 하는 제 1 프레임 데이터 (164) 의 적어도 부분에 대응하지만, 제 1 프레임 데이터 (164) 를 사용하는 것과 비교하여 아마도 감소된 해상도에서의 제 1 부분 데이터 (174) 를 포함할 수도 있다. 특정 구현예에서, 용장성 데이터 (예컨대, 제 1 부분 데이터 (174)) 는 "중요한" 스피치 프레임에 대응할 수도 있다. 예를 들어, 중요 스피치 프레임의 손실이 목적지 디바이스 (102) 에서 생성된 프로세싱된 스피치 신호에서 상당한 품질 영향 (예컨대, 사용자에게 눈에 띄는 품질 영향) 을 유발할 수도 있다.
특정 구현예에서, 소스 디바이스 (104) 와 목적지 디바이스 (102) 는 일정-비트레이트 (예컨대, 초 당 13.2 킬로비트 (kbps)) 채널 상에서 동작할 수도 있다. 이 구현예에서, 일차 데이터 (예컨대, 제 2 프레임 데이터 (166)) 에 대응하는 일차 프레임 비트레이트가 용장성 데이터 (예컨대, 제 1 부분 데이터 (174)) 를 수용하기 위해 (예컨대, 9.6 kbps로) 감소될 수도 있다. 예를 들어, 일정-비트레이트의 나머지 비트레이트 (예컨대, 3.6 kbps) 가 용장성 데이터에 대응할 수도 있다. 특정 예에서, 일차 프레임 비트레이트의 감소는 전체 스피치 품질에 대한 영향을 감소시킬 입력 오디오 신호 (130) 의 특성들에 의존하여 소스 디바이스 (104) 에서 수행될 수도 있다. 소스 디바이스 (104) 는 패킷들 (예컨대, 제 1 패킷 (132), 제 2 패킷 (134), 또는 둘 다) 의 시퀀스를 목적지 디바이스 (102) 에 네트워크 (190) 를 통해 송신할 수도 있다.
목적지 디바이스 (102) 는 패킷들의 시퀀스 중 하나 이상의 패킷들 (예컨대, 제 1 패킷 (132), 제 2 패킷 (134), 또는 둘 다) 을 수신할 수도 있다. 분석기 (122) 는 목적지 디바이스 (102) 에 의해 수신된 패킷들 (예컨대, 제 1 패킷 (132), 제 2 패킷 (134), 또는 둘 다) 을 지터-제거 버퍼 (126) 에 저장할 수도 있다. 예를 들어, 분석기 (122) 는 목적지 디바이스 (102) 로부터 패킷들을 수신할 수도 있고 그 패킷들을 지터-제거 버퍼 (126) 에 저장할 수도 있다. 특정 예에서, 그 패킷들은 목적지 디바이스 (102) 에 비순서적으로 수신될 수도 있다. 분석기 (122) 는 그 패킷들이 비순서적이면 지터-제거 버퍼 (126) 에서 하나 이상의 패킷들을 재순서화할 수도 있다. 소스 디바이스 (104) 에 의해 전송된 패킷들의 시퀀스 중 하나 이상의 패킷들이 수신되지 않을 수도 있거나, 또는 목적지 디바이스 (102) 에 의해 에러들과 함께 수신될 수도 있다. 예를 들어, 패킷 (예컨대, 제 1 패킷 (132)) 이 패킷 손실로 인해 수신되지 않을 수도 있거나 또는 네트워크 상태들로 인해, 수신기 (124) 에 의해 부분적으로 수신될 수도 있다.
일부 환경들에서, 목적지 디바이스 (102) 는 제 2 패킷 (134) 을 수신할 수도 있고 제 1 패킷 (132) 을 수신하지 않을 수도 있거나 또는 제 1 패킷 (132) 을 수신하기에 앞서 제 2 패킷 (134) 을 수신할 수도 있다. 이러한 환경들에서, 목적지 디바이스 (102) 는 수신기 (124) 로부터 제 2 패킷 (134) 을 수신할 수도 있고 제 2 패킷 (134) 을 분석기 (122) 에 제공할 수도 있다. 분석기 (122) 는 제 2 패킷 (134) 을 수신 시 지터-제거 버퍼 (126) 에서 제 2 패킷 (134) 을 이중-인큐잉 (예컨대, 제 2 패킷의 다수의 사본들을 삽입) 할 수도 있다. 예를 들어, 분석기 (122) 는 제 1 프레임 (184) 이 지터-제거 버퍼 (126) 에 없다고 그리고 제 2 패킷 (134) 이 제 1 부분 데이터를 포함한다고 결정하는 것에 응답하여 제 1 프레임 (184) 에 대해 제 1 버퍼 엔트리 (114) 에 제 2 패킷 (134) 의 제 1 사본을 저장할 수도 있다. 분석기 (122) 는 제 2 프레임 (186) 에 대해 제 2 버퍼 엔트리 (118) 에 제 2 패킷 (134) 의 제 2 사본을 또한 저장할 수도 있다. 분석기 (122) 는 제 1 버퍼 엔트리 (114) 가 프레임의 프레임 데이터의 부분 사본에 대응함을 표시하는 특정 값 (예컨대, 1) 으로 제 1 버퍼 엔트리 (114) 의 제 1 플래그 (144) 를 설정할 수도 있다. 분석기 (122) 는 제 2 버퍼 엔트리 (118) 가 프레임의 프레임 데이터의 전체 사본에 대응함을 표시하는 특정 값 (예컨대, 0) 으로 제 2 버퍼 엔트리 (118) 의 제 2 플래그 (156) 를 설정할 수도 있다.
특정 구현예에서, 분석기 (122) 는 패킷을 파싱함으로써 프레임 오프셋 (136) (예컨대, 부분 프레임과 대응하는 전체 프레임 사이의 패킷들의 수) 을 결정할 수도 있다. 분석기 (122) 는 패킷이 프레임의 프레임 데이터의 부분 사본을 포함한다고 결정하는 것에 응답하여 프레임 오프셋 (136) 을 결정하기 위해 패킷을 파싱할 수도 있다. 예를 들어, 분석기 (122) 는 제 2 패킷 (134) 을 파싱하여 제 1 부분 데이터 (174) 의 제 1 프레임 오프셋 (예컨대, 1) 을 결정할 수도 있으며, 제 1 프레임 오프셋은 제 1 부분 데이터 (174) 가 제 1 프레임 (184) 에 대응함을 표시한다. 부가적으로 또는 대안적으로, 제 2 프레임 데이터 (166) 는 프레임 오프셋 (136) 을 포함할 수도 있거나 또는 그 프레임 오프셋을 표시할 수도 있다. 다른 특정 구현예들에서, 프레임 오프셋 (136) 은 1보다 큰 임의의 수, 이를테면 2, 3, 또는 5일 수도 있다.
분석기 (122) 는 제 2 패킷 (134) 에 의해 표시된 제 2 프레임 (186) 의 제 2 생성 타임스탬프에 기초하여 제 2 생성 타임스탬프 (158) 를 결정할 수도 있다. 분석기 (122) 는 제 2 버퍼 엔트리 (118) 에 제 2 생성 타임스탬프 (158) 를 저장할 수도 있다. 분석기 (122) 는 제 2 생성 타임스탬프 (158) 및 프레임 오프셋 (136) 에 기초하여 제 1 생성 타임스탬프 (148) 를 결정할 수도 있다 (예컨대, 제 1 생성 타임스탬프 (148) = (제 2 생성 타임스탬프 (158) - (프레임 오프셋 (136) * 프레임 당 샘플들의 수)). 분석기 (122) 는 제 1 생성 타임스탬프 (148) 를 제 1 버퍼 엔트리 (114) 에 저장할 수도 있다. 특정 예에서, 제 2 패킷 (134) 은 프레임 오프셋 (136), 프레임 당 샘플들의 수 (예컨대, 프레임 당 640 개 샘플들), 또는 둘 다를 표시할 수도 있다.
분석기 (122) 는 제 2 패킷 (134) 의 수신 타임스탬프에 기초하여 제 2 프레임 (186) 의 제 2 수신 타임스탬프 (150) 를 결정할 수도 있다. 분석기 (122) 는 제 2 수신 타임스탬프 (150) 를 제 2 버퍼 엔트리 (118) 에 저장할 수도 있다. 수신 타임스탬프 (이는 프레임 수신 타임스탬프라고 또한 지칭될 수도 있음) 가 프레임이 목적지 디바이스 (102) 에 이용 가능하거나 또는 그 목적지 디바이스에 의해 수신되는 시간을 표시할 수도 있다. 수신 타임스탬프가 과거 시간 (예컨대, 특정 프레임이 이용 가능하게 되었어야 하거나 또는 수신되었어야 하는 때) 을 표시하도록 또한 조정될 수도 있다. 수신 타임스탬프는 목적지 디바이스 (102) 의 클록 (이는 소스 디바이스 (104) 의 클록과 동기될 수도 있거나 또는 동기되지 않을 수도 있음) 에 기초하여 목적지 디바이스 (102) 에 의해 생성될 수도 있다. 부가적으로 또는 대안적으로, 수신 타임스탬프는 소스 디바이스 (104) 에 의해 표시된 샘플들의 수 (예컨대, 인코딩된 샘플들의 수) 에 기초할 수도 있다.
분석기 (122) 는 과거 시간 (예컨대, 특정 프레임이 이용 가능했어야 하거나 또는 수신되었어야 하는 때) 을 표시하기 위해 패킷의 수신 타임스탬프를 조정함으로써 패킷 (예컨대, 부분적으로 용장성 패킷) 의 특정 프레임 (예컨대, 부분 프레임) 의 수신 타임스탬프를 생성할 수도 있다. 예를 들어, 분석기 (122) 는 제 2 패킷 (134) 의 수신 타임스탬프에 기초하여 그리고 프레임 오프셋 (136) 에 기초하여 제 1 프레임 (184) 의 제 1 수신 타임스탬프 (140) 를 생성할 수도 있다. 분석기 (122) 는 프레임 오프셋 (136) 과 프레임 플레이아웃 지속기간을 곱셈함으로써 특정 지속기간을 결정할 수도 있다. 분석기 (122) 는 제 2 패킷 (134) 의 수신 타임스탬프로부터 적어도 특정 지속기간을 감산함으로써 제 1 수신 타임스탬프 (140) 를 생성할 수도 있다. 예시하기 위해, 분석기 (122) 는 다음의 수학식에 기초하여 제 1 수신 타임스탬프 (140) 를 결정할 수도 있다: FRTS= PRTS - (FO* FPD) - 1 밀리초, 여기서 FRTS = 제 1 수신 타임스탬프 (140), PRTS = 제 2 패킷 (134) 의 수신 타임스탬프, FO = 프레임 오프셋 (136), 그리고 FPD = 프레임 플레이아웃 지속기간이다. 특정 구현예에서, 제 2 패킷 (134) 은 프레임 오프셋 (136) (예컨대, 3), 프레임 플레이아웃 지속기간 (예컨대, 20 밀리초 (ms)), 또는 둘 다를 표시할 수도 있다. 분석기 (122) 는 제 1 수신 타임스탬프 (140) 를 제 1 버퍼 엔트리 (114) 에 저장할 수도 있다. 제 1 수신 타임스탬프 (140) 는 제 2 수신 타임스탬프 (150) 에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시할 수도 있다.
특정 예에서, 분석기 (122) 는 제 2 패킷 (134) 의 제 1 사본을 메모리 (176) 의 제 1 로케이션에 저장할 수도 있고 제 2 패킷 (134) 의 제 2 사본을 메모리 (176) 의 제 2 로케이션에 저장할 수도 있다. 제 1 버퍼 엔트리 (114) 는 제 1 로케이션을 표시 (예컨대, 제 1 로케이션에의 제 1 포인터를 포함) 할 수도 있다. 제 2 버퍼 엔트리 (118) 는 제 2 로케이션을 표시 (예컨대, 제 2 로케이션에의 제 2 포인터를 포함) 할 수도 있다.
분석기 (122) 는, 본 명세서에서 설명되는 바와 같이, 제 1 플레이아웃 시간에 제 1 프레임 (184) 에 대응하는 제 1 버퍼 엔트리 (114) 를 프로세싱할 수도 있다. 분석기 (122) 는 제 1 부분 데이터 (174) 를 스피치 디코더 (160) 에 제공할 수도 있다. 특정 구현예에서, 분석기 (122) 는 스피치 디코더 (160) 로부터 제 1 프레임 (184) 에 대한 요청을 수신하는 것에 응답하여 제 1 부분 데이터 (174) 를 스피치 디코더 (160) 에 제공할 수도 있다. 분석기 (122) 는, 본 명세서에서 설명되는 바와 같이, 제 2 플레이아웃 시간에 제 2 프레임 (186) 에 대응하는 제 2 버퍼 엔트리 (118) 를 프로세싱할 수도 있다. 분석기 (122) 는 제 2 프레임 데이터 (166) 를 스피치 디코더 (160) 에 제공할 수도 있다. 특정 구현예에서, 분석기 (122) 는 스피치 디코더 (160) 로부터 제 2 프레임 (186) 에 대한 요청을 수신하는 것에 응답하여 제 2 프레임 데이터 (166) 를 스피치 디코더 (160) 에 제공할 수도 있다. 스피치 디코더 (160) 는 제 1 부분 데이터 (174) 및 제 2 프레임 데이터 (166) 에 기초하여 프로세싱된 오디오 신호 (116) 를 생성할 수도 있다. 예를 들어, 스피치 디코더 (160) 는 제 1 부분 데이터 (174) 에 기초하여 제 1 생성된 프레임 (194) 을 생성할 수도 있고 제 2 프레임 데이터 (166) 에 기초하여 제 2 프레임 (186) 을 생성할 수도 있다. 프로세싱된 오디오 신호 (116) 는 제 1 생성된 프레임 (194) 및 제 2 프레임 (186) 에 대응할 수도 있다. 스피치 디코더 (160) 는 프로세싱된 오디오 신호 (116) 를, 스피커 (142) 를 통해, 제 1 사용자 (152) 에게 출력할 수도 있다.
특정 예에서, 제 1 프레임 데이터 (164) 는 제 1 프레임 (184) 의 제 1 스피치 파라미터들에 대응할 수도 있다. 제 1 부분 데이터 (174) 는 제 1 스피치 파라미터들의 서브세트를 포함할 수도 있다. 다른 특정 예에서, 제 2 프레임 데이터 (166) 는 제 2 프레임 (186) 의 제 2 스피치 파라미터들에 대응할 수도 있고 제 1 부분 데이터 (174) 는 제 1 스피치 파라미터들과 제 2 스피치 파라미터들 사이의 차이에 대응할 수도 있다. 이 예에서, 분석기 (122) 는 제 2 스피치 파라미터들 및 제 1 부분 데이터 (174) 의 합에 기초하여 제 1 스피치 파라미터들을 생성할 수도 있다. 분석기 (122) 는 제 1 스피치 파라미터들에 기초하여 프로세싱된 오디오 신호 (116) 를 생성할 수도 있다. 심지어 제 1 패킷 (132) 이 지터-제거 버퍼 (126) 로부터 누락될 때에도 프로세싱된 오디오 신호 (116) 는 제 1 스피치 파라미터들에 기초하여 생성될 수도 있다는 것이 이해될 것이다. 특정 예에서, 분석기 (122) 는 제 2 패킷 (134), 제 1 부분 데이터 (174), 제 2 프레임 데이터 (166), 제 1 스피치 파라미터들, 제 2 스피치 파라미터들, 또는 그 조합을, 스피치 디코더 (160) 로 제공할 수도 있고, 스피치 디코더 (160) 는 프로세싱된 오디오 신호 (116) 를 생성할 수도 있다. 손실 패킷 (예컨대, 제 1 패킷 (132)) 을 보상하기 위해 제 1 부분 데이터 (174) 를 사용하여 생성된 프로세싱된 오디오 신호 (116) 는 제 2 프레임 데이터 (166) 에만 기초하여 생성되는 프로세싱된 스피치 신호보다 더 나은 오디오 품질을 가질 수도 있다. 예를 들어, 프로세싱된 오디오 신호 (116) 는 제 2 프레임 데이터 (166) 에 기초하여 그리고 제 1 프레임 데이터 (164) (또는 제 1 부분 데이터 (174)) 에 기초하지 않고 생성된 프로세싱된 스피치 신호보다 더 적은 사용자 인지가능 아티팩트들을 가질 수도 있다.
특정 구현예에서, 분석기 (122) 는 특정 프레임에 대응하는 버퍼링 기간이 만료되기까지 지터-제거 버퍼 (126) 에서의 각각의 특정 프레임을 프로세싱하는 것을 하지 않을 수도 있다. 분석기 (122) 는 특정 프레임의 수신 타임스탬프 및 플레이아웃 지연 (128) (예컨대, 최소 플레이아웃 지연) 에 기초하여 특정 프레임에 대응하는 버퍼링 기간을 결정할 수도 있다.
제 1 버퍼 엔트리 (114) 에 제 1 수신 타임스탬프 (140) 를 저장하는 것은 제 2 프레임 (186) 에 대응하는 제 2 버퍼링 기간의 만료에 앞서 제 1 프레임 (184) 에 대응하는 제 1 버퍼링 기간이 만료하게 할 수도 있다. 예를 들어, 분석기 (122) 는 제 1 수신 타임스탬프 (140) 및 플레이아웃 지연 (128) 의 합에 기초하여 제 1 버퍼링 기간을 결정할 수도 있다. 분석기 (122) 는 제 2 수신 타임스탬프 (150) 및 플레이아웃 지연 (128) 의 합에 기초하여 제 2 버퍼링 기간을 결정할 수도 있다. 제 1 수신 타임스탬프 (140) 는 제 2 수신 타임스탬프 (150) 에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시할 수도 있다. 분석기 (122) 는, 비록 제 2 프레임 (186) 에 대응하는 버퍼링 기간이 여전히 진행 중일 수도 있더라도, 제 1 프레임 (184) 에 대응하는 버퍼링 기간이 만료된다고 결정하는 것에 응답하여 제 1 플레이아웃 시간에 제 1 버퍼 엔트리 (114) (예컨대, 제 1 부분 데이터 (174)) 를 프로세싱할 수도 있다. 예를 들어, 제 1 프레임 (184) 의 제 1 플레이아웃 시간은 제 2 프레임 (186) 의 제 2 플레이아웃 시간보다 이를 수도 있다.
분석기 (122) 는 플레이된 프레임들을 추적하기 위해 그리고 프로세싱될 다음 프레임을 표시하기 위해 버퍼 타임라인 (106) 를 유지할 수도 있다. 버퍼 타임라인 (106) 은 버퍼 타임라인 (106) 에 의해 표시된 생성 타임스탬프 후의 다음인 특정 생성 타임스탬프를 프로세싱될 다음 프레임이 가짐을 표시할 수도 있다. 예를 들어, 프레임들이 프로세싱되고 지터-제거 버퍼 (126) 로부터 제거됨에 따라, 분석기 (122) 는 특정 프레임을 프로세싱하는 것에 응답하여 특정 프레임의 생성 타임스탬프 (예컨대, RTP 타임스탬프) 를 표시하기 위해 버퍼 타임라인 (106) (예컨대, RTP 타임라인) 의 값을 업데이트 또는 설정할 수도 있다. 분석기 (122) 는 또한, 또는 대안적으로, 특정 프레임을 프로세싱하는 것에 응답하여 특정 프레임의 생성 타임스탬프를 표시하기 위해 마지막 생성 타임스탬프 (138) 를 업데이트할 수도 있다. 분석기 (122) 는 가장 최근에 프로세싱된 프레임의 생성 타임스탬프를 추적하기 위해 마지막 생성 타임스탬프 (138) 를 유지할 수도 있다.
패킷들의 손실, 또는 입력 오디오 신호 (130) 에서의 무음이, 버퍼 타임라인 (106) 이 마지막 생성 타임스탬프 (138) 와는 상이해지게 할 수도 있다. 예를 들어, 분석기 (122) 는 특정 프레임이 지터-제거 버퍼 (126) 에 없다고 결정하는 것에 응답하여 소거를 플레이할 수도 있다. 분석기 (122) 는 소거를 플레이하는 것에 응답하여 프레임 플레이아웃 지속기간 (예컨대, 20 ms) 에 기초하여 버퍼 타임라인 (106) 의 값을 업데이트할 (예컨대, 증가시킬) 수도 있다. 이 예에서, 버퍼 타임라인 (106) 의 값은 마지막 생성 타임스탬프 (138) 를 초과할 수도 있다. 특정 구현예에서, 분석기 (122) 는 특정 프레임이 지터-제거 버퍼 (126) 에 없음을 표시하는 특정 입력을 스피치 디코더 (160) 에 제공함으로써 소거를 플레이할 수도 있다. 특정 구현예에서, 분석기 (122) 는 대응하는 버퍼링 기간 (예컨대, 제 1 버퍼링 기간) 이 만료되었다고 그리고 대응하는 프레임 (예컨대, 제 1 프레임 (184)) 이 프로세싱될 다음 프레임임을 버퍼 타임라인 (106) 의 값이 표시한다고 결정하는 것에 응답하여 특정 플레이아웃 시간에 특정 버퍼 엔트리 (예컨대, 제 1 버퍼 엔트리 (114)) 를 프로세싱할 수도 있다.
특정 구현예에서, 분석기 (122) 는 특정 프레임의 생성 타임스탬프 (예컨대, RTP 타임스탬프) 가 가장 최근에 프로세싱된 프레임의 생성 타임스탬프를 초과한다고 결정하는 것에 응답하여 그 특정 프레임에 대해 지터-제거 버퍼 (126) 에 특정 패킷의 사본을 저장할 수도 있다. 예를 들어, 분석기 (122) 는, 제 2 생성 타임스탬프 (158) 가 마지막 생성 타임스탬프 (138) 를 초과한다고 결정하는 것에 응답하여 제 2 버퍼 엔트리 (118) 에 제 2 패킷 (134) 을 포함시켜, 가장 최근에 프로세싱된 프레임이 오디오 프레임들의 시퀀스에서 제 2 프레임 (186) 보다 더 이르다는 것을 표시할 수도 있다. 다른 예로서, 분석기 (122) 는, 제 1 생성 타임스탬프 (148) 가 마지막 생성 타임스탬프 (138) 를 초과한다고 결정하는 것에 응답하여 제 1 버퍼 엔트리 (114) 에 제 2 패킷 (134) 을 포함시켜, 가장 최근에 프로세싱된 프레임이 오디오 프레임들의 시퀀스에서 제 1 프레임 (184) 보다 더 이르다는 것을 표시할 수도 있다.
분석기 (122) 는 특정 프레임의 생성 타임스탬프가 마지막 생성 타임스탬프 (138) 를 초과할 때 버퍼 타임라인 (106) 의 값과는 독립적으로 특정 프레임에 대해 특정 패킷의 사본을 저장하기 위해 지터-제거 버퍼 (126) 를 업데이트할 수도 있다. 예를 들어, 제 1 생성 타임스탬프 (148) 는 버퍼 타임라인 (106) 의 값 이하가 되어, 분석기 (122) 가 제 1 프레임 (184) 에 대응하는 소거를 플레이하였음을 표시할 수도 있다 (예컨대, 제 1 프레임 데이터 (164) 또는 제 1 부분 데이터 (174) 는 제 1 프레임 (184) 의 플레이아웃 시간 후에 지터-제거 버퍼 (126) 에서 수신되었으며, 그래서 제 1 프레임 (184) 대신 소거가 플레이되었다). 이 예에서, 분석기 (122) 는 제 2 패킷 (134) 의 제 1 사본을 제 1 버퍼 엔트리 (114) 에 저장하기 위해 지터-제거 버퍼 (126) 를 업데이트할 수도 있다. 분석기 (122) 는 제 2 패킷 (134) 의 제 1 사본이 제 1 버퍼 엔트리 (114) 에 저장될 것이라고 그리고 제 1 프레임 (184) 에 대응하는 소거가 플레이되었다고 결정하는 것에 응답하여, 제 1 프레임 (184) 이 프로세싱될 다음 프레임임을 표시하기 위해 버퍼 타임라인 (106) 을 업데이트할 수도 있다. 이 예에서, 소거 후에 제 1 버퍼 엔트리 (114) 를 프로세싱하는 것은 후속 프레임들의 프로세싱에 추가적인 지연을 추가할 수도 있는데, 도 2a 내지 도 5 및 도 7을 참조하여 추가로 설명되는 바와 같이 소거가 제 1 프레임 (184) 에 대응하여 이미 플레이되었기 때문이다. 추가적인 지연은 더 많은 수의 프레임들을 버퍼링하기 위해 지터-제거 버퍼 (126) 의 버퍼 깊이를 (예컨대, 1 프레임만큼) 암시적으로 증가되게 함으로써 암시적 버퍼 적응을 초래할 수도 있다. 특정 구현예에서, 버퍼 깊이는 입력 오디오 신호 (130) 에서의 후속 무음 기간 후 복귀 (예컨대, 1 프레임만큼 감소) 할 수도 있다. 예를 들어, 분석기 (122) 는 후속 프레임에 연관되는 버퍼링 기간이 (예컨대, 추가적인 지연 없이) 만료되었다고 결정하는 것에 응답하여 무음 기간 후 후속 프레임을 프로세싱할 수도 있다. 프로세싱된 오디오 신호 (116) 는 입력 오디오 신호 (130) 보다 더 짧은 무음을 포함할 수도 있다. 암시적 버퍼 적응의 결과로서, 지터-제거 버퍼 (126) 의 깊이는 변화하는 네트워크 상태들에 대해 동적으로 조정될 수도 있다. 예를 들어, 네트워크 상태들 (예컨대, 혼잡 또는 패킷 손실) 이 프레임 (예컨대, 그 프레임의 부분적 데이터) 을 그 프레임에 대응하는 소거의 프로세싱에 후속하여 수신되게 할 때 지터-제거 버퍼의 깊이는 (예컨대, 1 프레임만큼) 증가할 수도 있다. 다른 예로서, 지터-제거 버퍼의 깊이는 후속 무음 후 복귀 (예컨대, 1 프레임만큼 감소) 할 수도 있다.
특정 구현예에서, 분석기 (122) 는 제 2 패킷 (134) 을 수신하는 것에 후속하여 그리고 제 1 버퍼 엔트리 (114) 를 프로세싱하는 것에 앞서 제 1 패킷 (132) 을 수신할 수도 있다. 분석기 (122) 는 제 1 패킷 (132) 을 수신하는 것 및 제 1 패킷 (132) 에 의해 표시된 제 1 생성 타임스탬프가 마지막 생성 타임스탬프 (138) 를 초과한다고 결정하는 것에 응답하여 제 1 버퍼 엔트리 (114) 를 업데이트할 수도 있다. 예를 들어, 분석기 (122) 는 제 1 버퍼 엔트리 (114) 로부터 제 2 패킷 (134) 의 제 1 사본을 제거할 수도 있다. 특정 구현예에서, 분석기 (122) 는 메모리 (176) 로부터 제 1 버퍼 엔트리 (114) 에 대응하는 제 2 패킷 (134) 의 제 1 사본을 삭제 (또는 삭제를 위해 마킹) 할 수도 있다. 분석기 (122) 는 제 1 패킷 (132) 을 제 1 버퍼 엔트리 (114) 에 저장할 수도 있다. 특정 구현예에서, 분석기 (122) 는 제 1 패킷 (132) 을 메모리 (176) 에서의 특정 로케이션에 저장할 수도 있고 제 1 버퍼 엔트리 (114) 에서의 특정 로케이션 (예컨대, 그 특정 로케이션의 주소) 을 표시하기 위해 제 1 버퍼 엔트리 (114) 를 업데이트할 수도 있다. 분석기 (122) 는 제 1 버퍼 엔트리 (114) 가 프레임의 프레임 데이터의 전체 사본에 대응함을 표시하는 특정 값 (예컨대, 0) 으로 제 1 플래그 (144) 를 업데이트할 수도 있다. 분석기 (122) 는 제 1 프레임 (184) 의 제 1 생성 타임스탬프를 표시하기 위해 제 1 생성 타임스탬프 (148) 를 업데이트할 수도 있다. 분석기 (122) 는 제 1 패킷 (132) 의 수신 타임스탬프를 표시하기 위해 제 1 수신 타임스탬프 (140) 를 업데이트할 수도 있다. 분석기 (122) (또는 수신기 (124)) 는 제 1 패킷 (132) 을 수신하는 것에 응답하여 제 1 패킷 (132) 의 수신 타임스탬프를 결정할 수도 있다. 분석기 (122) 는 제 1 버퍼 엔트리 (114) 와 제 2 버퍼 엔트리 (118) 를 프로세싱할 수도 있다. 스피치 디코더 (160) 는 제 1 프레임 데이터 (164) 및 제 2 프레임 데이터 (166) 에 기초하여 프로세싱된 스피치 신호를 생성할 수도 있다.
시스템 (100) 은 프레임에 대응하는 소거를 플레이하는 것에 후속하는 프레임의 프레임 데이터 (예컨대, 부분 사본) 가 지터-제거 버퍼에 버퍼링되는 것을 가능하게 함으로써 암시적 버퍼 적응을 가능하게 할 수도 있다. 프레임에 대응하는 소거를 플레이하는 것에 후속하여 프레임 데이터를 프로세싱하는 것은 프레임 시퀀스의 후속 프레임들의 프로세싱을 지연시켜, 지터-제거 버퍼에 의한 더 많은 프레임들의 버퍼링을 초래할 수도 있다. 지터-제거 버퍼의 깊이가 소거를 플레이하는 것에 후속하여 프레임 데이터를 프로세싱함으로써 암시적으로 증가될 수도 있다. 플레이아웃 지연의 집행에 의해 유발될 수도 있는 프로세싱된 오디오 신호의 인터럽션들은, 버퍼 엔트리가 손실 패킷을 위한 부분 데이터를 저장할 때 버퍼 엔트리에 대응하는 제 1 수신 타임스탬프를 생성함으로써 회피될 수도 있다. 제 1 수신 타임스탬프는 부분 데이터를 포함했던 패킷의 제 2 수신 타임스탬프보다 이른 제 1 시간을 표시할 수도 있다.
시스템 (100) 에 의해 제공되는 하나의 특정 장점은 특정 프레임의 프레임 데이터가 특정 프레임에 대응하는 소거를 플레이하는 것에 후속하여 수신될 때 암시적 버퍼 적응을 가능하게 하는 것이다. 암시적 버퍼 적응은 버퍼 깊이를 증가시키며, 이는, 소스 디바이스 (104) 와 목적지 디바이스 (102) 사이의 단 대 단 지연에서의 영구적 증가 없이, 특정 프레임에 대응하는 소거를 플레이한 후 특정 프레임이 프로세싱되는 것을 허용한다. 따라서, 암시적 버퍼 적응은 단 대 단 지연에서의 일시적인 증가만으로 프로세싱된 오디오 신호 (116) 의 품질을 개선시킨다.
도 2a 내지 도 5는 프레임의 프레임 데이터의 부분 사본이 프레임에 대응하는 소거를 플레이하는 것에 후속하여 수신될 때 도 1의 시스템 (100) 의 동작의 비제한적 예들을 도시한다. 도 2a 내지 도 3은 그 프레임이 무음에 후속하여 스피치 데이터를 포함하는 액티브 프레임에 해당할 때의 시스템 (100) 의 동작을 예시한다. 예를 들어, 액티브 프레임은 무음 기간을 뒤따르는 토크 스퍼트 (talk spurt) 에 해당할 수도 있다. 도 4a 내지 도 5는 그 프레임이 스피치 데이터의 액티브 프레임들의 시퀀스에 스피치 데이터를 포함하는 액티브 프레임에 해당할 때의 시스템 (100) 의 동작을 예시한다.
도 2a를 참조하면, 도 1의 시스템의 특정 예의 동작을 예시하는 도면이 개시되고 전체가 200으로 지정된다. 도면 (200) 은 프로세싱된 프레임들의 프레임 번호들을 시간의 함수로서 예시한다. 도면 (200) 은 시간 t0에서의 지터-제거 버퍼 (126) 의 상태를 또한 예시한다. 도 2a에 예시된 바와 같이, 시간 t0에서, 프레임 오디오 시퀀스의 프레임들의 서브세트가 도 1의 분석기 (122) 에 의해 프로세싱되었을 수도 있다. 예를 들어, 프레임 1~3은 액티브 스피치 (예컨대, 토크 스퍼트) 에 해당할 수도 있다. 분석기 (122) 는 프로세싱된 프레임 1~3을 가질 수도 있다. 마지막 생성 타임스탬프 (138) 는 가장 최근에 프로세싱된 프레임 (예컨대, 프레임 3) 의 생성 타임스탬프 (예컨대, 3*640=1920) 를 표시할 수도 있다. 프레임 4~9는 토크 스퍼트들 사이의 무음 기간에 해당할 수도 있다. 분석기 (122) 는 프레임 4~9에 해당하는 무음 프레임들, 데이터 없음 프레임들, 또는 소거들을 플레이할 수도 있다. 시간 t0에서의 버퍼 타임라인 (106) 의 값이 프레임 9에 대응하는 생성 타임스탬프 (예컨대, 5760) 를 표시할 수도 있다. 지터-제거 버퍼 (126) 는 프레임 (11) 에 대응하는 버퍼 엔트리 (202) 와 프레임 (12) 에 대응하는 버퍼 엔트리 (204) 를 포함할 수도 있다. 버퍼 엔트리 (202) 는 프레임 (11) 의 생성 타임스탬프 (212) (예컨대, 7040) 를 포함할 수도 있다. 버퍼 엔트리 (204) 는 프레임 (12) 의 생성 타임스탬프 (214) (예컨대, 7680) 를 포함할 수도 있다. 버퍼 엔트리 (202) 는 버퍼 엔트리 (202) 가 프레임의 프레임 데이터의 전체 사본에 대응함을 표시하는 제 1 값을 갖는 플래그 (222) 를 포함할 수도 있다. 버퍼 엔트리 (204) 는 버퍼 엔트리 (204) 가 프레임의 프레임 데이터의 전체 사본에 대응함을 표시하는 제 1 값을 갖는 플래그 (224) 를 포함할 수도 있다.
시간 t0에, 분석기 (122) 는 버퍼 타임라인 (106) (예컨대, 5760) 에 기초하여 프로세싱될 다음 프레임이 프레임 (10) 이라고 결정할 수도 있다. 예를 들어, 분석기 (122) 는 버퍼 타임라인 (106) 의 값에 기초하여 다음 프레임 (예컨대, 도 1의 제 1 프레임 (184)) 의 다음 생성 타임스탬프 (예컨대, 6400) 를 결정할 수도 있다 (예컨대, 다음 생성 타임스탬프 = 버퍼 타임라인 (106) + 프레임 당 샘플들의 수 (예컨대, 640)). 분석기 (122) 는 다음 프레임 (예컨대, 프레임 (10)) 이 지터-제거 버퍼 (126) 에 없다고 결정할 수도 있다. 예를 들어, 분석기 (122) 는 다음 생성 타임스탬프에 대응하는 버퍼 엔트리가 지터-제거 버퍼 (126) 에서 누락되어 있다고 결정할 수도 있다. 분석기 (122) 는 프레임 (10) (예컨대, 제 1 프레임 (184)) 이 지터-제거 버퍼 (126) 에 없다고 결정하는 것에 응답하여 (예컨대, 무음 프레임 또는 데이터 없음 프레임을 플레이함으로써) 하나의 프레임 길이만큼 무음 기간을 연장시킬 수도 있다. 분석기 (122) 는 프레임 (10) 에 대응하는 생성 타임스탬프를 표시하는 버퍼 타임라인 (106) 의 값을 업데이트할 수도 있다. 예를 들어, 분석기 (122) 는 지터-제거 버퍼 (126) 에 없는 프레임 (10) 에 대해 무음 기간을 연장 시 프레임 당 샘플들의 수 (예컨대, 640) 만큼 버퍼 타임라인 (106) 의 값을 증가시킬 수도 있다.
도 2b를 참조하면, 도 2a의 예를 계속하는 도면이 개시되고 전체가 250으로 지정된다. 시간 t1에, 프레임 (10) 에 대응하는 무음 기간을 연장하는 것에 후속하여, 분석기 (122) 는 프레임 (10) 의 프레임 데이터 (예컨대, 프레임 데이터의 부분 사본) 를 포함하는 패킷 (예컨대, 도 1의 제 2 패킷 (134)) 을 수신할 수도 있다. 그 패킷은 다른 프레임 (예컨대, 프레임 (13)) 의 프레임 데이터의 전체 사본을 또한 포함할 수도 있다. 제 2 패킷 (134) 은 프레임 (13) 의 생성 타임스탬프 (예컨대, 8320) 를 표시할 수도 있다. 분석기 (122) 는 패킷 (예컨대, 제 2 패킷 (134)) 의 사본을 프레임 (13) (예컨대, 제 2 프레임 (186)) 에 대응하는 제 2 버퍼 엔트리 (118) 에 저장할 수도 있다. 분석기 (122) 는 제 2 버퍼 엔트리 (118) 에 제 2 생성 타임스탬프 (158) 를 저장할 수도 있다. 제 2 생성 타임스탬프 (158) 는 프레임 (13) 의 생성 타임스탬프 (예컨대, 8320) 를 표시할 수도 있다. 분석기 (122) 는 제 2 버퍼 엔트리 (118) 가 프레임의 프레임 데이터의 전체 사본에 대응함을 표시하는 특정 값 (예컨대, 1) 으로 제 2 플래그 (156) 를 설정할 수도 있다.
분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, 도 1의 제 2 생성 타임스탬프 (158) 및 프레임 오프셋 (136) 에 기초하여 프레임 (10) 에 대한 제 1 생성 타임스탬프 (148) (예컨대, 6400) 를 결정할 수도 있다. 분석기 (122) 는 제 1 생성 타임스탬프 (148) 가 마지막 생성 타임스탬프 (138) (예컨대, 1920) 를 초과한다고 결정하는 것에 응답하여 프레임 (10) (예컨대, 제 1 프레임 (184)) 에 대응하는 제 1 버퍼 엔트리 (114) 에 패킷 (예컨대, 제 2 패킷 (134)) 의 제 1 사본을 저장할 수도 있다. 분석기 (122) 는 버퍼 타임라인 (106) 의 값과는 독립적으로 제 1 버퍼 엔트리 (114) 에 패킷 (예컨대, 제 2 패킷 (134)) 의 제 1 사본을 저장할 수도 있다. 예를 들어, 분석기 (122) 는 무음 기간이 하나의 프레임 길이만큼 연장되었음을 표시하는 버퍼 타임라인 (106) 의 값 (예컨대, 6400) 에 상관 없이 제 1 버퍼 엔트리 (114) 에 패킷 (예컨대, 제 2 패킷 (134)) 의 제 1 사본을 저장할 수도 있다. 특정 구현예에서, 분석기 (122) 는 버퍼 타임라인 (106) 의 값이 제 1 생성 타임스탬프 (148) 이상이라고 결정하는 것에 응답하여 제 1 프레임 (184) (예컨대, 프레임 (10)) 이 프로세싱될 다음 프레임임을 표시하기 위해 버퍼 타임라인 (106) 을 업데이트할 수도 있다. 예를 들어, 분석기 (122) 는 버퍼 타임라인 (106) 의 값이 제 1 생성 타임스탬프 (148) 이상이라고 결정하는 것에 응답하여 생성 타임스탬프 (예컨대, 5760) 를 표시하기 위해 버퍼 타임라인 (106) 를 업데이트할 수도 있다. 생성 타임스탬프 (예컨대, 5760) 는 제 1 생성 타임스탬프 (148) (예컨대, 6400) 보다 앞설 수도 있다. 제 1 프레임 (184) (예컨대, 프레임 (10)) 이 프로세싱될 다음 프레임임을 표시하기 위해 버퍼 타임라인 (106) 을 업데이트하는 것은 하나의 프레임 길이만큼 무음 기간을 연장하는 것에 후속하여 분석기 (122) 가 제 1 버퍼 엔트리 (114) 를 프로세싱하는 것을 가능하게 할 수도 있다.
도 3을 참조하면, 도 2a 및 도 2b의 예를 계속하는 도면이 개시되고 전체가 300으로 지정된다. 분석기 (122) 는 프로세싱될 다음 프레임이 제 1 프레임 (184) (예컨대, 프레임 (10)) 이라고 결정할 수도 있다. 예를 들어, 분석기 (122) 는 버퍼 타임라인 (106) 의 값 (예컨대, 5760) 및 프레임 당 샘플들의 수 (예컨대, 640) 에 기초하여 다음 생성 타임스탬프 (예컨대, 6400) 를 결정할 수도 있다. 분석기 (122) 는 제 1 생성 타임스탬프 (148) 에 기초하여 지터-제거 버퍼 (126) 가 다음 생성 타임스탬프 (예컨대, 6400) 에 대응하는 제 1 버퍼 엔트리 (114) 를 포함한다고 결정할 수도 있다. 분석기 (122) 는, 시간 t2에, 제 1 버퍼 엔트리 (114) 를 프로세싱할 수도 있다. 예를 들어, 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, 프레임 데이터 (예컨대, 제 1 부분 데이터 (174)), 패킷 (예컨대, 제 2 패킷 (134)), 제 1 프레임 (184) (예컨대, 프레임 (10) 에 대응하는 제 1 스피치 파라미터들), 또는 그 조합을, 스피치 디코더 (160) 에 제공할 수도 있다. 분석기 (122) 는 제 1 프레임 (184) (예컨대, 프레임 (10)) 을 프로세싱하는 것에 응답하여 제 1 생성 타임스탬프 (148) 를 표시하기 위해 버퍼 타임라인 (106) 을 업데이트할 수도 있다. 예를 들어, 분석기 (122) 는 버퍼 타임라인 (106) 을 프레임 당 샘플들의 수 (예컨대, 640) 만큼 증가시킬 수도 있다.
스피치 디코더 (160) 는 도 1을 참조하여 설명된 바와 같이, 프로세싱된 오디오 신호 (116) 를 생성할 수도 있다. 하나의 프레임 길이만큼 무음 기간을 연장하는 것에 후속하여 제 1 버퍼 엔트리 (114) 를 프로세싱하는 것은, 버퍼 엔트리 (202), 버퍼 엔트리 (204), 및 제 2 버퍼 엔트리 (118) 가 제 1 프레임 (184) 의 플레이아웃 지속기간에 대응하는 추가적인 시간 동안 지터-제거 버퍼 (126) 에 저장되는 것을 가능하게 할 수도 있다. 예를 들어, 제 1 버퍼 엔트리 (114) 가 지터-제거 버퍼 (126) 에 삽입되지 않았었다면 제 1 버퍼 엔트리 (114) 는 버퍼 엔트리 (202) 가 프로세싱되었을 시간에 프로세싱될 수도 있다. 버퍼 엔트리 (202) 의 프로세싱은 제 1 프레임 (184) (예컨대, 프레임 (10)) 의 플레이아웃 지속기간 (예컨대, 20 밀리초) 만큼 지연되어 후속 프레임들의 프로세싱 지연을 초래할 수도 있다. 프로세싱 지연 동안, 목적지 디바이스 (102) 는 추가적인 패킷들을 수신할 수도 있고 지터-제거 버퍼 (126) 는 추가적인 패킷들에 대응하는 프레임들을 버퍼링할 수도 있다. 지터-제거 버퍼 (126) 에 의해 버퍼링되는 프레임들의 수가 증가하여, 지터-제거 버퍼 (126) 의 깊이를 암시적으로 증가시킴으로써 암시적 버퍼 적응을 초래할 수도 있다. 프로세싱 지연은 후속 프레임들이 프로세싱될 시간에 지터-제거 버퍼 (126) 가 후속 프레임들에 대응하는 데이터를 포함할 공산을 증가시킬 수도 있다.
도 4a를 참조하면, 도 1의 시스템의 다른 특정 구현예의 동작을 예시하는 도면이 개시되고 전체가 400으로 지정된다. 도면 (400) 은 프레임 1~9가 액티브 스피치 (예컨대, 토크 스퍼트) 에 대응한다는 점에서 도 3의 도면 (300) 과는 상이하다. 마지막 생성 타임스탬프 (138) 는 가장 최근에 프로세싱된 프레임 (예컨대, 프레임 9) 의 생성 타임스탬프 (예컨대, 5760) 를 표시할 수도 있다. 마지막 생성 타임스탬프 (138) 는 버퍼 타임라인 (106) 과는 동일한 값을 표시할 수도 있다. 분석기 (122) 는, 도 1 및 도 2a를 참조하여 설명된 바와 같이, 시간 t0에, 프레임 (10) 이 지터-제거 버퍼 (126) 에 없다고 결정하는 것에 응답하여 소거를 플레이할 수도 있다.
도 4b를 참조하면, 도 4a의 예를 계속하는 도면이 개시되고 전체가 402로 지정된다. 분석기 (122) 는, 도 1 및 도 2b를 참조하여 설명된 바와 같이, 시간 t1에, 제 1 생성 타임스탬프 (148) 가 마지막 생성 타임스탬프 (138) 를 초과한다고 결정하는 것에 응답하여 제 1 버퍼 엔트리 (114) 에 패킷 (예컨대, 제 2 패킷 (134)) 의 제 1 사본을 저장할 수도 있다. 분석기 (122) 는 제 1 프레임 (184) (예컨대, 프레임 (10)) 에 대응하는 소거가 플레이되었음을 버퍼 타임라인 (106) 의 값이 표시하는지의 여부와는 독립적으로, 제 1 버퍼 엔트리 (114) 에 패킷 (예컨대, 제 2 패킷 (134)) 의 제 1 사본을 저장할 수도 있다. 특정 구현예에서, 분석기 (122) 는 오디오 프레임들의 시퀀스에서의 제 1 프레임 (184) 에 후속하는 프레임이 프로세싱될 다음 프레임임을 버퍼 타임라인 (106) 의 값이 표시한다고 결정하는 것에 응답하여 제 1 프레임 (184) 이 프로세싱될 다음 프레임임을 표시하기 위해 버퍼 타임라인 (106) 을 업데이트할 수도 있다. 예를 들어, 분석기 (122) 는 버퍼 타임라인 (106) 의 값 (예컨대, 6400) 이 제 1 생성 타임스탬프 (148) 이상이라고 결정하는 것에 응답하여 제 1 생성 타임스탬프 (148) (예컨대, 6400) 에 앞서는 생성 타임스탬프 (예컨대, 5760) 를 표시하기 위해 버퍼 타임라인 (106) 를 업데이트할 수도 있다.
도 5를 참조하면, 도 4a 및 도 4b의 예를 계속하는 도면이 개시되고 전체가 500으로 지정된다. 분석기 (122) 는, 시간 t2에, 제 1 버퍼 엔트리 (114) 를 프로세싱할 수도 있다. 제 1 프레임 (184) (예컨대, 프레임 (10)) 에 대응하는 소거를 플레이하는 것에 후속하여 제 1 버퍼 엔트리 (114) 를 프로세싱하는 것은, 도 1 및 도 3을 참조하여 설명된 바와 같이, 암시적 버퍼 적응을 가능하게 할 수도 있다.
도 6을 참조하면, 도 1의 시스템의 특정 구현예들의 동작을 예시하는 도면이 개시되고 전체가 600으로 지정된다. 도면 (600) 은 버퍼 엔트리들이 다양한 구현예들에서 프로세싱될 때의 비교를 예시한다. 도면 (600) 은 4 케이스들의 비교를 예시하는 표 (652) 를 포함한다. 도면 (600) 은 어떤 패킷들이 지터-제거 버퍼 (126) 에 존재하는지 (음영 패턴을 사용하여 도 6에서 도시됨) 와 버퍼 엔트리들이 4 케이스들의 각각에서 프로세싱되는 때를 예시하는 표 (650) 를 포함한다. 도면 (600) 은 지터-제거 버퍼 (126) 의 버퍼 엔트리들을 또한 예시한다.
표 (652) 에 도시된 바와 같이, 케이스 1은 특정 프레임에 대응하는 부분 데이터 및 다른 프레임에 대응하는 전체 프레임 데이터를 포함하는 패킷이 지터-제거 버퍼 (126) 에서 한번 인큐딩되는 (예컨대, 이중-인큐잉 아닌) 구현예에 대응한다. 케이스 1에서, 부분 데이터는 플레이아웃 지연 (예컨대, 최소 플레이아웃 지연) 과는 독립적으로 프로세싱된다. 전체 프레임 데이터는 케이스 1~4에서 플레이아웃 지연 (예컨대, 40 밀리초 (ms)) 에 기초하여 프로세싱될 수도 있다. 표 (652) 에 도시된 바와 같이, 수신 타임스탬프 조정 (Rx_ts 조정) 이 케이스 1에서 적용 가능하지 않다.
표 (652) 에 도시된 바와 같이, 케이스 2~4는 특정 프레임에 대응하는 부분 데이터 및 다른 프레임에 대응하는 전체 프레임 데이터를 포함하는 패킷이 두번 인큐잉되는 (예컨대, 이중-인큐잉인) 구현예에 대응한다. 예를 들어, 패킷의 제 1 사본이 특정 프레임에 대응하는 제 1 버퍼 엔트리에서 인큐잉될 수도 있고, 그 패킷의 제 2 사본이 다른 프레임에 대응하는 제 2 버퍼 엔트리에서 인큐잉될 수도 있다.
표 (652) 에 도시된 바와 같이, 케이스 2~3에서 수신 타임스탬프 조정 (Rx_ts 조정) 은 없다. 예를 들어, 제 1 버퍼 엔트리는 패킷의 수신 타임스탬프를 저장할 수도 있다. 제 2 버퍼 엔트리는 패킷의 수신 타임스탬프를 또한 저장할 수도 있다. 케이스 2에서, 부분 데이터는 플레이아웃 지연 (예컨대, 최소 플레이아웃 지연) 에 기초하여 프로세싱되고, 케이스 3에서, 부분 데이터는 플레이아웃 지연과는 독립적으로 프로세싱된다.
표 (652) 에 도시된 바와 같이, 케이스 4에서 수신 타임스탬프 조정 (Rx_ts 조정) 이 있다. 예를 들어, 패킷의 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시하는 제 1 수신 타임스탬프가 생성될 수도 있다. 제 1 버퍼 엔트리는 제 1 수신 타임스탬프를 저장할 수도 있다. 케이스 4에서, 부분 데이터는 플레이아웃 지연 (예컨대, 최소 플레이아웃 지연) 에 기초하여 프로세싱된다.
표 (650) 에 도시된 바와 같이, 시간 t = 80 밀리초 (ms) 에 그리고 시간 t =100 ms에, 지터-제거 버퍼 (126) 는 비어 있다 (예컨대, 프레임들의 시퀀스에 대응하는 데이터를 포함하지 않는다). 분석기 (122) 는 데이터 없음의 표시를 스피치 디코더 (160) 에 제공할 수도 있다.
시간 t = 120 ms에, 지터-제거 버퍼 (126) 는 프레임들의 시퀀스 중 제 2 프레임 (F2) 에 대응하는 버퍼 엔트리 (604) 를 포함할 수도 있다. 버퍼 엔트리 (604) 는 제 2 프레임 (F2) 의 전체 프레임 데이터를 포함하는 패킷의 수신 타임스탬프 (예컨대, 115 ms) 에 대응하는 타임스탬프 (TS) (624) 를 저장할 수도 있다. 분석기 (122) 는 TS (624) (예컨대, 115 ms) 및 플레이아웃 지연 (예컨대, 40 ms) 에 기초하여 버퍼 엔트리 (604) 에 대응하는 버퍼링 기간을 결정할 수도 있다. 예를 들어, 분석기 (122) 는 버퍼 엔트리 (604) 에 대응하는 버퍼링 기간이 TS (624) 에 의해 표시된 제 1 시간 (예컨대, 115 ms) 과 플레이아웃 지연 (예컨대, 40 ms) 의 합에 대응하는 시간 (예컨대, 155 ms) 에 만료하는 것으로 결정할 수도 있다. 시간 t = 120 ms에, 케이스 1~4에서, 분석기 (122) 는 버퍼 엔트리 (604) 에 대응하는 버퍼링 기간이 만료되지 않은 것으로 결정하는 것에 응답하여 버퍼 엔트리 (604) 를 프로세싱 (및 디큐잉 (dequeuing)) 하는 것을 하지 않을 수도 있다. 분석기 (122) 는 데이터 없음의 표시를 스피치 디코더 (160) 에 제공할 수도 있다.
시간 t = 140 ms에, 지터-제거 버퍼 (126) 는 제 2 프레임 (F2) 에 대응하는 버퍼 엔트리 (604) 와, 프레임들의 시퀀스 중 제 4 프레임 (F4) 에 대응하는 버퍼 엔트리 (608) 를 포함할 수도 있다. 버퍼 엔트리 (608) 는 제 4 프레임 (F4) 의 전체 프레임 데이터를 포함하는 패킷의 수신 타임스탬프 (예컨대, 138 ms) 에 대응하는 TS (628) 를 저장할 수도 있다. 그 패킷은 프레임들의 시퀀스 중 제 1 프레임 (F1) 의 부분 데이터를 또한 포함할 수도 있다.
시간 t = 140 ms에, 케이스 1~4에서, 분석기 (122) 는 버퍼 엔트리들 (604 및 608) 에 대응하는 버퍼링 기간들이 만료되지 않은 것으로 결정할 수도 있다. 예를 들어, 버퍼 엔트리 (604) 에 대응하는 제 1 버퍼링 기간이 시간 t = 155 ms에 만료할 수도 있고, 버퍼 엔트리 (608) 에 대응하는 제 2 버퍼링 기간이 시간 t = 178 ms (138 ms + 40 ms) 에 만료할 수도 있다. 분석기 (122) 는 버퍼 엔트리들 (604 및 608) 에 대응하는 버퍼링 기간들이 만료되지 않은 것으로 결정하는 것에 응답하여 버퍼 엔트리들 (604 및 608) 를 프로세싱하는 것을 하지 않을 수도 있다.
케이스 1에서, 제 4 프레임 (F4) 의 전체 프레임 데이터 및 제 1 프레임 (F1) 의 부분 데이터를 포함하는 패킷은 지터-제거 버퍼 (126) 에서 한번 인큐잉될 수도 있다. 예를 들어, 지터-제거 버퍼 (126) 는 제 4 프레임 (F4) 에 대응하는 버퍼 엔트리 (608) 를 포함할 수도 있고 제 1 프레임 (F1) 에 대응하는 버퍼 엔트리를 제외시킬 수도 있다. 케이스 1에서, 부분 데이터는 플레이아웃 지연과는 독립적으로 프로세싱된다. 분석기 (122) 가 프레임들의 시퀀스에서 특정 프레임 (예컨대, F1) 에 앞서는 프레임들을 프로세싱하지 않았고 지터-제거 버퍼 (126) 가 그 특정 프레임 (예컨대, F1) 에 대응하는 버퍼 엔트리를 포함하지 않을 때, 분석기 (122) 는 그 특정 프레임 (예컨대, F1) 이 프로세싱될 다음 프레임이라고 결정하지 못할 수도 있다. 특정 프레임 (예컨대, F1) 이 프로세싱될 다음 프레임으로서 표시되지 않으므로, 분석기 (122) 는 특정 프레임 (예컨대, F1) 에 대응하는 전체 프레임 데이터가 손실된 것으로 결정하지 못할 수도 있고 다른 프레임들 (예컨대, F4) 에 대응하는 버퍼 엔트리들에서 특정 프레임 (예컨대, F1) 에 대응하는 부분 데이터를 찾지 않을 수도 있다. 따라서, 분석기 (122) 는 데이터 없음의 표시를 스피치 디코더 (160) 에 제공할 수도 있다. 케이스 1에서, 심지어 지터-제거 버퍼 (126) 가 제 1 프레임 (F1) 에 대응하는 부분 데이터를 포함하더라도, 이중-인큐잉이 없고 제 1 프레임 (F1) 에 대응하는 버퍼 엔트리가 없기 때문에 분석기 (122) 는 소거를 플레이할 (예컨대, 데이터 없음의 표시를 제공할) 수도 있다.
케이스 2~4에서, 제 4 프레임 (F4) 의 전체 프레임 데이터 및 제 1 프레임 (F1) 의 부분 데이터를 포함하는 패킷은 지터-제거 버퍼 (126) 에서 이중-인큐잉될 수도 있다. 예를 들어, 지터-제거 버퍼 (126) 는 제 1 프레임 (F1) 에 대응하는 버퍼 엔트리 (602) 와 제 4 프레임 (F4) 에 대응하는 버퍼 엔트리 (608) 를 포함할 수도 있다. 버퍼 엔트리 (602) 는 TS (622) 를 저장할 수도 있다. 케이스 2~3에서, 수신 타임스탬프 조정이 없다면, TS (622) 는 버퍼 엔트리 (608) 의 TS (628) (예컨대, 138 ms) (예컨대, 패킷의 수신 타임스탬프) 에 해당할 수도 있다.
케이스 2에서, 부분 데이터는 플레이아웃 지연 (예컨대, 40 ms) 에 기초하여 프로세싱된다. 분석기 (122) 는 TS (622) (예컨대, 138 ms) 및 플레이아웃 지연 (예컨대, 40 ms) 에 기초하여 버퍼 엔트리 (602) 에 연관되는 버퍼링 기간이 시간 t = 178 ms에 만료한다고 결정할 수도 있다. 따라서, 도 1의 분석기 (122) 는 버퍼 엔트리 (602) 에 연관되는 버퍼링 기간이 만료되지 않은 것으로 결정하는 것에 응답하여 시간 t = 140 ms에 버퍼 엔트리 (602) 를 프로세싱하는 것을 하지 않을 수도 있다. 분석기 (122) 는 데이터 없음의 표시를 스피치 디코더 (160) 에 제공할 수도 있다. 케이스 2에서, 심지어 지터-제거 버퍼 (126) 가 제 1 프레임 (F1) 에 대응하는 부분 데이터를 포함하더라도, 부분 데이터가 플레이아웃 지연에 기초하여 프로세싱되고 수신 타임스탬프 조정이 없기 때문에 분석기 (122) 는 소거를 플레이할 (예컨대, 데이터 없음의 표시를 제공할) 수도 있다.
케이스 3에서, 부분 데이터는 플레이아웃 지연 (예컨대, 40 ms) 과는 독립적으로 프로세싱된다. 버퍼 엔트리 (602) 에 연관되는 버퍼링 기간이 TS (622) (예컨대, 138 ms) 및 플레이아웃 지연 (예컨대, 40 ms) 에 기초하여 시간 t = 178 ms에서 만료되었을 것이다. 도 1의 분석기 (122) 가 버퍼링 기간에 기초하여 버퍼 엔트리 (602) 를 프로세싱하였다면, 분석기 (122) 는 그 버퍼링 기간이 만료되지 않을 것이기 때문에 시간 t = 140 ms에 엔트리 (602) 를 프로세싱하는 것을 하지 않을 것이다. 그러나, 케이스 3에서, 버퍼 엔트리 (602) 가 부분 데이터를 저장하기 때문에 분석기 (122) 는 버퍼링 기간과는 독립적으로 시간 t = 140 ms에 버퍼 엔트리 (602) 를 프로세싱할 수도 있다.
케이스 4에서, 수신 타임스탬프 조정으로, TS (622) 는 TS (628) 에 의해 표시된 제 2 시간 (예컨대, 138 ms) 보다 이른 제 1 시간 (예컨대, 77 ms) 을 표시할 수도 있다. 예를 들어, 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, TS (628), 도 1의 프레임 오프셋 (136) (예컨대, 3 프레임들), 및 플레이아웃 지속기간 (예컨대, 20 ms) 에 기초하여 TS (622) 를 생성할 수도 있다. 케이스 4에서, 부분 데이터는 플레이아웃 지연 (예컨대, 40 ms) 에 기초하여 프로세싱된다. 분석기 (122) 는 TS (622) (예컨대, 77 ms) 및 플레이아웃 지연 (예컨대, 40 ms) 에 기초하여 버퍼 엔트리 (602) 에 연관되는 버퍼링 기간이 시간 t = 117 ms에 만료하였다고 결정할 수도 있다. 도 1의 분석기 (122) 는 버퍼 엔트리 (602) 에 연관되는 버퍼링 기간이 만료하였다고 결정하는 것에 응답하여 시간 t = 140 ms에 버퍼 엔트리 (602) 를 프로세싱할 수도 있다.
케이스 3 및 4에서, 분석기 (122) 는 시간 t = 140 ms에서 버퍼 엔트리 (602) 를 프로세싱하는 것에 후속하여 스피치 디코더 (160) 에 버퍼 엔트리 (602) 에 대응하는 데이터를 제공할 수도 있다. 스피치 디코더 (160) 는 도 1을 참조하여 설명된 바와 같이, 버퍼 엔트리 (602) 에 대응하는 데이터에 기초하여 도 1의 프로세싱된 오디오 신호 (116) 를 생성할 수도 있다.
시간 t = 160 ms에, 지터-제거 버퍼 (126) 는 제 5 프레임 (F5) 에 대응하는 버퍼 엔트리 (610) 를 포함할 수도 있다. 버퍼 엔트리 (610) 는 제 5 프레임 (F5) 의 전체 프레임 데이터를 포함하는 패킷의 수신 타임스탬프 (예컨대, 160 ms) 를 표시하는 TS (630) 를 포함할 수도 있다. 그 패킷은 제 2 프레임 (F2) 의 부분 데이터를 포함할 수도 있다. 분석기 (122) 는 지터-제거 버퍼 (126) 에서 패킷을 이중-인큐잉하는 것을 하지 않을 수도 있다. 예를 들어, 케이스 1에서는, 이중-인큐잉이 없다. 케이스 2~4에서, 분석기 (122) 는 지터-제거 버퍼 (126) 가 제 2 프레임 (F2) 에 대응하는 버퍼 엔트리 (예컨대, 버퍼 엔트리 (604)) 를 이미 포함한다고 그리고 그 패킷이 제 2 프레임 (F2) 에 대응하는 부분 데이터를 포함한다고 결정하는 것에 응답하여 패킷을 이중-인큐잉하는 것을 하지 않을 수도 있다. 예를 들어, 분석기 (122) 는 제 5 프레임 (F5) 에 대응하는 버퍼 엔트리 (610) 에 패킷을 저장할 수도 있지만 제 2 프레임 (F2) 에 대응하는 버퍼 엔트리에 패킷의 사본을 저장하는 것을 하지 않을 수도 있다.
시간 t = 160 ms에, 케이스 1 및 3~4에서, 지터-제거 버퍼 (126) 는 버퍼 엔트리 (602) 를 포함하지 않는다. 예를 들어, 케이스 1에서, 분석기 (122) 는 본 명세서에서 설명되는 바와 같이, 단일-인큐잉 때문에, 버퍼 엔트리 (602) 를 지터-제거 버퍼 (126) 에 추가하지 않을 수도 있다. 케이스 3~4에서, 분석기 (122) 는 버퍼 엔트리 (602) 를 프로세싱하는 것에 응답하여 지터-제거 버퍼 (126) 로부터 버퍼 엔트리 (602) 를 디큐잉 (예컨대, 제거) 하였을 수도 있다. 케이스 1 및 3~4에서, 분석기 (122) 는 버퍼 엔트리 (604) 에 대응하는 버퍼링 기간이 만료되었다고 결정하는 것에 응답하여 제 2 프레임 (F2) 에 대응하는 버퍼 엔트리 (604) 를 프로세싱할 수도 있다.
케이스 2에서, 본 명세서에서 설명되는 바와 같이, 이중-인큐잉 때문에 그리고 분석기 (122) 가 더 이른 시간에 (예컨대, 시간 t = 140 ms에) 버퍼 엔트리 (602) 를 프로세싱하는 것을 하지 않았기 때문에 지터-제거 버퍼 (126) 는 버퍼 엔트리 (602) 를 포함할 수도 있다. 덧붙여, 분석기 (122) 는 버퍼 엔트리 (602) 에 대응하는 버퍼링 기간이 시간 t = 160 ms에 만료되지 않았다고 결정할 수도 있다. 예를 들어, 케이스 2에서, 버퍼 엔트리 (602) 에 대응하는 버퍼링 기간은 시간 t = 178 ms (예컨대, 138 ms + 40 ms) 에 만료할 수도 있다. 그러나, 분석기 (122) 는 버퍼 엔트리 (604) 에 연관되는 버퍼링 기간이 시간 t = 160 ms에 만료하였다고 결정할 수도 있다. 예를 들어, 버퍼 엔트리 (604) 에 대응하는 버퍼링 기간은 시간 t = 155 ms (예컨대, 115 ms + 40 ms) 에 만료할 수도 있다. 분석기 (122) 는 버퍼 엔트리 (602) 에 대응하는 버퍼링 기간이 만료되지 않은 것으로 결정하는 것에 응답하여 제 1 프레임 (F1) 에 대응하는 버퍼 엔트리 (602) 를 프로세싱하는 것을 하지 않을 수도 있다. 분석기 (122) 는 프레임들의 시퀀스에서 버퍼 엔트리 (604) 에 연관되는 제 2 프레임 (F2) 보다 이른 프레임 (예컨대, 제 1 프레임 (F1)) 에 대응하는 버퍼 엔트리 (602) 를 지터-제거 버퍼 (126) 가 포함한다고 결정하는 것에 응답하여 버퍼 엔트리 (604) 를 프로세싱하는 것을 하지 않을 수도 있다. 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, 각각의 생성 타임스탬프들에 기초하여 제 1 프레임 (F1) 이 프레임들의 시퀀스에서의 제 2 프레임 (f2) 보다 이르다고 결정할 수도 있다. 따라서, 분석기 (122) 는 소거를 플레이할 수도 있다. 예를 들어, 분석기 (122) 는 데이터 없음의 통지를 스피치 디코더 (160) 에게 전송할 수도 있다.
시간 t = 180 ms에, 지터-제거 버퍼 (126) 는 제 6 프레임 (F6) 에 대응하는 버퍼 엔트리 (612) 를 포함할 수도 있다. 버퍼 엔트리 (612) 는 제 6 프레임 (F6) 의 전체 프레임 데이터를 포함하는 패킷의 수신 타임스탬프 (예컨대, 178 ms) 를 표시하는 TS (632) 를 포함할 수도 있다. 그 패킷은 제 3 프레임 (F3) 의 부분 데이터를 또한 포함할 수도 있다. 케이스 1에서, 단일-인큐잉이 있으며 (즉, 이중-인큐잉이 없으며); 그러므로 지터-제거 버퍼 (126) 는 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리 (606) 를 제외시킬 수도 있다. 케이스 2~4에서, 분석기 (122) 는 제 3 프레임 (F3) 이 지터-제거 버퍼 (126) 에 없다고 결정하는 것에 응답하여 지터-제거 버퍼 (126) 에서 패킷을 이중-인큐잉할 수도 있다. 예를 들어, 분석기 (122) 는 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리 (606) 에 패킷의 제 1 사본을 저장할 수도 있고 제 6 프레임 (F6) 에 대응하는 버퍼 엔트리 (612) 에 패킷의 제 2 사본을 저장할 수도 있다. 버퍼 엔트리 (606) 는 TS (626) 를 포함할 수도 있다. 케이스 2~3에서, 수신 타임스탬프 조정이 없다면, TS (626) 는 TS (632) 와 동일할 수도 있다. 예를 들어, TS (626) 는 패킷의 수신 타임스탬프 (예컨대, 178 ms) 를 표시할 수도 있다. 케이스 4에서, 수신 타임스탬프 조정으로, TS (626) 는 TS (632) 에 의해 표시된 제 2 시간 (예컨대, 178 ms) 보다 이른 제 1 시간 (예컨대, 117 ms) 을 표시할 수도 있다. 예를 들어, 제 1 시간은 패킷의 수신 타임스탬프에 의해 표시된 시간 (예컨대, 178 ms) 보다 이를 수도 있다.
시간 t = 180 ms에, 케이스 1에서, 도 1을 참조하여 설명된 바와 같이, 분석기 (122) 는 도 1의 버퍼 타임라인 (106) 에 기초하여 프로세싱될 다음 프레임이 제 3 프레임 (F3) 이라고 결정할 수도 있다. 예를 들어, 분석기 (122) 는 제 2 프레임 (F2) 의 생성 타임스탬프를 표시하기 위해 버퍼 타임라인 (106) 을 업데이트할 수도 있다. 분석기 (122) 는 프로세싱될 다음 프레임이 버퍼 타임라인 (106) 에 의해 표시된 생성 타임스탬프 후 다음인 특정 생성 타임스탬프를 갖는 제 3 프레임 (F3) 이라고 결정할 수도 있다. 분석기 (122) 는 제 3 프레임 (F3) 이 프로세싱될 다음 프레임이라고 그리고 지터-제거 버퍼 (126) 가 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리를 포함하지 않는다고 결정하는 것에 응답하여 제 3 프레임 (F3) 에 대응하는 전체 프레임 데이터가 손실된 것이라고 결정할 수도 있다. 분석기 (122) 는 제 3 프레임 (F3) 에 대응하는 전체 프레임 데이터가 손실되었다고 결정하는 것에 응답하여 다른 버퍼 엔트리가 제 3 프레임 (F3) 에 대응하는 부분 데이터를 포함하는지의 여부를 결정할 수도 있다. 예를 들어, 분석기 (122) 는 제 6 프레임 (F6) 에 대응하는 버퍼 엔트리 (612) 가 제 3 프레임 (F3) 에 대응하는 부분 데이터를 포함한다고 결정할 수도 있다. 분석기 (122) 는, 시간 t = 180 ms에, 플레이아웃 지연과는 독립적으로 제 3 프레임 (F3) 에 대응하는 부분 데이터를 프로세싱할 수도 있다.
케이스 2에서, 시간 t = 180 ms에, 분석기 (122) 는 버퍼 엔트리 (602) 에 대응하는 플레이아웃 지연 기간이 만료되었다고 결정하는 것에 응답하여 제 1 프레임 (F1) 에 대응하는 버퍼 엔트리 (602) 를 프로세싱할 수도 있다.
케이스 3-4에서, 시간 t = 180 ms에, 분석기 (122) 는 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리 (606) 를 프로세싱할 수도 있다. 예를 들어, 케이스 3에서, 분석기 (122) 는 제 3 프레임 (F3) 이 플레이아웃 지연과는 독립적으로 프로세싱될 다음 프레임이라고 결정하는 것에 응답하여 버퍼 엔트리 (606) 를 프로세싱할 수도 있다. 케이스 4에서, 분석기 (122) 는 제 3 프레임 (F3) 이 프로세싱될 다음 프레임이라고 그리고 버퍼 엔트리 (606) 에 대응하는 플레이아웃 지연 기간이 만료되었다고 결정하는 것에 응답하여 버퍼 엔트리 (606) 를 프로세싱할 수도 있다. 예를 들어, 버퍼 엔트리 (606) 에 대응하는 플레이아웃 지연 기간은 시간 t = 157 ms (117 ms + 40 ms) 에 만료할 수도 있다.
시간 t = 200 ms에, 케이스 1 및 3~4에서, 분석기 (122) 는 제 4 프레임 (F4) 이 프로세싱될 다음 프레임이라고 그리고 제 4 프레임 (F4) 에 대응하는 플레이아웃 지연 기간이 만료되었다고 결정하는 것에 응답하여 제 4 프레임 (F4) 에 대응하는 버퍼 엔트리 (608) 를 프로세싱할 수도 있다. 케이스 2에서, 분석기 (122) 는 제 2 프레임 (F2) 이, 도 1을 참조하여 설명되는 바와 같이, 프로세싱될 다음 프레임이라고, 그리고 버퍼 엔트리 (604) 에 대응하는 플레이아웃 지연 기간이 만료되었다고 결정하는 것에 응답하여 제 2 프레임 (F2) 에 대응하는 버퍼 엔트리 (604) 를 프로세싱할 수도 있다.
시간 t = 220 ms에, 케이스 1 및 3~4에서, 분석기 (122) 는 제 5 프레임 (F5) 이 프로세싱될 다음 프레임이라고 그리고 제 5 프레임 (F5) 에 대응하는 플레이아웃 지연 기간이 만료되었다고 결정하는 것에 응답하여 제 5 프레임 (F5) 에 대응하는 버퍼 엔트리 (610) 를 프로세싱할 수도 있다. 케이스 2에서, 분석기 (122) 는 제 3 프레임 (F3) 이, 도 1을 참조하여 설명되는 바와 같이, 프로세싱될 다음 프레임이라고, 그리고 버퍼 엔트리 (606) 에 대응하는 플레이아웃 지연 기간이 만료되었다고 결정하는 것에 응답하여 제 3 프레임 (F2) 에 대응하는 버퍼 엔트리 (606) 를 프로세싱할 수도 있다.
도면 (600) 은, 시간 t = 140 ms에서 케이스 1을 참조하여 설명된 바와 같이, 초기 프레임들의 부분 데이터가 지터-제거 버퍼 (126) 에서 버퍼링되지만 분석기 (122) 가 초기 프레임들의 전체 프레임 데이터가 손실된 것으로 결정하지 않았을 때 단일-인큐잉 (케이스 1에서와 같음) 이 프레임들의 시퀀스의 초기 프레임들에 대응하는 프레임 데이터 없이 프로세싱된 오디오 신호의 생성을 초래할 수도 있다는 것을 예시한다.
도면 (600) 은, 이중-인큐잉을 하지만 수신 시간 조정을 하지 않으면, 시간 t = 140 ms 및 시간 t = 160 ms에서 케이스 2를 참조하여 설명된 바와 같이, 특정 프레임의 부분 데이터가 지터-제거 버퍼 (126) 에서 버퍼링되지만 부분 데이터에 대응하는 버퍼 엔트리에 연관되는 버퍼링 기간이 만료되지 않았을 때 플레이아웃 지연에 기초하여 부분 데이터를 프로세싱하는 것이 프레임들을 프로세싱함에 있어서 불필요한 소거들 및 지연들을 초래할 수도 있다는 것을 예시한다.
도면 (600) 은, 도 6의 예에서, 이중-인큐잉을 하지만 수신 시간 조정을 하지 않으면 플레이아웃 지연과는 독립적으로 부분 데이터를 프로세싱하는 것이, 케이스 3~4를 참조하여 설명된 바와 같이, 일부 상황들에서, 이중-인큐잉을 하고 수신 시간 조정을 하는 플레이아웃 지연에 기초하여 부분 데이터를 프로세싱하는 것과 비슷한 성능을 가질 수도 있다는 것을 예시한다. 이중-인큐잉을 하지만 수신 시간 조정을 하지 않고 플레이아웃 지연과는 독립적으로 부분 데이터를 프로세싱하는 것은, 예컨대, 도 8을 참조하여 설명되는 바와 같이, 다른 상황들 (예컨대, 높은 지터 케이스들) 에서, 이중-인큐잉을 하고 수신 시간 조정을 하는 플레이아웃 지연에 기초하여 부분 데이터를 프로세싱하는 것과 비교하여 전혀 다른 결과들을 가질 수도 있다.
도 7을 참조하면, 도 1의 시스템의 특정 구현예들의 동작을 예시하는 도면이 도시되고 전체가 700으로 지정된다. 도면 (700) 은 버퍼 엔트리들이 다양한 구현예들에서 프로세싱될 때의 비교를 예시한다. 도면 (700) 은 2 케이스들의 비교를 예시하는 표 (752) 를 포함한다. 도면 (700) 은 어떤 패킷들이 지터-제거 버퍼 (126) 에 존재하는지 (음영 패턴을 사용하여 도 7에서 도시됨) 와 버퍼 엔트리들이 2 케이스들 (도 6의 케이스 1 및 4) 의 각각에서 프로세싱되는 때를 예시하는 표 (750) 를 포함한다. 도면 (700) 은 지터-제거 버퍼 (126) 의 버퍼 엔트리들을 예시한다.
도 7의 지터-제거 버퍼 (126) 의 버퍼 엔트리들은 제 6 프레임 (F6) 에 대응하는 버퍼 엔트리 (612) 의 TS (632) 가 도 6에서 TS (632) 에 의해 표시된 시간 (예컨대, 178 ms) 보다 뒤쳐진 도 7에서의 제 1 시간 (예컨대, 183 ms) 을 표시한다는 점에서 도 6의 지터-제거 버퍼 (126) 의 버퍼 엔트리들과는 상이하다. 예를 들어, 제 6 프레임 (F6) 의 전체 프레임 데이터를 포함하는 패킷이, 도 7을 참조하여 설명되는 예에서, 도 6을 참조하여 설명된 예에서의 패킷의 수신 타임스탬프보다 뒤쳐진 제 1 수신 타임스탬프와 연관될 수도 있다. 그 패킷은 제 3 프레임 (F3) 에 대응하는 부분 데이터를 포함할 수도 있다.
케이스 4에서, 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, TS (632) (예컨대, 183 ms), 도 1의 프레임 오프셋 (136), 및 플레이아웃 지속기간 (예컨대, 20 ms) 에 기초하여 제 3 프레임 (F3) 에 대응하는 TS (626) (예컨대, 122 ms) 를 생성할 수도 있다. 도 7의 TS (626) 는 도 6의 TS (626) 에 의해 표시된 제 2 시간 (예컨대, 117 ms) 보다 뒤쳐진 제 1 시간 (예컨대, 122 ms) 을 표시할 수도 있다.
시간 t = 100 ms 내지 시간 t = 160 ms에, 분석기 (122) 는 도 6을 참조하여 설명된 바와 같이 동작할 수도 있다. 시간 t = 180 ms에, 분석기 (122) 는 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리가 지터-제거 버퍼 (126) 에 없다고 결정할 수도 있다. 분석기 (122) 는 소거를 플레이할 (예컨대, 데이터 없음을 표시하는 통지를 도 1의 스피치 디코더 (160) 에 제공) 할 수도 있다. 특정 예에서, 스피치 디코더 (160) 는 데이터 없음을 표시하는 통지를 수신하는 것에 응답하여 지터-제거 버퍼 (126) 가 제 3 프레임 (F3) 에 대응하는 부분 데이터를 저장하는 버퍼 엔트리를 갖는지를 결정할 것을 분석기 (122) 에게 요청할 수도 있다. 분석기 (122) 는 지터-제거 버퍼 (126) 의 버퍼 엔트리들 중 어느 것도 제 3 프레임 (F3) 에 대응하는 부분 데이터를 포함하지 않는다고 결정하는 것에 응답하여 데이터 없음을 표시하는 다른 통지를 스피치 디코더 (160) 에 제공할 수도 있다.
시간 t = 200 ms에, 지터-제거 버퍼 (126) 는 제 6 프레임 (F6) 에 대응하는 버퍼 엔트리 (612) 를 포함할 수도 있다. 버퍼 엔트리 (612) 는 제 3 프레임 (F3) 에 대응하는 부분 데이터를 포함할 수도 있다. 케이스 4에서, 지터-제거 버퍼 (126) 는 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리 (606) 를 포함할 수도 있다. 예를 들어, 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, 가장 최근에 프로세싱된 프레임이 프레임들의 시퀀스에서 제 3 프레임 (F3) 에 앞선다고 결정하는 것에 응답하여 제 3 프레임 (F3) 에 대응하는 소거를 플레이하는 것에 후속하여 지터-제거 버퍼 (126) 에 버퍼 엔트리 (606) 를 포함시킬 수도 있다. 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, 제 3 프레임 (F3) 이 프로세싱될 다음 프레임임을 표시하기 위해 버퍼 타임라인 (106) 을 업데이트할 수도 있다.
시간 t = 200 ms에, 케이스 1에서, 분석기 (122) 는 지터-제거 버퍼 (126) 가 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리를 포함하지 않는다고 결정할 수도 있다. 분석기 (122) 는 제 3 프레임 (F3) 에 대응하는 소거가 플레이되었다고 결정하는 것에 응답하여 다른 프레임에 대응하는 버퍼 엔트리가 제 3 프레임 (F3) 에 대응하는 부분 데이터를 포함하는지의 여부를 결정하는 것을 하지 않을 수도 있다. 분석기 (122) 는 제 4 프레임 (F4) 이 프로세싱될 다음 프레임이라고, 지터-제거 버퍼 (126) 가 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리를 포함하지 않는다고, 그리고 버퍼 엔트리 (608) 에 대응하는 버퍼링 기간이 만료되었다고 결정하는 것에 응답하여 제 4 프레임 (F4) 에 대응하는 버퍼 엔트리 (608) 를 프로세싱할 수도 있다.
시간 t = 200 ms에, 케이스 4에서, 분석기 (122) 는 제 3 프레임 (F3) 이 프로세싱될 다음 프레임이라고 그리고 버퍼 엔트리 (606) 에 대응하는 버퍼링 기간이 만료되었다고 결정하는 것에 응답하여 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리 (606) 를 프로세싱할 수도 있다. 제 3 프레임에 대응하는 소거를 플레이하는 것에 후속하여 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리 (606) 를 프로세싱하는 것은, 도 1을 참조하여 설명된 바와 같이, 암시적 버퍼 적응을 유발할 수도 있다.
후속 프레임들 (예컨대, F4, F5, F6 등) 의 프로세싱은 케이스 1과 비교하여 케이스 4에서 지연되어, 후속 프레임들이 프로세싱될 때 후속 프레임들에 대응하는 데이터가 지터-제거 버퍼 (126) 에 있을 공산을 증가시킬 수도 있다.
도 8을 참조하면, 도 1의 시스템의 특정 구현예들의 동작을 예시하는 도면이 도시되고 전체가 800으로 지정된다. 도면 (800) 은 버퍼 엔트리들이 다양한 구현예들에서 프로세싱될 때의 비교를 예시한다. 도면 (800) 은 도 6의 케이스 3 및 4에 대응하는 2 케이스들의 비교를 예시하는 표 (852) 를 포함한다. 도면 (800) 은 어떤 패킷들이 지터-제거 버퍼 (126) 에 존재하는지 (음영 패턴을 사용하여 도 8에서 도시됨) 와 버퍼 엔트리들이 2 케이스들의 각각에서 프로세싱되는 때를 예시하는 표 (850) 를 포함한다. 도면 (800) 은 지터-제거 버퍼 (126) 의 버퍼 엔트리들을 예시한다.
도 8에 도시된 예는 도 8에서의 플레이아웃 지연 (예컨대, 80 ms) 이 도 6에서의 플레이아웃 지연 (예컨대, 40 ms) 보다 더 길다는 점에서 도 6에 도시된 예와 상이하다. 더 긴 플레이아웃 지연 (예컨대, 80 ms) 은 목적지 디바이스 (102) 가 더 높은 지터를 경험하고 있는 상황들에 대응할 수도 있다. 도 8의 지터-제거 버퍼 (126) 의 버퍼 엔트리들은 도 6의 지터-제거 버퍼 (126) 의 버퍼 엔트리들과 상이하다.
시간 t = 60 ms에, 지터-제거 버퍼 (126) 는 비어 있을 수도 있다. 도 1의 분석기 (122) 는 지터-제거 버퍼 (126) 가 비어 있다고 결정하는 것에 응답하여 데이터 없음의 표시를 도 1의 스피치 디코더 (160) 에 제공할 수도 있다.
시간 t = 80 ms에, 지터-제거 버퍼 (126) 는 제 2 프레임 (F2) 에 대응하는 버퍼 엔트리 (804) 를 포함할 수도 있다. 버퍼 엔트리 (804) 의 타임스탬프 (TS) (824) 가 제 2 프레임 (F2) 의 전체 프레임 데이터를 포함하는 패킷의 수신 타임스탬프 (예컨대, 75 ms) 를 표시할 수도 있다. 도 1의 분석기 (122) 는 TS (824) (예컨대, 75 ms) 및 플레이아웃 지연 (예컨대, 80 ms) 에 기초하여 버퍼 엔트리 (804) 의 버퍼링 기간이 시간 t = 155 ms에 만료한다고 결정할 수도 있다. 시간 t = 80 ms에, 분석기 (122) 는 버퍼 엔트리 (804) 에 대응하는 버퍼링 기간이 만료되지 않은 것으로 결정하는 것에 응답하여 버퍼 엔트리 (804) 를 프로세싱하는 것을 하지 않을 수도 있다. 분석기 (122) 는 소거를 플레이할 (예컨대, 데이터 없음의 통지를 도 1의 스피치 디코더 (160) 에 제공) 할 수도 있다.
시간 t = 100 ms에, 지터-제거 버퍼 (126) 는 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리 (806) 를 포함할 수도 있다. 버퍼 엔트리 (806) 의 TS (826) 가 제 3 프레임 (F3) 의 전체 프레임 데이터를 포함하는 패킷의 수신 타임스탬프 (예컨대, 97 ms) 를 표시할 수도 있다. 분석기 (122) 는 버퍼 엔트리 (806) 에 대응하는 버퍼링 기간이 시간 t = 177 ms (예컨대, 97 ms + 80 ms) 에 만료한다고 결정할 수도 있다. 시간 t = 100 ms에, 분석기 (122) 는 각각의 버퍼링 기간들이 만료되지 않은 것으로 결정하는 것에 응답하여 버퍼 엔트리들 (804 및 806) 을 프로세싱하는 것을 하지 않을 수도 있다. 분석기 (122) 는 소거를 플레이할 (예컨대, 데이터 없음의 통지를 도 1의 스피치 디코더 (160) 에 제공할) 수도 있다.
시간 t = 120 ms에, 지터-제거 버퍼 (126) 는 제 4 프레임 (F4) 에 대응하는 버퍼 엔트리 (808) 를 포함할 수도 있다. 버퍼 엔트리 (808) 의 TS (828) 가 제 4 프레임 (F4) 의 전체 프레임 데이터를 포함하는 패킷의 수신 타임스탬프 (예컨대, 103 ms) 를 표시할 수도 있다. 분석기 (122) 는 버퍼 엔트리 (808) 에 대응하는 버퍼링 기간이 시간 t = 183 ms (예컨대, 103 ms + 80 ms) 에 만료한다고 결정할 수도 있다. 그 패킷은 제 1 프레임 (F1) 에 대응하는 부분 데이터를 또한 포함할 수도 있다. 따라서, 분석기 (122) 는 패킷을 이중-인큐잉할 수도 있다. 예를 들어, 지터-제거 버퍼 (126) 는 제 1 프레임 (F1) 에 대응하는 버퍼 엔트리 (802) 를 포함할 수도 있다. 버퍼 엔트리 (802) 는 패킷의 제 1 사본을 저장할 수도 있고, 버퍼 엔트리 (808) 는 패킷의 제 2 사본을 저장할 수도 있다. 케이스 3에서, 수신 타임스탬프 조정을 하지 않으면, 버퍼 엔트리 (802) 의 TS (822) 는 패킷의 수신 타임스탬프 (예컨대, 103 ms) 를 표시할 수도 있다. 케이스 4에서, 수신 타임스탬프 조정을 하면, 버퍼 엔트리 (802) 의 TS (822) 는 패킷의 수신 타임스탬프에 의해 표시된 제 2 시간 (예컨대, 103 ms) 보다 이른 제 1 시간 (예컨대, 42 ms) 을 표시할 수도 있다.
시간 t = 120 ms에, 케이스 3에서, 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, 버퍼 엔트리 (802) 가 제 1 프레임 (F1) 의 부분 데이터를 저장한다고 그리고 제 1 프레임 (F1) 이 프로세싱될 다음 프레임이라고 결정하는 것에 응답하여 플레이아웃 지연과는 독립적으로 버퍼 엔트리 (802) 를 프로세싱할 수도 있다. 케이스 4에서, 분석기 (122) 는 버퍼 엔트리 (802) 의 버퍼링 기간이 시간 t = 122 ms (42 ms + 80 ms) 에 만료한다고 결정할 수도 있다. 따라서, 시간 t = 120 ms에 케이스 4에서, 분석기 (122) 는 각각의 버퍼링 기간들이 만료되지 않은 것으로 결정하는 것에 응답하여 버퍼 엔트리들 (802, 804, 806, 및 808) 을 프로세싱하는 것을 하지 않을 수도 있다. 따라서, 분석기 (122) 는 소거를 플레이할 (예컨대, 데이터 없음의 통지를 도 1의 스피치 디코더 (160) 에 제공할) 수도 있다.
시간 t = 140 ms에, 케이스 3에서, 분석기 (122) 는 각각의 버퍼링 기간들이 만료되지 않은 것으로 결정하는 것에 응답하여 버퍼 엔트리들 (804, 806, 및 808) 을 프로세싱하는 것을 하지 않을 수도 있다. 분석기 (122) 는 소거를 플레이할 (예컨대, 데이터 없음의 통지를 도 1의 스피치 디코더 (160) 에 제공) 할 수도 있다. 케이스 4에서, 분석기 (122) 는 버퍼 엔트리 (802) 에 대응하는 버퍼링 기간이 만료되었다고 결정하는 것에 응답하여 버퍼 엔트리 (802) 를 프로세싱할 수도 있다.
시간 t = 160 ms에, 지터-제거 버퍼 (126) 는 제 5 프레임 (F5) 에 대응하는 버퍼 엔트리 (810) 를 포함할 수도 있다. 버퍼 엔트리 (810) 의 TS (830) 가 제 5 프레임 (F5) 의 전체 프레임 데이터를 포함하는 패킷의 수신 타임스탬프 (예컨대, 160 ms) 를 표시할 수도 있다. 분석기 (122) 는 버퍼 엔트리 (810) 에 대응하는 버퍼링 기간이 시간 t = 240 ms (예컨대, 160 ms + 80 ms) 에 만료한다고 결정할 수도 있다. 그 패킷은 제 2 프레임 (F2) 에 대응하는 부분 데이터를 또한 포함할 수도 있다. 분석기 (122) 는 지터-제거 버퍼 (126) 가 제 2 프레임 (F2) 에 대응하는 버퍼 엔트리 (804) 를 이미 가진다고 결정하는 것에 응답하여 패킷을 이중-인큐잉하는 것을 하지 않을 수도 있다. 예를 들어, 제 2 프레임 (F2) 의 전체 프레임 데이터를 포함하는 패킷이 제 2 프레임 (F2) 의 부분 데이터를 포함하는 패킷에 앞서 수신되었을 수도 있다. 분석기 (122) 는 전체 프레임 데이터를 부분 데이터로 대체 (예컨대, 겹쳐쓰기) 하지 않을 수도 있다.
시간 t = 160 ms에, 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, 버퍼 엔트리 (804) 에 대응하는 버퍼링 기간이 만료되었다고 그리고 제 2 프레임 (F2) 이 프로세싱될 다음 프레임이라고 결정하는 것에 응답하여 제 2 프레임 (F2) 에 대응하는 버퍼 엔트리 (804) 를 프로세싱할 수도 있다.
시간 t = 180 ms에, 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, 버퍼 엔트리 (806) 에 대응하는 버퍼링 기간이 만료되었다고 그리고 제 3 프레임 (F3) 이 프로세싱될 다음 프레임이라고 결정하는 것에 응답하여 제 3 프레임 (F3) 에 대응하는 버퍼 엔트리 (806) 를 프로세싱할 수도 있다.
시간 t = 200 ms에, 분석기 (122) 는, 도 1을 참조하여 설명된 바와 같이, 버퍼 엔트리 (808) 에 대응하는 버퍼링 기간이 만료되었다고 그리고 제 4 프레임 (F4) 이 프로세싱될 다음 프레임이라고 결정하는 것에 응답하여 제 4 프레임 (F4) 에 대응하는 버퍼 엔트리 (808) 를 프로세싱할 수도 있다.
도면 (800) 에 예시된 바와 같이, 케이스 3에 대응하는 구현예가 높은 지터 케이스들에서 케이스 4에 대응하는 구현예보다 유리한 성능을 가질 수도 있다. 플레이아웃 지연과는 독립적으로 프레임의 부분 데이터를 프로세싱하는 것은 후속 프레임에 대응하는 프레임 데이터가 수신되었을 공산을 후속 프레임이 프로세싱될 시간에 의해 감소시킬 수도 있다. 케이스 3에서, 프로세싱된 신호가 후속 프레임에 대응하는 프레임 데이터 없이 생성될 수도 있다. 플레이아웃 지연에 기초하여 부분 데이터를 프로세싱하는 것은 후속하는 것에 대응하는 프레임 데이터가 수신되었을 공산을 후속 프레임이 프로세싱될 시간에 의해 증가시킬 수도 있다. 프로세싱된 신호는 후속 프레임에 대응하는 프레임 데이터에 기초하여 생성될 수도 있다. 케이스 4에서 생성되는 프로세싱된 신호는 케이스 3에서 생성된 프로세싱된 신호보다 더 나은 오디오 품질 (예컨대, 더 적은 아티팩트들) 을 가질 수도 있다.
도 9를 참조하면, 버퍼 파라미터를 업데이트하기 위해 동작 가능한 시스템의 특정 구체적인 예가 개시되고 전체가 900으로 지정된다. 시스템 (900) 은 하나 이상의 다른 디바이스들, 이를테면 소스 디바이스 (104) 와, 네트워크 (944) 를 통해 통신하는 목적지 디바이스 (902) 를 포함할 수도 있다. 예를 들어, 소스 디바이스 (104) 는 오디오 데이터를 목적지 디바이스 (902) 로 전달하도록 구성될 수도 있다. 예시하기 위해, 소스 디바이스 (104) 와 목적지 디바이스 (902) 는 VoIP (voice over Internet protocol) 통화와 같은 음성 통화에 참여할 수도 있다. 부가적으로 또는 대안적으로, 목적지 디바이스 (902) 는 오디오 데이터를 소스 디바이스 (104) 로 전달하도록 구성될 수도 있고, 소스 디바이스 (104) 는 오디오 데이터를 수신하고 프로세싱하도록 구성될 수도 있다. 목적지 디바이스 (902) 는 도 1의 목적지 디바이스 (102) 를 포함하거나 또는 그런 목적지 디바이스에 대응할 수도 있다.
소스 디바이스 (104) 는 목적지 디바이스 (902) 로 전달될 오디오 데이터에 기초하여 패킷들의 시퀀스를 생성할 수도 있다. 예를 들어, 소스 디바이스 (104) 는 스피치 코더, 디코더 (도시되지 않음), 또는 그 조합을 포함할 수도 있다. 스피치 코더는 스피치 신호를 세그먼트들로 압축, 나눔, 또는 압축 및 나눔하여, 프레임들을 생성하도록 구성될 수도 있다. 각각의 세그먼트 (또는 "프레임") 의 지속기간은 신호의 스펙트럼 포락선이 비교적 정적으로 남아있을 것이 예측될 수도 있을 만큼 충분히 짧도록 선택될 수도 있다. 예시적인, 비제한적 예로서, 하나의 프레임 길이가 이십 밀리초일 수도 있으며, 이는 8 킬로헤르츠 (kHz) 의 샘플링 레이트에서의 160 개 샘플들에 대응한다. 다른 프레임 길이들 또는 샘플링 레이트들이 사용될 수도 있다는 것에 주의한다.
스피치 인코더, 이를테면 보코더는, 다수의 프레임들 (예컨대, 다수의 인코딩된 오디오 프레임들) 을 생성할 수도 있고 프레임 인코딩 시퀀스 내의 다수의 프레임들의 순서에 대응하는 시퀀스 번호로 각각의 프레임을 태깅할 수도 있다. 각각의 프레임의 시퀀스 번호는 프레임의 헤더 (예컨대, 보코더 패킷의 헤더) 에 포함될 수도 있다. 일부 구현예들에서, 각각의 프레임은 동일한 사이즈 또는 동일한 최대 프레임 사이즈를 가질 수도 있다. 다수의 프레임들 중 각각의 프레임은 보코더 패킷에 포함될 수도 있거나 또는 보코더 패킷에 대응할 수도 있고 각각의 보코더 패킷은 프레임 시퀀스 번호에 대응할 수도 있다. 예를 들어, 제 1 프레임 (예컨대, 제 1 보코더 패킷) 이 제 1 프레임 시퀀스 번호에 대응할 수도 있고, 제 2 프레임 (예컨대, 제 2 보코더 패킷) 이 제 2 프레임 시퀀스 번호에 대응할 수도 있다. 제 1 프레임이 제 2 프레임에 앞서 생성될 때, 제 1 프레임 시퀀스 번호는 제 2 프레임 시퀀스 번호보다 낮아서, 제 1 프레임이 프레임들의 시퀀스에서 제 2 프레임보다 이른 프레임 (예컨대, 더 오래된 프레임) 임을 표시할 수도 있다. 소스 디바이스 (104) 는 프레임들의 시퀀스를 목적지 디바이스 (902) 에 제 1 데이터 패킷(들) (940) 로서 송신할 수도 있다. 제 1 데이터 패킷(들) (940) 은 소스 디바이스 (104) 에 의해 송신되는 다수의, 별개의 패킷들을 포함할 수도 있다.
소스 디바이스 (104) 는 제 1 데이터 패킷(들) (940) 을 네트워크 (944) 를 통해 목적지 디바이스 (902) 로 송신할 수도 있다. 네트워크 (944) 는 서버 (도시되지 않음) 와 같은 하나 이상의 디바이스들을 포함할 수도 있으며, 그러한 디바이스들은 소스 디바이스 (104) 와 목적지 디바이스 (902) 사이의 통신을 가능하게 할 수도 있다. 일부 구현예들에서, 서버, 이를테면 RTP 서버가, 소스 디바이스 (104) 에 의해 송신된 프레임들 (또는 패킷들) 을 목적지 디바이스 (902) 에 제공되는 번들링된 패킷으로 번들링하도록 구성될 수도 있다. 예를 들어, 서버는 다수의 프레임들, 이를테면 다수의 보코더 패킷들을 번들링된 패킷 (예컨대, 멀티-프레임 패킷) 으로 번들링하도록 구성될 수도 있다. 제 1 데이터 패킷(들) (940) 은 도 1의 제 1 패킷 (132), 제 2 패킷 (134), 또는 둘 다를 포함할 수도 있거나 또는 그러한 패킷(들)에 대응할 수도 있다. 네트워크 (944) 는 도 1의 네트워크 (190) 를 포함하거나 또는 그런 네트워크에 대응할 수도 있다.
일부 구현예들에서, 보코더는 이전에 생성된 프레임에 대응하는 용장성 정보를 포함하는, 프레임들의 시퀀스의 패킷 (예컨대, 보코더 패킷) 을 생성할 수도 있다. 예를 들어, 보코더는 제 1 보코더 패킷을 생성할 수도 있고 제 1 보코더 패킷을 생성한 후 제 2 보코더 패킷을 생성할 수도 있다. 제 1 보코더 패킷은 제 1 프레임을 포함할 수도 있다. 제 2 보코더 패킷은 제 2 프레임과 제 1 프레임의 부분 프레임 (예컨대, 용장성 정보) 을 포함할 수도 있다. 일부 구현예들에서, 부분 프레임이 목적지 디바이스 (902) 에서 생성된 프로세싱된 스피치 신호에서 그 손실이 상당한 품질 영향을 유발할 스피치 프레임에 대응할 수도 있다.
제 1 데이터 패킷(들) (940) 에 의해 표현될 수도 있는 패킷들의 시퀀스의 제 1 예가 960에서 묘사된다. 제 1 예 (960) 는 소스 디바이스 (104) 에 의해 시구간에 걸쳐 송신된 프레임들의 시퀀스를 예시한다. 예를 들어, 프레임들의 시퀀스는 제 1 시간 (t1) 에 송신되는 제 1 패킷 (961), 제 2 시간 (t2) 에 송신되는 제 2 패킷 (962), 제 3 시간 (t3) 에 송신되는 제 3 패킷 (963), 및 제 4 시간 (t4) 에 송신되는 제 4 패킷 (964) 을 포함할 수도 있다. 일부 구현예들에서, 제 1 예 (960) 에서의 각각의 시간들 사이의 (예컨대, t1와 t2 사이 등의) 차이가 동일할, 이를테면 20 ms일 수도 있다. 제 1 패킷 (961) 은 스피치 신호의 제 1 세그먼트에 대응할 수도 있고 (n) 의 시퀀스 번호를 갖는 제 1 프레임 (971) 을 포함할 수도 있다. 제 2 패킷 (962) 은 제 1 세그먼트에 후속하는, 스피치 신호의 제 2 세그먼트에 대응할 수도 있다. 제 2 패킷 (962) 은 시퀀스 번호 (n+1) 을 갖는 제 2 프레임 (972) 을 포함할 수도 있다.
제 3 패킷 (963) 은 제 2 세그먼트에 후속하는 제 3 세그먼트에 대응할 수도 있다. 제 3 패킷 (963) 은 시퀀스 번호 (n+2) 를 갖는 제 3 프레임 (973) 을 포함할 수도 있다. 제 3 패킷 (963) (예컨대, 제 3 프레임 (973)) 은 제 1 프레임 (971) 에 대응하는 부분 프레임 (975) 을 또한 포함할 수도 있다. 부분 프레임 (975) 은 시퀀스 번호 (n) 을 가질 수도 있는데, 이 시퀀스 번호는 제 1 프레임 (971) 과 동일한 시퀀스 번호이다. 부분 프레임이 기초로 하는 특정 프레임이 일차 프레임이라고 지칭될 수도 있으며, 예컨대, 제 1 프레임 (971) 이 일차 프레임이다. 부분 프레임 (975) 이 (제 1 프레임 (971) 의 시퀀스 번호 (n) 와 부분 프레임 (975) 을 포함하는 제 3 프레임 (973) 의 시퀀스 번호 (n+2) 사이의 차이에 의해 표시되는 바와 같이) 제 1 프레임 (971) 으로부터 두 프레임 떨어져 있기 때문에, 부분 프레임은 2의 오프셋을 갖는다. 비록 부분 프레임 (975) 이 제 3 프레임 (973) 뒤에 있는 것으로서 예시되지만, 다른 구현예들에서 부분 프레임은 제 3 프레임 (973) 앞에 있거나 또는 제 3 프레임 (973) 에 포함될 수도 있다. 제 4 패킷 (964) 은 제 3 세그먼트에 후속하는 제 4 세그먼트에 대응할 수도 있다. 제 4 패킷 (964) 은 시퀀스 번호 (n+3) 을 갖는 제 4 프레임 (974) 을 포함할 수도 있다.
네트워크 (944) 에 의해 (예컨대, 네트워크 (944) 에 포함된 서버 (도시되지 않음) 에 의해) 생성되는 번들링된 패킷들과 연관될 수도 있는 멀티-프레임 패킷들의 시퀀스 중 제 2 예가 980에서 묘사된다. 제 2 예 (980) 는 시구간에 걸쳐 소스 디바이스 (104) 에 의해 송신된 프레임들에 기초하여 네트워크 (944) 에 의해 생성된 멀티-프레임 패킷들의 시퀀스 (예컨대, 프레임들의 시퀀스) 를 도시한다. 소스 디바이스 (104) 에 의해 송신된 프레임들은 네트워크 (944) 에 의해 수신된 제 1 시퀀스의 패킷들 (940) 을 포함할 수도 있거나 또는 그러한 제 1 시퀀스의 패킷들에 대응할 수도 있다. 네트워크 (944) 는 제 1 시퀀스의 패킷들 (940) 의 프레임들에 기초하여 멀티-프레임 패킷들의 시퀀스를 생성 (또는 송신) 할 수도 있다. 예를 들어, 멀티-프레임 패킷들의 시퀀스는 제 1 시간 (t1) 에 네트워크 (944) 에 의해 송신되는 (또는 생성되는) 제 1 멀티-프레임 패킷 (981), 제 2 시간 (t2) 에 네트워크 (944) 에 의해 송신되는 (또는 생성되는) 제 2 멀티-프레임 패킷 (982), 제 3 시간 (t3) 에 네트워크 (944) 에 의해 송신되는 (또는 생성되는) 제 3 멀티-프레임 패킷 (983), 및 제 4 시간 (t4) 에 네트워크 (944) 에 의해 송신되는 (또는 생성되는) 제 4 멀티-프레임 패킷 (984) 을 포함할 수도 있다. 일부 구현예들에서, 제 2 예 (980) 의 각각의 시간들 사이 (예컨대, t1과 t2 사이, t2와 t3 사이 등) 의 차이가 동일할, 이를테면 40 ms일 수도 있다. 제 1 멀티-프레임 패킷 (981) 은 시퀀스 번호 (n) 을 갖는 제 1 프레임 (991) 과 시퀀스 번호 (n+1) 을 갖는 제 2 프레임 (992) 을 포함할 수도 있다. 제 2 멀티-프레임 패킷 (982) 은 시퀀스 번호 (n+2) 를 갖는 제 3 프레임 (993) 과 시퀀스 번호 (n+3) 을 갖는 제 4 프레임 (994) 을 포함할 수도 있다.
제 3 멀티-프레임 패킷 (983) 은 시퀀스 번호 (n+4) 를 갖는 제 5 프레임 (995) 과 시퀀스 번호 (n+5) 를 갖는 제 6 프레임 (996) 을 포함할 수도 있다. 제 5 프레임 (995) 은 제 2 프레임 (992) 에 대응하는 부분 프레임 (999) 을 포함할 수도 있다. 부분 프레임 (999) 은 시퀀스 번호 (n+1) 을 가질 수도 있는데, 이 시퀀스 번호는 제 2 프레임 (992) 과 동일한 시퀀스 번호이다. 부분 프레임 (999) 이 (제 2 프레임 (992) 의 시퀀스 번호 (n+1) 과 부분 프레임 (999) 을 포함하는 제 5 프레임 (995) 의 시퀀스 번호 (n+4) 사이의 차이에 의해 표시되는 바와 같이) 제 2 프레임 (992) 으로부터 세 프레임 떨어져 있기 때문에, 부분 프레임 (999) 은 3의 오프셋을 갖는다. 제 4 멀티-프레임 패킷 (984) 은 시퀀스 번호 (n+6) 을 갖는 제 7 프레임 (997) 과 시퀀스 번호 (n+7) 을 갖는 제 8 프레임 (998) 을 포함할 수도 있다. 프레임들 (991~999) 의 각각은 소스 디바이스 (104) 에 의해 생성될 수도 있다.
네트워크 (944) 는 제 2 예 (980) 에서 묘사된 멀티-프레임 패킷들의 시퀀스를 목적지 디바이스 (902) 로 생성 및 송신할 수도 있다. 예를 들어, 멀티-프레임 패킷들의 시퀀스는 통신 채널 (즉, 유선 또는 무선 네트워크 접속) 을 통해 송신될 수도 있다. 목적지 디바이스 (902) 는 제 1 데이터 패킷(들) (940) 에 기초할 수도 있는 (또는 제 1 데이터 패킷(들)에 대응할 수도 있는) 제 2 시퀀스의 패킷(들) (942) 또는 네트워크 (944) 에 의해 생성된 (또는 송신된) 멀티-프레임 패킷들의 시퀀스를 수신할 수도 있다. 제 2 시퀀스의 패킷(들) (942) 은 목적지 디바이스 (902) 에 의해 수신되는 다수의, 별개의 패킷들을 포함할 수도 있다. 네트워크 (944) 의 상태들로 인해, 제 1 데이터 패킷(들) (940) (또는 제 2 예 (980) 의 멀티-프레임 패킷들의 시퀀스) 은 제 1 시퀀스와는 상이한 패킷들의 제 2 시퀀스를 갖는 제 2 시퀀스의 패킷(들) (942) 으로서 목적지 디바이스 (902) 에 의해 수신될 수도 있다. 예를 들어, 제 2 데이터 패킷(들)의 패킷들은 패킷(들) (942) 의 제 2 시퀀스가 목적지 디바이스 (902) 에서 수신될 때 비순서적일, 손상될 (예컨대, 비트 오류들을 가질), 누락될, 또는 그 조합일 수도 있다. 다른 예로서, 제 2 예 (980) 의 멀티-프레임 패킷들의 시퀀스는 목적지 디바이스 (902) 에 의해 비순서적으로 수신될 수도 있다.
목적지 디바이스 (902) 는 수신기 (924), 버퍼 (926), 버퍼 관리기 (910), 메모리 (930), 및 스피치 디코더 (956) 를 포함할 수도 있다. 예를 들어, 수신기 (924) 는 도 1의 수신기 (124) 를 포함하거나 또는 그런 수신기에 대응할 수도 있다. 수신기 (924) 는 하나 이상의 패킷들, 이를테면 하나 이상의 보코더 패킷들 또는 하나 이상의 멀티-프레임 패킷들을 수신하도록 구성될 수도 있다. 패킷들은 가변하는 네트워크 지연들로 인해 수신기 (924) 에 랜덤으로 또는 예측 불가능한 도착 시간들에 도착할 수도 있다. 부가적으로 또는 대안적으로, 패킷들은 비순서적으로 (예컨대, 패킷들 (940) 의 제 1 시퀀스에 대해, 제 2 예 (980) 의 멀티-프레임 패킷들의 시퀀스에 대해, 또는 그 조합에 대해 비순서적 시퀀스로) 도착할 수도 있다. 수신된 패킷들은 버퍼 관리기 (910) 에 제공될 수도 있다.
버퍼 관리기 (910) 는 수신된 패킷들을 파싱하도록 그리고 각각의 패킷에 포함된 하나 이상의 프레임들을 식별 (예컨대, 추출) 하도록 구성될 수도 있다. 예를 들어, 버퍼 관리기 (910) 는 도 1의 분석기 (122) 를 포함하거나 또는 그런 분석기에 대응할 수도 있다. 버퍼 관리기 (910) 는 버퍼 (926) 에 하나 이상의 수신된 패킷들의 프레임들을 저장 (예컨대, 인큐잉) 하도록 구성될 수도 있다. 예를 들어, 버퍼 (926) 는 도 1의 지터-제거 버퍼 (126) 를 포함하거나 또는 그런 지터-제거 버퍼에 대응할 수도 있다. 버퍼 (926), 이를테면 지터-제거 버퍼는, 프레임들이 프레임들의 시퀀스에 따라 순서화되는 것과 패킷 도착 시간들에 따라 지터를 감소시키는 것이 가능하게 수신된 프레임들을 저장하도록 구성될 수도 있다. 버퍼 (926) 의 사이즈 (예컨대, 최소 플레이아웃 지연) 를 증가시키는 것은 나중의 손실 패킷들의 수를 감소시킬 수도 있고, 따라서, 버퍼 (926) 에서의 프레임들의 수를 증가시킬 수도 있다. 버퍼 (926) 에서의 프레임들의 수에서의 증가는 오디오 품질에서의 증가로 이어질 수도 있다.
일부 구현예들에서, 버퍼 (926) 에 프레임을 저장하는 것이 아니라, 버퍼 관리기 (910) 는, 메모리, 이를테면 메모리 (930) 에서 프레임이 저장된 로케이션을 가리키는 포인터 (예컨대, 식별자) 를 버퍼 (926) 에 저장할 수도 있다. 예를 들어, 메모리 (930) 는 도 1의 메모리 (176) 를 포함하거나 또는 그런 메모리에 대응할 수도 있다. 버퍼 관리기 (910) 가 수신된 패킷에 포함되는 부분 프레임을 식별하면, 버퍼 관리기 (910) 는 부분 프레임과 동일한 시퀀스 번호를 갖는 대응하는 프레임 (예컨대, 전체 프레임) 이 버퍼 (926) 에 포함되는지의 여부를 결정할 수도 있다. 대응하는 프레임이 버퍼 (926) 에 저장된다면, 버퍼 관리기 (910) 는 부분 프레임을 버릴 수도 있다. 대응하는 프레임이 버퍼 (926) 에 저장되지 않는다면, 버퍼 관리기 (910) 는 수신된 패킷의 제 1 사본 및 수신된 패킷의 제 2 사본을 버퍼 (926) 속에 삽입함으로써 수신된 패킷을 이중-인큐잉할 수도 있다. 예를 들어, 버퍼 관리기 (910) 는 부분 프레임을 버퍼 (926) 속에 수신된 패킷의 제 1 사본으로서 삽입할 수도 있다. 수신된 패킷의 제 1 사본은 부분 프레임의 시퀀스 번호에 따라 버퍼 (926) 속에 삽입될 수도 있다. 버퍼 관리기 (910) 는 수신된 패킷에 포함된 제 2 프레임을 버퍼 (926) 속에 수신된 패킷의 제 2 사본으로서 삽입할 수도 있다. 수신된 패킷의 제 2 사본은 제 2 프레임의 제 2 시퀀스 번호에 따라 버퍼 (926) 에 삽입될 수도 있다. 부분 프레임이 버퍼 (926) 에 저장된 후 대응하는 프레임이 수신된다면, 버퍼 관리기 (910) 는 부분 프레임을 전체 프레임으로 대체할 수도 있다.
버퍼 관리기 (910) 는 버퍼 (926) 로부터의 프레임들을 스피치 디코더 (956) 에 제공하도록 구성될 수도 있다. 예를 들어, 스피치 디코더 (956) 는 도 1의 스피치 디코더 (160) 를 포함하거나 또는 그런 스피치 디코더에 대응할 수도 있다. 스피치 디코더 (956) 는 프레임들을 수신하도록 그리고 주기적인 시간의 블록들, 이를테면 20 ms 블록들로 오디오 출력 (958) 을 생성하기 위해 수신된 프레임들을 프로세싱하도록 구성될 수도 있다. 예를 들어, 오디오 출력 (958) 은 도 1의 116의 프로세싱된 오디오 신호를 포함하거나 또는 그런 프로세싱된 오디오 신호에 대응할 수도 있다. 연속 오디오 출력을 생성하기 위해, 스피치 디코더 (956) 는 새로운 프레임을 주기적으로 (예컨대, 규칙적인 간격으로) 수신하도록 구성될 수도 있다. 예를 들어, 스피치 디코더 (956) 는 새로운 프레임을 매 20 ms마다 수신하도록 구성될 수도 있다.
프레임들을 스피치 디코더 (956) 에 적절한 순서 (예컨대, 순차적 순서) 로 제공하기 위해, 버퍼 관리기 (910) 는 스피치 디코더 (956) 에 제공될 프레임의 다음 시퀀스 번호를 표시하는 카운터 (도시되지 않음) 를 유지할 수도 있다. 카운터의 값에 기초하여, 프레임이 카운터의 값과 매칭되는 시퀀스 번호를 가질 때 버퍼 관리기 (910) 는 그 프레임을 버퍼 (926) 로부터 디큐잉할 수도 있다. 디큐잉된 프레임은 그 다음에 스피치 디코더 (956) 에 제공될 수도 있다. 프레임이 스피치 디코더 (956) 에 제공된 후, 버퍼 관리기 (910) 는 카운터의 값을 점증시킬 수도 있다.
프레임들은 버퍼 파라미터 (934) 에 따라 버퍼 (926) 에서 유지될 수도 있다. 예를 들어, 버퍼 파라미터 (934) 는 도 1의 플레이아웃 지연 (128) 을 포함하거나 또는 그런 플레이아웃 지연에 대응할 수도 있다. 버퍼 파라미터 (934) 는 메모리 (930) 에 저장될 수도 있다. 일부 구현예들에서, 버퍼 파라미터 (934) 는 플레이아웃 지연 (예컨대, 버퍼 깊이) 또는 플레이아웃 지연 파라미터라고 지칭될 수도 있다. 플레이아웃 지연은 프레임이 버퍼 (926) 에 머무는 최소 시간량 또는 최대 시간량을 표시할 수도 있다. 일부 구현예들에서, 플레이아웃 지연은 버퍼 관리기 (910) 에 수신되어 있는 프레임과 스피치 디코더 (956) 에 제공되어 있는 프레임 사이의 최소 시간량 또는 최대 시간량을 표시할 수도 있다. 최소 시간량은 최소 플레이아웃 지연이라고 지칭될 수도 있고, 최대 시간량은 최대 플레이아웃 지연이라고 지칭될 수도 있다. 목적지 디바이스 (902) 의 동작 동안, 버퍼 관리기 (910) 는 지터에 기초하여 버퍼 파라미터 (934) 의 하나 이상의 값들을 컴퓨팅 및 업데이트할 수도 있다. 예를 들어, 지터 값이 더 높을 때 더 높은 플레이아웃 지연이 사용될 수도 있고 지터 값이 더 낮거나 또는 영일 때 더 낮은 플레이아웃 지연이 사용될 수도 있다. 최소 플레이아웃 지연에서의 증가가 소스 디바이스 (104) 와 목적지 디바이스 (902) 사이의 증가된 단 대 단 지연의 희생으로 늦은 손실 패킷들 (예컨대, 스피치 디코더 (956) 에 의해 사용될 너무 늦게 도착하는 패킷들) 의 수를 감소시킬 수도 있다는 것에 주의한다.
카운터의 값에 기초하여 스피치 디코더 (956) 에 제공될 프레임이 누락된다면 (예컨대, 그 프레임이 버퍼 (926) 에 있지 않다면), 버퍼 관리기 (910) 는 암시적 버퍼 적응 기법을 사용할 수도 있다. 암시적 버퍼 적응 기법은 패킷 플레이아웃의 효과적인 지연을 증가시키는데 사용될 수도 있다. 암시적 버퍼 적응 기법은 버퍼 파라미터 (934) 를 명시적으로 증가시키지 않고, 패킷이 버퍼 (926) 에 머무르는 시간을 증가시킨다. 암시적 버퍼 적응 기법을 구현하기 위해, 카운터의 값에 대응하는 특정 프레임이 누락되어 있다면 버퍼 관리기 (910) 는 소거를 플레이한다. 그러나, 특정 프레임 (또는 특정 프레임에 대응하는 부분 프레임) 이 임계값 시간량 (예컨대, 20 ms) 내에 도착한다면, 특정 프레임은 스피치 디코더 (956) 에 제공될 수도 있고 플레이될 수도 있다. 암시적 버퍼 적응 기법은 소거 또는 특정 프레임에 후속하는 프레임들에 대한 전체 지연을 증가시킬 수도 있다. 예를 들어, 프레임들의 시퀀스의 제 1 부분이 스피치 (예컨대, 토크 스퍼트) 에 대응하는 오디오 데이터를 포함할 수도 있다. 이 예에서, 증가된 전체 지연으로부터의 복원이, 프레임들의 시퀀스가 스피치 디코더 (956) 에 의해 수신되고 프로세싱된 후와 같이, 프레임들의 시퀀스의 제 1 부분 (예컨대, 토크 스퍼트) 에 뒤따르는 무음 기간에 대응하는 프레임들의 시퀀스 중 제 2 부분 동안 발생할 수도 있다.
일부 구현예들에서, 버퍼 파라미터 (934) (예컨대, 최소 플레이아웃 지연) 는, 예시적인, 비제한적 예로서, 대략 40 ms의 값을 가질 수도 있다. 버퍼 파라미터가 40 ms인 경우, 부분 프레임들이 3의 오프셋을 갖고 멀티-프레임 패킷들에 포함될 때 목적지 디바이스 (902) 는 소거들에서의 증가를 경험할 수도 있다. 예를 들어, 제 2 예 (980) 를 참조하면, 제 5 프레임 (995) 이 생성되고 제 3 멀티-프레임 패킷 (983) 에 포함된 후 (제 2 프레임 (992) 에 대응하는) 부분 프레임 (999) 은 송신된다. 따라서, 목적지 디바이스 (902) 는, 제 2 프레임 (992) 이 손실되거나 또는 손상되는 이벤트에서 부분 프레임 (999) 을 수신하기 위해, 지연이 없는 것으로 가정하여, 80 ms (예컨대, 두 개의 40 ms 간격들) 를 기다려야 한다. 40 ms의 버퍼 파라미터 (934) 로, 부분 프레임 (999) 은 누락한 제 2 프레임 (992) 대신 사용되기 위해 시간에 맞춰 수신되지 않을 수도 있고 소거가 발생할 수도 있다. 덧붙여, 멀티-프레임 패킷들이 둘 이상의 보코더 패킷들을 포함하기 때문에, 멀티-프레임 패킷의 손실은 각각 소거를 초래할 수도 있는 두 개의 누락 프레임들을 초래한다. 따라서, 멀티-프레임 패킷들과 2를 초과하는 오프셋 값들의 사용은 버퍼 파라미터 (934) 가 40 ms로 유지된다면 목적지 디바이스 (902) 의 증가된 소거율의 상황을 야기할 수도 있다.
증가된 소거율을 초래할 수도 있는 상황들을 식별하기 위해, 버퍼 관리기 (910) 는 번들 검출기 (912), 오프셋 검출기 (914) 및 소거 검출기 (916) 를 포함할 수도 있다. 버퍼 관리기 (910) 는, 본 명세서에서 설명되는 바와 같이, 번들 검출기 (912), 오프셋 검출기 (914), 또는 소거 검출기 (916) 에 의해 생성된 하나 이상의 표시자들에 응답하여, 버퍼 파라미터 (934) 의 값을 조정하도록 구성될 수도 있다. 번들 검출기 (912), 오프셋 검출기 (914), 및 소거 검출기 (916) 의 각각은 메모리 (930) 에 저장된 대응하는 데이터를 생성하도록 구성될 수도 있다. 예를 들어, 번들 검출기 (912) 는 번들 데이터 (931) 를 생성할 수도 있다. 오프셋 검출기 (914) 는 오프셋 데이터 (932) 를 생성할 수도 있고, 소거 검출기 (916) 는 소거 데이터 (933) 를 생성할 수도 있다. 오프셋 데이터 (932) 는 도 1의 프레임 오프셋 (136) 을 포함하거나 또는 그런 프레임 오프셋에 대응할 수도 있다.
번들 데이터 (931) 는 멀티-프레임 패킷에서 함께 번들링되는 프레임들 (예컨대, 스피치 프레임들) 의 수에 연관된 제 1 데이터를 포함할 수도 있다. 예를 들어, 번들 데이터 (931) 는 시구간 동안 수신된 다수의 패킷들에 포함되는 프레임들의 평균 수에 연관될 수도 있다. 예를 들어, 제 1 시구간 동안 목적지 디바이스 (902) 는 제 1 패킷과, 뒤따르는 제 2 패킷, 뒤따르는 제 3 패킷을 수신할 수도 있다. 번들 데이터 (931) 는 제 1 패킷에 포함된 프레임들의 제 1 수를 표시하는 제 1 데이터 엔트리, 제 2 패킷에 포함된 프레임들의 제 2 수를 표시하는 제 2 데이터 엔트리 및 제 3 패킷에 포함된 프레임들의 제 3 수를 표시하는 제 3 데이터 엔트리를 저장할 수도 있다. 각각의 패킷에 포함된 프레임들의 평균 수가 증가함에 따라, 연속적인 패킷들 사이의 평균 간격 시간이 증가한다. 오프셋 데이터 (932) 는 제 2 시구간 동안 수신된 각각의 부분 프레임에 대한 오프셋 값을 추적할 수도 있다. 소거 데이터 (933) 는 제 3 시구간 동안 스피치 디코더 (956) 에 제공된 (예컨대, 소거, 무음 프레임, 또는 데이터 없음 프레임을 플레이하는) 소거들의 수를 추적할 수도 있다.
번들 검출기 (912), 오프셋 검출기 (914), 및 소거 검출기 (916) 의 각각은 대응하는 표시자를 생성하도록 구성될 수도 있다. 예를 들어, 번들 검출기 (912) 는 번들 표시자 (913) 를 생성할 수도 있으며, 오프셋 검출기 (914) 는 오프셋 표시자 (915) 를 생성할 수도 있고, 소거 검출기 (916) 는 소거 표시자 (917) 를 생성할 수도 있다. 예시하기 위해, 번들 검출기 (912) 는 번들 데이터 (931) 에 기초하여 번들 표시자 (913) 를 생성할 수도 있다. 번들 표시자 (913) 는 목적지 디바이스 (902) 에 의해 수신된 패킷 당 프레임들의 평균 수 (예컨대, 보코더 패킷들의 평균 수) 를 표시할 수도 있다. 번들 표시자 (913) 는 미리 결정된 수의 가장 최근에 수신된 패킷들 (예컨대, 다섯 개의 가장 최근에 수신된 패킷들) 에 기초하여 또는 제 1 시구간 동안 수신된 패킷들 (예컨대, 마지막 400 ms 동안 수신된 패킷들) 에 기초하여 패킷 당 프레임들의 평균 수를 계산할 수도 있다. 부가적으로 또는 대안적으로, 번들 표시자 (913) 는 멀티-프레임 패킷들이 목적지 디바이스 (902) 에 의해 수신되고 있는지의 여부를 표시할 수도 있다. 예를 들어, 번들 표시자 (913) 는 멀티-프레임 패킷들이 수신되고 있음을 표시하는 논리적 1 값을 가질 수도 있고 멀티-프레임 패킷들이 수신되고 있지 않음을 표시하는 논리적 0 값을 가질 수도 있다. 부가적으로 또는 대안적으로, 번들 표시자 (913) 는 목적지 디바이스 (902) 에 의해 수신된 연속적인 패킷들 사이의 평균 시간 간격을 표시할 수도 있다.
오프셋 검출기 (914) 는 오프셋 데이터 (932) 에 기초하여 오프셋 표시자 (915) 를 생성할 수도 있다. 오프셋 표시자 (915) 는 제 2 시구간 동안 수신된 하나 이상의 부분 프레임들의 평균 오프셋을 표시할 수도 있다. 소거 검출기 (916) 는 소거 데이터 (933) 에 기초하여 소거 표시자 (917) 를 생성할 수도 있다. 소거 표시자 (917) 는 제 3 시구간 동안의 소거들의 평균 수를 표시할 수도 있다. 부가적으로 또는 대안적으로, 소거 표시자 (917) 는 프레임 소거율을 소거들의 백분율로서 표시할 수도 있다. 소거들의 백분율은 제 3 시구간 동안 스피치 디코더 (956) 에 제공될 프레임들의 총 수로 나누어진 제 3 시구간 동안 스피치 디코더 (956) 에 제공된 소거들의 수를 표시할 수도 있다.
버퍼 관리기 (910) 는 표시자들 (913, 915, 917) 중 하나 이상의 표시자들과 대응하는 임계값을 비교할 수도 있다. 메모리 (930) 는 하나 이상의 임계값들 (936), 이를테면 번들 임계값 (937), 오프셋 임계값 (938), 및 소거 임계값 (939) 을 저장할 수도 있다. 번들 검출기 (912) 는 번들 표시자 (913) 와 번들 임계값 (937), 오프셋 표시자 (915) 와 오프셋 임계값 (938), 소거 표시자 (917) 와 소거 임계값 (939), 또는 그 조합을 비교할 수도 있다.
번들 임계값 (937) 은 예시적인, 비제한적 예로서 1.5의 값을 가질 수도 있다. 번들 표시자 (913) 가 1.5의 값 이상이면, 번들 검출기 (912) 는 멀티-프레임 패킷들 (예컨대, 번들링된 패킷들) 이 목적지 디바이스 (902) 에 의해 수신되고 있음을 검출할 수도 있다. 다른 예로서, 번들 표시자 (913) 가 연속적인 패킷들 사이의 평균 시간 간격에 대응할 때, 번들 임계값 (937) 은 30 ms의 값을 가질 수도 있다. 예를 들어, 소스 디바이스 (104) 가 프레임들을 보코더 패킷들로서 매 20 ms마다 생성 및 송신할 때, 프레임들은 지연 없음을 가정하여 목적지 디바이스 (902) 에서 매 20 ms마다 수신될 수도 있다. 그러나, 네트워크 (944) 가 멀티-프레임 패킷들을 생성할 때, 멀티-프레임 패킷들은 (예컨대, 두 개의 보코더 패킷들을 생성하는 시간량에 대응하는) 적어도 매 40 ms마다 생성될 (또는 송신될) 수도 있다. 멀티-프레임 패킷들은 지연 없음을 가정하여 목적지 디바이스 (902) 에서 매 40 ms마다 수신될 수도 있다. 따라서, 번들 표시자 (913) (목적지 디바이스 (902) 에 의해 수신된 연속 프레임들 사이의 평균 간격을 표시함) 가 번들 임계값 (937) (예컨대, 30 ms) 이상일 때, 버퍼 관리기 (910) 는 멀티-프레임 패킷들이 목적지 디바이스 (902) 에 의해 수신되고 있다고 결정할 수도 있다. 비-멀티-프레임 패킷들이 수신될 때와 비교하여 멀티-프레임 패킷들이 수신될 때 패킷들이 덜 빈번하게 수신되고 있기 때문에, 버퍼 관리기 (910) 는 버퍼 파라미터 (934) 를 증가하여 플레이아웃 지연 (예컨대, 버퍼 깊이) 를 증가시키고, 따라서, 패킷이 버퍼 (926) 에 남아 있는 시간을 증가시킬 수도 있다. 버퍼 깊이에서의 증가는 버퍼 관리기 (910) 가 프레임 복원을 위해 이용 가능한 더 많은 부분 프레임들을 갖는 것을 허용한다. 일부 구현예들에서, 목적지 디바이스 (902) 는, 예시적인, 비제한적 예로서, 하나 이상의 표준들, 이를테면 3세대 파트너십 프로젝트 (3GPP) 표준 (예컨대, EVS (Enhanced Voice Services) 3GPP 표준) 에 따라 부분 프레임들을 사용하여 누락 또는 손상된 프레임들을 복원할 수도 있다.
오프셋 임계값 (938) 은 예시적인, 비제한적 예로서 2.5의 값을 가질 수도 있다. 예를 들어, 버퍼 파라미터 (934) 가 40 ms이고 두 개의 보코더 패킷들을 포함하는 멀티-프레임 패킷들이 (지연 없음을 가정하여) 매 40 ms마다 수신될 때, 2의 오프셋 값을 갖는 부분 프레임이 목적지 디바이스 (902) 에 의해 수신되고 대응하는 전체 프레임이 누락되는 이벤트에서 이용 가능할 수도 있다. 그러나, 부분 프레임이 3의 오프셋 값을 갖고 두 개의 보코더 패킷들을 포함하는 멀티-프레임 패킷들이 (지연 없음을 가정하여) 매 40 ms마다 수신될 때, 부분 프레임은 80 ms 후에 수신될 수도 있으며, 이는 부분 프레임이 누락 프레임을 복원하기 위해 필요할 때 너무 늦을 수도 있다. 따라서, 오프셋 표시자 (915) (예컨대, 목적지 디바이스 (902) 에 의해 수신된 하나 이상의 부분 프레임들의 평균 오프셋) 가 오프셋 임계값 (938) (예컨대, 2.5) 이상일 때, 버퍼 관리기 (910) 는 프레임이 버퍼 (926) 에 머무르는 시간을 증가시키기 위해 추가적인 버퍼 깊이를 제공함 (예컨대, 플레이아웃 지연을 증가시킴) 으로써 버퍼 파라미터 (934) 를 증가시킬 것을 결정할 수도 있다. 프레임의 플레이아웃 전에 프레임이 버퍼에 머무르는 시간을 증가시키는 것은 버퍼 관리기 (910) 가 프레임의 플레이아웃 전에 증가된 량의 부분 프레임들을 수신하는 것을 허용한다. 버퍼 관리기 (910) 는 프레임 복원을 위해 증가된 량의 부분 프레임들을 사용할 수도 있다.
소거 임계값 (939) 은, 예시적인, 비제한적 예로서, 3%~5% 사이의 값을 가질 수도 있다. 버퍼 관리기 (910) 는 3%~5%에 대응하는 소거율을 오디오 출력 (958) 의 감소된 품질을 초래할 수도 있는 높은 소거율인 것으로 간주할 수도 있다. 따라서, 소거 표시자 (917) (소거율) 가 소거 임계값 (939) (예컨대, 4%) 이상일 때, 버퍼 관리기 (910) 는 프레임 복원을 위한 부분 프레임들을 사용하기 위해 추가적인 버퍼 용량을 제공하여 시간에 맞춰 부분 프레임들을 수신함으로써 버퍼 파라미터 (934) 를 증가시킬 수도 있으며, 이는 소거율을 감소시킬 수도 있다.
대응하는 임계값을 충족시키는 (예컨대, 대응하는 임계값 이상인) 표시자들 (913, 915, 917) 중 하나 이상의 표시자들에 응답하여, 버퍼 관리기 (910) 는 버퍼 파라미터 (934) 를 업데이트할 수도 있다. 예를 들어, 버퍼 관리기 (910) 는 버퍼 파라미터 (934) 를 명시적으로 증가시켜, 이를테면 최소 플레이아웃 값을 증가시킬 수도 있다. 예시하기 위해, 버퍼 파라미터 (934) 는 대응하는 임계값을 충족시키는 표시자들 (913, 915, 917) 중 하나 이상의 표시자들에 응답하여 제 1 최소 플레이아웃 값 (예컨대, 40 ms) 으로부터 제 2 최소 플레이아웃 값 (예컨대, 80 ms) 으로 증가될 수도 있다. 버퍼 관리기 (910) 는 무음 기간 동안 버퍼 파라미터 (934) 를 조정할 수도 있다. 무음 기간 동안, 패킷들 (인코딩된 오디오 데이터를 포함함) 이 목적지 디바이스 (902) 에 의해 수신되지 않을 수도 있다. 예를 들어, 무음 기간은 두 개의 상이한 스피치 기간들 사이에서 발생할 수도 있다. 버퍼 파라미터 (934) 를 증가시키는 것은 더 많은 부분 프레임들이 프레임 복원을 위해 버퍼 (926) 에서 이용 가능하게 되는 것을 가능하게 할 수도 있고 소거율을 감소시킬 수도 있다.
버퍼 파라미터 (934) 가 제 2 최소 플레이아웃 값으로 설정된 후, 버퍼 파라미터 (934) 는 하나 이상의 표시자들 (913, 915, 917) 이 대응하는 임계값을 더 이상 충족시키지 않을 때 제 1 최소 플레이아웃 값으로 다시 설정될 수도 있다. 예를 들어, 소거 임계값 (939) 이상인 소거 표시자 (917) 에 응답하여 버퍼 파라미터 (934) 가 제 2 값으로 설정되었을 때, 버퍼 파라미터 (934) 는 소거 임계값 (939) 미만인 소거 표시자 (917) 에 응답하여 제 1 값으로 설정될 수도 있다.
동작 동안, 목적지 디바이스 (902) 는 버퍼 파라미터 (934) 를 제 1 값, 이를테면 20 ms의 초기 값으로 설정할 수도 있다. 목적지 디바이스 (902) 는 스피치의 기간에 대응하는 패킷들 (942) 의 제 2 시퀀스를 수신할 수도 있다. 버퍼 관리기 (910) 는 버퍼 (926) 를 사용하여 패킷들 (942) 의 제 2 시퀀스에서 수신된 프레임들을 정리할 수도 있다. 버퍼 관리기 (910) 는 정리된 프레임들을 버퍼 (926) (또는 메모리 (930)) 로부터 스피치 디코더 (956) 로 제공하여 스피치 디코더 (956) 가 오디오 출력 (958) 을 생성하는 것을 가능하게 할 수도 있다.
프레임들을 정리하고 그 프레임들을 스피치 디코더 (956) 에 제공하는 것에 더하여, 버퍼 관리기 (910) 는 표시자들 (913, 915, 917) 을 생성하고 표시자들 (913, 915, 917) 의 각각과 대응하는 임계값을 비교할 수도 있다. 대응하는 임계값을 충족시키는 표시자들 (913, 915, 917) 중 하나 이상의 표시자들에 응답하여, 버퍼 관리기 (910) 는 버퍼 파라미터 (934) 를 제 2 값으로 업데이트할 수도 있다. 예를 들어, 버퍼 관리기 (910) 는 스피치의 기간에 뒤따르는 무음 기간 동안 버퍼 파라미터 (934) 를 업데이트할 수도 있다. 따라서, 제 2 값을 갖는 버퍼 파라미터 (934) 는 무음 기간에 뒤따르는 스피치의 제 2 기간 동안 사용될 수도 있다.
예를 들어, 특정 시간에, 보코더 패킷들 (예컨대, 비-번들링된 RTP 패킷들) 이 수신될 때 그리고 부분 프레임들이 2 이하의 값과 같은 특정 오프셋 값 (예컨대, 부분 프레임들 및 대응하는 전체 프레임 사이의 패킷들의 수) 을 가질 때 버퍼 파라미터 (934) 는 허용가능 프레임 소거율을 가능하게 하도록 선택되는 디폴트 값과 같은 제 1 값을 가질 수도 있다. 프레임 소거율이 용인될 수 없다고, RTP 패킷들 (예컨대, 멀티-프레임 번들링된 패킷들) 이 수신되고 있다고, 부분 프레임들이 특정 오프셋 값보다 큰 오프셋 값을 갖는다고, 또는 그 조합이라고 버퍼 관리기 (910) 가 결정하면, 버퍼 관리기는 버퍼 파라미터 (934) 의 값을 제 2 값으로 업데이트 (예컨대, 증가) 하도록 구성될 수도 있다.
일부 구현예들에서, 버퍼 파라미터 (934) 는, 도 12를 참조하여 설명된 바와 같이, 대응하는 임계값을 충족시키는 표시자들 (913, 915, 917) 중 모든 세 개의 표시자들에 응답하여 업데이트될 수도 있다. 다른 구현예들에서, 버퍼 파라미터 (934) 는 대응하는 임계값을 충족시키는 세 개의 표시자들 (913, 915, 917) 중 두 개의 표시자들에 응답하여 업데이트될 수도 있다. 다른 구현들에서, 특정 표시자가 다수의 임계 값들과 비교될 수도 있다. 버퍼 파라미터 (934) 는 제 1 임계값 및 제 2 임계값 미만인 특정 표시자에 응답하여 제 1 값으로 업데이트될 수도 있다. 버퍼 파라미터 (934) 는 제 1 임계값 이상인 특정 표시자에 응답하여 또는 제 2 임계값 이상인 특정 표시자 및 조건을 충족시키는 다른 표시자에 응답하여 제 2 값으로 업데이트될 수도 있다. 다수의 임계값들을 사용하면 버퍼 관리기가 다른 표시자와 대응하는 임계값을 비교하는 일 없이 제 1 임계값 이상인 특정 표시자에 응답하여 버퍼 파라미터를 빠르게 업데이트하는 것을 허용할 수도 있다.
이력 데이터, 이를테면 번들 데이터 (931), 오프셋 데이터 (932), 소거 데이터 (933), 또는 그 조합을 추적함으로써, 목적지 디바이스 (902) 는 오디오 출력 (958) 품질을 저하시킬 수도 있는 증가된 소거율을 표시하는 (예컨대, 그러한 증가된 소거율로 이어질 수도 있는) 하나 이상의 상태들을 식별할 수도 있다. 하나 이상의 상태들을 식별하는 것에 응답하여, 목적지 디바이스 (902) 는 프레임 복원을 위한 부분 프레임들을 사용하게 위해 시간에 맞춰 부분 프레임들을 수신하는 추가적인 버퍼 용량을 제공하기 위해 버퍼 파라미터 (934) 를 동적으로 업데이트할 수도 있다. 예를 들어, 부분 프레임들이 수신된 패킷들의 스트림에 존재할 때, 목적지 디바이스 (902) 는 높은 소거율을 초래할 수도 있는 멀티-프레임 패킷 번들링의 사용과 같은 하나 이상의 상태들에 응답하여 최소 플레이아웃 지연을 증가시킬 수도 있다. 예를 들어, 업데이트된 버퍼 파라미터는 더 많은 부분 프레임들이 버퍼 (926) 에 포함되는 것을 가능하게 할 수도 있다. 따라서, 더 많은 부분 프레임들이 누락 프레임들 복원하기 위해 사용할 버퍼 (926) 에 이용 가능할 것이다. 버퍼 (926) 에서 이용 가능한 증가된 수의 부분 프레임들을 가짐으로써, 더 많은 누락 프레임들이 복원될 수도 있고 더 적은 소거들이 생성될 수도 있다. 더 많은 누락 프레임들을 복원하는 것과 소거들의 수를 감소시키는 것은 프레임 소거율을 감소시킬 수도 있고 오디오 출력 (958) 의 품질을 개선할 수도 있다. 덧붙여, 버퍼 파라미터 (934) 는 하나 이상의 상태들이 더 이상 존재하지 않을 때 원래의 값으로 재설정될 수도 있는데, 버퍼 파라미터 (934) 를 영구적으로 증가시키는 것이 소스 디바이스 (104) 와 목적지 디바이스 (902) 사이의 단 대 단 지연에 악영향을 줄 수도 있기 때문이다.
시스템 (900) 에 의해 제공되는 하나의 특정 장점은 하나 이상의 검출된 상태들에 대응하는 하나 이상의 표시자들에 기초하여 버퍼 (926) 의 버퍼 파라미터 (934) 가 동적으로 업데이트될 수도 있다는 것이다. 버퍼 파라미터 (934) 에서의 증가가 일시적일 수도 있기 때문에 업데이트된 파라미터는 소스 디바이스 (104) 와 목적지 디바이스 (902) 사이의 단 대 단 지연을 영구적으로 증가시키지 않을 수도 있다. 버퍼 파라미터 (934) 는 하나 이상의 검출된 상태들을 개선하는 것에 응답하여 제 1 (더 낮은) 값으로 다시 재설정될 수도 있다. 덧붙여, 업데이트된 파라미터는 증가된 품질 레벨을 갖는 오디오 출력이 생성되는 것을 가능하게 할 수도 있다.
도 10을 참조하면, 지터-제거 버퍼를 업데이트하는 방법의 특정 구체적인 구현예의 흐름도가 도시되고 전체가 1000으로 지정된다. 특정 구현예에서, 방법 (1000) 의 하나 이상의 동작들은 도 1의 목적지 디바이스 (102), 지터-제거 버퍼 (126), 분석기 (122), 도 9의 목적지 디바이스 (902), 버퍼 (926), 또는 버퍼 관리기 (910) 중 적어도 하나에 의해 실행될 수도 있다.
방법 (1000) 은 1002에서, 지터-제거 버퍼에서 패킷을 수신하는 단계를 포함한다. 예를 들어, 도 1의 지터-제거 버퍼 (126) 는, 도 1을 참조하여 설명된 바와 같이, 제 2 패킷 (134) 을 수신할 수도 있다. 제 2 패킷 (134) 은 도 1을 참조하여 설명된 바와 같이, 제 1 부분 데이터 (174) 와 제 2 프레임 데이터 (166) 를 포함할 수도 있다. 제 1 부분 데이터 (174) 는 입력 오디오 신호 (130) 에 대응하는 프레임들의 시퀀스 중 제 1 프레임 (184) 에 대응하는 제 1 프레임 데이터 (164) 의 부분 사본을 포함할 수도 있다. 제 2 프레임 데이터 (166) 는 프레임들의 시퀀스 중 제 2 프레임 (186) 에 대응할 수도 있다.
방법 (1000) 은 1004에서, 제 1 데이터에 연관되는 제 1 프레임 수신 타임스탬프를 생성하는 단계를 또한 포함한다. 예를 들어, 도 1의 분석기 (122) 는 도 1을 참조하여 설명된 바와 같이, 제 1 수신 타임스탬프 (140) 를 생성할 수도 있다. 도 1의 분석기 (122) 는 도 1을 참조하여 설명된 바와 같이, 지터-제거 버퍼 (126) 의 제 1 버퍼 엔트리 (114) 에 제 1 수신 타임스탬프 (140) 를 또한 저장할 수도 있다. 제 1 버퍼 엔트리 (114) 는 도 1을 참조하여 설명된 바와 같이, 제 1 프레임 (184) 에 대응할 수도 있다.
방법 (1000) 은 1006에서, 제 2 데이터에 연관되는 제 2 프레임 수신 타임스탬프를 생성하는 단계를 더 포함한다. 예를 들어, 도 1의 분석기 (122) 는 도 1을 참조하여 설명된 바와 같이, 제 2 수신 타임스탬프 (150) 를 생성할 수도 있다. 도 1의 분석기 (122) 는 도 1을 참조하여 설명된 바와 같이, 지터-제거 버퍼 (126) 의 제 2 버퍼 엔트리 (118) 에 제 2 수신 타임스탬프 (150) 를 또한 저장할 수도 있다. 제 2 버퍼 엔트리 (118) 는 제 2 프레임 (186) 에 대응할 수도 있다. 제 1 프레임 수신 타임스탬프 (140) 는 도 1을 참조하여 설명된 바와 같이, 제 2 수신 타임스탬프 (150) 에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시할 수도 있다.
일부 구현예들에서, 방법 (1000) 은 복수의 패킷들을 수신하는 단계를 포함할 수도 있다. 방법 (1000) 은 복수의 패킷들에 기초하여 프레임 소거율, 오프셋 값, 또는 프레임 번들링 값 중 적어도 하나를 결정하는 단계를 포함할 수도 있다. 방법 (1000) 은 제 1 임계값 이상인 프레임 소거율, 제 2 임계값 이상인 오프셋 값, 또는 제 3 임계값 이상인 프레임 번들링 값 중 적어도 하나에 응답하여 버퍼에 연관되는 파라미터를 업데이트하는 단계를 더 포함할 수도 있다.
일부 구현예들에서, 방법 (1000) 은 프레임 소거율이 제 1 임계값을 충족시킨다는, 오프셋 값이 제 2 임계값을 충족시킨다는, 그리고 프레임 번들링 값이 제 3 임계값을 충족시킨다는 결정에 응답하여 버퍼에 연관되는 파라미터를 업데이트하는 단계를 포함할 수도 있다. 프레임 번들링 값은 복수의 패킷들에 기초할 수도 있다. 파라미터를 업데이트하는 단계는 파라미터의 값을 제 1 값에서부터 제 2 값으로 변경하는 단계를 포함할 수도 있다. 방법 (1000) 은, 파라미터가 업데이트된 후, 제 1 임계값 미만인 프레임 소거율, 제 2 임계값 미만인 오프셋 값, 또는 제 3 임계값 미만인 프레임 번들링 값에 응답하여 파라미터의 값을 제 2 값에서부터 제 1 값으로 변경하는 단계를 또한 포함할 수도 있다.
방법 (1000) 은 제 2 수신 타임스탬프 (150) 에 기초하는 버퍼링 기간의 만료에 앞서 제 1 버퍼 엔트리 (114) 의 프로세싱을 가능하게 할 수도 있다. 제 1 수신 타임스탬프 (140) 를 생성하는 단계는 제 1 프레임 (184) 이 프로세싱될 다음 프레임일 때 제 2 패킷 (134) 에 연관되는 버퍼링 기간의 만료에 앞서 제 1 프레임 (184) 이 프로세싱되는 것을 가능하게 할 수도 있다.
도 11을 참조하면, 지터-제거 버퍼를 업데이트하는 방법의 특정 구체적인 구현예의 흐름도가 도시되고 전체가 1100으로 지정된다. 특정 구현예에서, 방법 (1100) 의 하나 이상의 동작들은 도 1의 목적지 디바이스 (102), 지터-제거 버퍼 (126), 분석기 (122), 도 9의 목적지 디바이스 (902), 버퍼 (926), 또는 버퍼 관리기 (910) 중 적어도 하나에 의해 실행될 수도 있다.
방법 (1100) 은 702에서, 지터-제거 버퍼에서 패킷을 수신하는 단계를 포함한다. 예를 들어, 도 1의 지터-제거 버퍼 (126) 는, 도 1을 참조하여 설명된 바와 같이, 제 2 패킷 (134) 을 수신할 수도 있다. 제 2 패킷 (134) 은 도 1을 참조하여 설명된 바와 같이, 입력 오디오 신호 (130) 의 프레임들의 시퀀스 중 제 1 프레임 (184) 에 대응하는 제 1 부분 데이터 (174) 를 포함할 수도 있다. 방법 (1100) 은 1104에서, 제 1 프레임에 대응하는 소거가 플레이되었음을 검출하는 단계를 또한 포함한다. 예를 들어, 도 1의 분석기 (122) 는 도 1을 참조하여 설명된 바와 같이, 제 1 프레임 (184) 에 대응하는 소거가 플레이되었음을 검출할 수도 있다.
방법 (1100) 은 1106에서, 지터-제거 버퍼의 제 1 버퍼 엔트리에 제 1 데이터를 저장하는 단계를 더 포함한다. 예를 들어, 도 1의 분석기 (122) 는 도 1을 참조하여 설명된 바와 같이, 지터-제거 버퍼의 제 1 버퍼 엔트리 (114) 에 제 1 부분 데이터 (174) 를 저장할 수도 있다.
방법 (1100) 은 프레임의 프레임 데이터 (예컨대, 전체 프레임 데이터 또는 부분적 데이터) 가 그 프레임에 대응하는 소거를 플레이하는 것에 후속하여 지터-제거 버퍼에 포함되는 것을 가능하게 할 수도 있다. 프레임에 대응하는 소거를 플레이하는 것에 후속하는 프레임의 프레임 데이터 (예컨대, 전체 프레임 데이터 또는 부분 데이터) 의 프로세싱은 지터-제거 버퍼의 버퍼 깊이를 암시적으로 증가시킴으로써 암시적 버퍼 적응을 가능하게 할 수도 있다.
도 12를 참조하면, 버퍼 파라미터를 조정하는 방법의 특정 구체적인 구현예의 흐름도가 개시되고 전체가 1200으로 지정된다. 버퍼 파라미터는 도 1의 플레이아웃 지연 (128) 또는 도 9의 버퍼 파라미터 (934) 을 포함하거나 또는 그러한 것에 대응할 수도 있다. 방법 (1200) 은 도 1의 소스 디바이스 (104), 목적지 디바이스 (102) (예컨대, 분석기 (122)), 또는 도 9의 목적지 디바이스 (902) (예컨대, 버퍼 관리기 (910)) 에 의해 수행될 수도 있다. 도 12는 번들 표시자, 오프셋 표시자, 및 소거 표시자의 조합에 응답하는 버퍼 파라미터의 조정을 예시한다.
방법 (1200) 은 1202에서, 번들 표시자가 번들 임계값 이상인지의 여부를 결정하는 단계를 포함한다. 번들 표시자는 도 9의 번들 데이터 (931), 번들 표시자 (913), 또는 그 조합을 포함하거나 또는 그러한 것에 대응할 수도 있다. 번들 임계값은 도 9의 번들 임계값 (937) 을 포함하거나 또는 그런 번들 임계값에 대응할 수도 있다. 번들 표시자가 번들 임계값 미만이라는 결정에 응답하여, 방법 (1200) 은 1208로 전진할 수도 있다. 1208에서, 버퍼 파라미터는 제 1 값으로 설정될 수도 있다. 일부 구현예들에서, 제 1 값은 예시적인, 비제한적 예로서, 40 ms의 값과 같은 디폴트 값을 포함하거나 또는 그러한 디폴트 값에 대응할 수도 있다. 버퍼 파라미터가 이미 제 1 값으로 설정되면, 버퍼 파라미터의 값은 변경하지 않을 수도 있다. 버퍼 파라미터를 제 1 값으로 설정한 후, 방법 (1200) 은 1202로 전진할 수도 있다. 번들 표시자가 번들 임계값 이상이라는 결정에 응답하여, 방법 (1200) 은 1204로 전진할 수도 있다.
방법 (1200) 은 1204에서, 오프셋 표시자가 오프셋 임계값 이상인지의 여부를 결정하는 단계를 포함한다. 오프셋 표시자는 도 1의 프레임 오프셋 (136), 도 9의 오프셋 데이터 (932), 오프셋 표시자 (915), 또는 그 조합을 포함하거나 또는 그러한 것에 대응할 수도 있다. 오프셋 임계값은 도 9의 오프셋 임계값 (938) 을 포함하거나 또는 그런 오프셋 임계값에 대응할 수도 있다. 오프셋 표시자가 오프셋 임계값 미만이라는 결정에 응답하여, 방법 (1200) 은 1208로 전진할 수도 있다. 오프셋 표시자가 오프셋 임계값 이상이라는 결정에 응답하여, 방법 (1200) 은 1206으로 전진한다.
방법 (1200) 은 1206에서, 소거 표시자가 소거 임계값 이상인지의 여부를 결정하는 단계를 포함한다. 소거 표시자는 도 9의 소거 데이터 (933), 소거 표시자 (917), 또는 그 조합을 포함하거나 또는 그러한 것에 대응할 수도 있다. 소거 임계값은 도 9의 소거 임계값 (939) 을 포함하거나 또는 그런 소거 임계값에 대응할 수도 있다. 소거 표시자가 소거 임계값 미만이라는 결정에 응답하여, 방법 (1200) 은 1208로 전진할 수도 있다. 소거 표시자가 소거 임계값 이상이라는 결정에 응답하여, 방법 (1200) 은 1210으로 전진할 수도 있다.
1210에서, 버퍼 파라미터는 제 2 값으로 설정될 수도 있다. 일부 구현예들에서, 제 2 값은 제 1 값보다 더 클 수도 있다. 버퍼 파라미터가 이미 제 2 값으로 설정되면, 버퍼 파라미터의 값은 변경되지 않을 수도 있다. 버퍼 파라미터를 제 2 값으로 설정한 후, 방법 (1200) 은 1202로 전진할 수도 있다. 따라서, 방법 (1200) 은 세 가지 조건들이 충족될 때 버퍼 파라미터를 제 2 값으로 설정하는 단계와 세 가지 미만의 조건들이 충족될 때 버퍼 파라미터를 제 1 값으로 설정하는 단계를 예시한다. 비록 도 12가 비교들이 수행되는 특정 순서를 예시하지만, 그 비교들은 다른 순서로 수행될 수도 있거나 또는 비교들 중 하나 이상의 비교들이 동시에 (예컨대, 동일한 시간에) 수행될 수도 있다.
대체 구현예에서, 버퍼 파라미터는 세 가지 조건들 중 두 개의 조건들이 충족됨에 응답하여 업데이트될 수도 있다. 그 조건들은 대응하는 임계값 이상인 번들 표시자, 오프셋 표시자, 및 소거 표시자를 포함할 수도 있다. 예를 들어, 버퍼 파라미터는 세 가지 조건들 중 두 가지 조건들이 충족될 때 제 2 값으로 설정되고 둘 이상의 조건들이 충족되지 않을 때 제 1 값으로 설정된다.
다른 대체 구현예에서, 다수의 임계값들이 표시자들을 위해 사용될 수도 있다. 예를 들어, 다수의 임계값들이 오프셋 표시자를 위해 사용될 수도 있다. 대체 구현예는 오프셋 표시자가 제 1 오프셋 임계값 이상인지의 여부를 결정하는 단계와 오프셋 표시자가 제 2 오프셋 임계값 이상인지의 여부를 결정하는 단계를 포함할 수도 있다. 오프셋 표시자가 제 1 오프셋 임계값 이상이라는 결정에 응답하여, 버퍼 파라미터는 제 2 값으로 설정될 수도 있다. 버퍼 파라미터가 이미 제 2 값으로 설정되면, 버퍼 파라미터의 값은 변경되지 않을 수도 있다. 오프셋 표시자가 제 1 오프셋 임계값 미만이라는 결정에 응답하여, 오프셋 표시자는 제 2 오프셋 임계값과 비교될 수도 있다.
오프셋 표시자가 제 2 오프셋 임계값 미만이라는 결정에 응답하여, 버퍼 파라미터는 제 1 값으로 설정될 수도 있다. 버퍼 파라미터가 이미 제 1 값으로 설정되면, 버퍼 파라미터의 값은 변경되지 않을 수도 있다. 오프셋 표시자가 제 2 오프셋 임계값 이상이라는 결정에 응답하여, 소거 표시자는 소거 임계값과 비교될 수도 있다.
소거 표시자가 소거 임계값 미만이라는 결정에 응답하여, 버퍼 파라미터는 제 1 값으로 설정될 수도 있다. 소거 표시자가 소거 임계값 이상이라는 결정에 응답하여, 버퍼 파라미터는 제 2 값으로 설정될 수도 있다. 따라서, 버퍼 파라미터는 세 가지 조건들 (예컨대, 오프셋 표시자가 제 1 오프셋 임계값 이상, 오프셋 표시자가 제 2 오프셋 임계값 이상, 그리고 소거 표시자가 소거 임계값 이상) 중 두 가지가 충족될 때 제 2 값으로 설정되고 둘 이상의 조건들이 충족되지 않을 때 제 1 값으로 설정된다.
방법 (1200) 은 파라미터의 동적 조정을 가능하게 한다. 예를 들어, 파라미터는 더 많은 부분 프레임들이 버퍼에 저장되는 것과 프레임 복원 동작들을 위해 이용 가능하게 되는 것을 가능하게 하도록 조정될 (예컨대, 증가될) 수도 있다. 더 많은 부분 프레임들이 버퍼에 저장되는 것을 가능하게 하면 프레임 소거율을 감소시킬 수도 있다.
도 10 내지 도 12의 방법은 필드-프로그램가능 게이트 어레이 (FPGA) 디바이스, 주문형 집적회로 (ASIC), 중앙 프로세싱 유닛 (CPU) 과 같은 프로세싱 유닛, 디지털 신호 프로세서 (DSP), 컨트롤러, 다른 하드웨어 디바이스, 펌웨어 디바이스, 또는, 그것들의 임의의 조합에 의해 구현될 수도 있다. 일 예로서, 도 10 내지 도 12의 방법들 중 하나 이상은, 개별적으로 또는 조합하여, 도 1 및 도 9를 참조하여 설명된 바와 같이, 명령들을 실행하는 프로세서에 의해 수행될 수도 있다.
도 13을 참조하면, 디바이스 (예컨대, 무선 통신 디바이스) 의 특정 구체적인 구현예의 블록도가 묘사되고 전체가 1300으로 지정된다. 다양한 구현예들에서, 디바이스 (1300) 는 도 13에서 예시된 것보다 더 많거나 또는 더 적은 컴포넌트들을 가질 수도 있다. 예시적인 구현예에서, 디바이스 (1300) 는 도 1의 목적지 디바이스 (102), 소스 디바이스 (104), 및 도 9의 목적지 디바이스 (902) 중 하나 이상에 대응할 수도 있다. 예시적인 구현예에서, 디바이스 (1300) 는 도 1 내지 도 12를 참조하여 설명된 시스템들 또는 방법들 중 하나 이상에 따라 동작할 수도 있다.
특정 구현예에서, 디바이스 (1300) 는 프로세서 (1306) (예컨대, 중앙 프로세싱 유닛 (CPU) 를 포함한다. 디바이스 (1300) 는 하나 이상의 추가적인 프로세서들 (1310) (예컨대, 하나 이상의 디지털 신호 프로세서들 (DSP들)) 을 포함할 수도 있다. 프로세서들 (1310) 은 스피치 및 음악 코더-디코더 (CODEC) (1308) 과 에코 제거기 (1312) 를 포함할 수도 있다. 스피치 및 음악 코덱 (1308) 은 보코더 인코더 (1336), 보코더 디코더 (1338), 또는 둘 다를 포함할 수도 있다.
디바이스 (1300) 는 도 1의 메모리 (176) 와 코덱 (1334) 을 포함할 수도 있다. 메모리 (176) 는 분석 데이터 (120) 를 포함할 수도 있다. 비록 도시되지 않았지만, 메모리 (176) 는 도 9의 이력 데이터 (예컨대, 931~933), 임계값들 (936), 및 버퍼 파라미터 (934) 을 또한 포함할 수도 있다. 디바이스 (1300) 는 트랜시버 (1350) 를 통해 안테나 (1342) 에 커플링된 무선 제어기 (1340) 를 포함할 수도 있다. 특정 구현예에서, 트랜시버 (1350) 는 도 1의 수신기 (124) 를 포함할 수도 있다.
디바이스 (1300) 는 디스플레이 제어기 (1326) 에 커플링된 디스플레이 (1328) 를 포함할 수도 있다. 도 1의 스피커 (142), 마이크로폰 (1346), 또는 둘 다는, CODEC (1334) 에 커플링될 수도 있다. CODEC (1334) 은 디지털-아날로그 변환기 (1302) 와 아날로그-디지털 변환 (1304) 를 포함할 수도 있다. 구체적인 구현예들에서, 마이크로폰 (1346) 은 도 1의 마이크로폰 (146) 에 대응할 수도 있다. 특정 구현예에서, CODEC (1334) 은 마이크로폰 (146) 으로부터 아날로그 신호들을 수신하며, 아날로그-디지털 변환기 (1304) 를 사용하여 아날로그 신호들을 디지털 신호들로 변환하고, 디지털 신호들을 스피치 및 음악 코덱 (1308) 으로 제공할 수도 있다. 스피치 및 음악 코덱 (1308) 은 디지털 신호들을 프로세싱할 수도 있다. 특정 구현예에서, 스피치 및 음악 코덱 (1308) 은 디지털 신호들을 CODEC (1334) 에 제공할 수도 있다. CODEC (1334) 은 디지털-아날로그 변환기 (1302) 를 사용하여 디지털 신호들을 아날로그 신호들로 변환할 수도 있고 아날로그 신호들을 스피커 (142) 에 제공할 수도 있다.
디바이스 (1300) 는 분석기 (122), 지터-제거 버퍼 (126), 스피치 디코더 (160), 또는 그 조합을 포함할 수도 있다. 분석기 (122), 지터-제거 버퍼 (126), 스피치 디코더 (160) 는 각각 도 9의 버퍼 관리기 (910), 버퍼 (926), 스피치 디코더 (956) 를 포함하거나 또는 각각 대응할 수도 있다. 특정 구현예에서, 분석기 (122), 스피치 디코더 (160), 또는 둘 다는, 프로세서 (1306), 프로세서들 (1310), 코덱 (1334), 스피치 및 음악 코덱 (1308), 또는 그 조합에 포함될 수도 있다. 특정 구현예에서, 분석기 (122), 스피치 디코더 (160), 또는 둘 다는, 보코더 인코더 (1336), 보코더 디코더 (1338), 또는 둘 다에 포함될 수도 있다.
분석기 (122), 지터-제거 버퍼 (126), 스피치 디코더 (160), 또는 그 조합은, 본 명세서에서 설명되는 지터-제거 버퍼 기법을 업데이트하는 하드웨어 구현예를 구현하는데 사용될 수도 있다. 대안적으로, 또는 추가적으로, 소프트웨어 구현예 (또는 조합된 소프트웨어/하드웨어 구현예) 가 구현될 수도 있다. 예를 들어, 메모리 (176) 는 디바이스 (1300) 의 프로세서들 (1310) 또는 다른 프로세싱 유닛 (예컨대, 프로세서 (1306), 코덱 (1334), 또는 둘 다) 에 의해 실행 가능한 명령들 (1356) 을 포함할 수도 있다. 명령들 (1356) 은 도 10 내지 도 12의 방법들 중 하나 이상을 수행하기 위해 프로세서 (1306) 및/또는 프로세서들 (1310) 에 의해 실행 가능한 하나 이상의 명령들을 포함할 수도 있다. 명령들 (1356) 은 분석기 (122), 스피치 디코더 (160), 또는 둘 다에 기인한 동작들을 구현하도록 실행 가능할 수도 있다.
특정 구현예에서, 디바이스 (1300) 는 시스템-인-패키지 또는 시스템-온-칩 디바이스 (1322) 에 포함될 수도 있다. 특정 구현예에서, 분석기 (122), 지터-제거 버퍼 (126), 스피치 디코더 (160), 메모리 (176), 프로세서 (1306), 프로세서 (1310), 디스플레이 제어기 (1326), CODEC (1334), 및 무선 제어기 (1340) 는 시스템-인-패키지 또는 시스템-온-칩 디바이스 (1322) 에 구비된다. 특정 구현예에서, 입력 디바이스 (1330) 와 전력 공급부 (1344) 가 시스템-온-칩 디바이스 (1322) 에 커플링된다. 더구나, 특정 실시형태에서, 도 13에 예시된 바와 같이, 디스플레이 (1328), 입력 디바이스 (1330), 스피커 (142), 마이크로폰 (1346), 안테나 (1342), 및 전력 공급부 (1344) 는 시스템-온-칩 디바이스 (1322) 외부에 있다. 특정 구현예에서, 디스플레이 (1328), 입력 디바이스 (1330), 스피커 (142), 마이크로폰 (1346), 안테나 (1342), 및 전력 공급부 (1344) 의 각각은 시스템-온-칩 디바이스 (1322) 의 컴포넌트, 이를테면 인터페이스 또는 제어기에 커플링될 수도 있다.
디바이스 (1300) 는 헤드셋, 모바일 통신 디바이스, 스마트 폰, 셀룰러 폰, 랩톱 컴퓨터, 컴퓨터, 태블릿, 개인 정보 단말기, 디스플레이 디바이스, 텔레비전, 게이밍 콘솔, 뮤직 플레이어, 라디오, 디지털 비디오 플레이어, 디지털 비디오 디스크 (DVD) 플레이어, 튜너, 카메라, 내비게이션 디바이스, 또는 그것들의 임의의 조합을 포함할 수도 있다.
구체적인 구현예에서, 프로세서들 (1310) 은 도 1 내지 도 12를 참조하여 설명된 방법들 또는 동작들의 전부 또는 부분을 수행하도록 동작 가능할 수도 있다. 구체적인 예로서, 프로세서들 (1310) 은 메모리 (176) 에 저장된 소프트웨어 (예컨대, 하나 이상의 명령들 (1356) 의 프로그램) 를 실행하도록 구성될 수도 있다. 예를 들어, 프로세서들 (1310) 은 도 10의 방법 (1000), 도 11의 방법 (1100), 도 12의 방법 (1200), 또는 그 조합에 따라 동작하도록 구성될 수도 있다. 예시하기 위해, 프로세서들 (1310) 은 프로세서들 (1310) 로 하여금 지터-제거 버퍼에서의 제 1 패킷을 프로세싱하는 동작들을 수행하게 하는 명령들 (1356) 을 실행하도록 구성될 수도 있으며, 제 1 패킷은 제 1 데이터와 제 2 데이터를 포함한다. 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함하고 프레임들의 시퀀스 중 제 2 프레임은 제 2 데이터에 대응한다. 프로세서는 제 1 데이터에 연관되는 제 1 프레임 수신 타임스탬프를 생성하는 동작과 제 2 데이터에 연관되는 제 2 프레임 수신 타임스탬프를 생성하는 동작을 또한 수행할 수도 있다. 제 1 프레임 수신 타임스탬프는 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시한다. 프로세서는 프로세싱된 스피치 신호를 생성하기 위해 제 1 데이터와 제 2 데이터를 프로세싱하는 동작들을 또한 수행할 수도 있다.
다른 구체적인 예로서, 마이크로폰 (1346) 은 사용자 스피치 신호에 대응하는 오디오 신호를 캡처할 수도 있다. ADC (1304) 는 캡처된 오디오 신호를 아날로그 파형에서부터 디지털 오디오 샘플들로 이루어진 디지털 신호로 변환할 수도 있다. 프로세서들 (1310) 은 디지털 오디오 샘플들을 프로세싱할 수도 있다. 이득 조정기가 디지털 오디오 샘플들을 조정할 수도 있다. 에코 제거기 (1312) 는 마이크로폰 (1346) 에 들어가는 스피커 (142) 의 출력에 의해 생성되었을 수도 있는 에코를 감소시킬 수도 있다.
보코더 인코더 (1336) 는 프로세싱된 스피치 신호에 대응하는 디지털 오디오 샘플들을 압축할 수도 있고 패킷들의 시퀀스 (예컨대, 디지털 오디오 샘플들의 압축된 비트들의 표현) 를 형성할 수도 있다. 패킷들의 시퀀스는 메모리 (176) 에 저장될 수도 있다. 그 시퀀스의 하나 이상의 패킷들은 그 시퀀스의 다른 패킷들의 부분 사본들을 포함할 수도 있다. 트랜시버 (1350) 는 시퀀스의 각각의 패킷의 어떤 형태를 변조할 수도 있고 (예컨대, 다른 정보가 패킷에 첨부될 수도 있고) 변조된 데이터를 안테나 (1342) 를 통해 송신할 수도 있다.
추가의 예로서, 안테나 (1342) 는 네트워크를 통해 다른 디바이스에 의해 전송된 패킷들의 시퀀스에 대응하는 들어오는 패킷들을 수신할 수도 있다. 수신된 패킷들은 사용자 스피치 신호의 프레임들의 시퀀스에 대응할 수도 있다.
분석기 (122) 는 들어오는 패킷들을 지터-제거 버퍼 (126) (예컨대, 지터-제거 버퍼) 에 저장할 수도 있다. 분석기 (122) 는 들어오는 패킷들 중 하나 이상의 패킷들의 다수의 사본들을 지터-제거 버퍼 (126) 에 저장할 수도 있다. 예를 들어, 분석기 (122) 는, 지터-제거 버퍼 (126) 에, 제 1 프레임에 대응하는 제 1 버퍼 엔트리에서의 패킷의 제 1 사본과 제 2 프레임에 대응하는 제 2 버퍼 엔트리에서의 패킷의 제 2 사본을 저장할 수도 있다. 패킷은 제 1 프레임의 프레임 데이터의 부분 사본을 포함할 수도 있고 제 2 프레임의 프레임 데이터의 전체 사본을 포함할 수도 있다. 다른 예에서, 지터-제거 버퍼는 제 1 데이터와 제 2 데이터를 포함하는 패킷을 수신하도록 구성될 수도 있다. 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함할 수도 있다. 제 2 데이터는 프레임들의 시퀀스에서의 제 2 프레임에 대응할 수도 있다. 분석기 (122) 는, 그 패킷을 수신하는 것에 응답하여, 제 1 데이터에 연관되는 제 1 프레임 수신 타임스탬프를 생성하고 제 2 데이터에 연관되는 제 2 프레임 수신 타임스탬프를 생성하도록 구성될 수도 있다. 분석기 (122) 는 제 2 프레임 수신 타임스탬프에 기초하여 그리고 제 1 프레임과 제 2 프레임 사이의 프레임 오프셋에 기초하여 제 1 프레임 수신 타임스탬프를 생성하도록 구성될 수도 있다. 예를 들어, 분석기 (122) 는 다음의 수학식에 기초하여 제 1 수신 타임스탬프를 결정할 수도 있으며: FRTS= PRTS - (FO* FPD) - 1 밀리초, 여기서 FRTS = 제 1 수신 타임스탬프, PRTS = 제 2 패킷의 수신 타임스탬프, FO = 프레임 오프셋, 그리고 FPD = 프레임 플레이아웃 지속기간이다. 분석기 (122) 는 제 1 버퍼 엔트리에 제 1 프레임 수신 타임스탬프를 저장하도록 구성될 수도 있고 제 2 버퍼 엔트리에 제 2 프레임 수신 타임스탬프를 저장하도록 구성될 수도 있다. 제 1 프레임 수신 타임스탬프는 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시할 수도 있다.
그 패킷은 제 2 프레임의 제 2 생성 타임스탬프를 또한 표시할 수도 있다. 분석기 (122) 는 프레임 오프셋 및 제 2 생성 타임스탬프에 기초하여 제 1 프레임의 제 1 생성 타임스탬프를 결정하도록 그리고 특정 프레임이 가장 최근에 프로세싱된 프레임인, 상기 특정 프레임의 생성 타임스탬프를 제 1 생성 타임스탬프가 초과한다고 결정하는 것에 응답하여 제 1 버퍼 엔트리에 제 1 프레임 수신 타임스탬프를 저장하도록 추가로 구성될 수도 있다. 예를 들어, 분석기 (122) 는 다음의 수학식에 기초하여 제 1 생성 타임스탬프를 결정할 수도 있다: 제 1 생성 타임스탬프 = (제 2 생성 타임스탬프 (158) - (프레임 오프셋 (136) * 프레임 당 샘플들의 수)).
분석기 (122) 는 플레이아웃 지연 및 제 1 프레임 수신 타임스탬프 또는 제 1 생성 타임스탬프에 기초하여 제 1 버퍼 엔트리를 프로세싱할 수도 있다. 분석기 (122) 는 제 1 프레임의 프레임 데이터의 부분 사본 또는 패킷의 제 1 사본을 보코더 디코더 (1338) 에 제공할 수도 있다. 보코더 디코더 (1338) 는 부분 사본을 압축을 풀 수도 있다.
비압축된 파형은 복원된 오디오 샘플들이라고 지칭될 수도 있다. 에코 제거기 (1312) 는 복원된 오디오 샘플들로부터 에코를 제거할 수도 있다. 스피치 디코더 (160) 는 복원된 오디오 샘플들에 기초하여 프로세싱된 스피치 신호를 생성할 수도 있다. 이득 조절기가 프로세싱된 스피치 신호를 증폭 또는 억제할 수도 있다. DAC (1102) 는 프로세싱된 스피치 신호를 디지털 신호에서부터 아날로그 파형으로 변환할 수도 있고 변환된 신호를 스피커 (142) 에 제공할 수도 있다.
분석기 (122) 는 프레임에 대응하는 소거가 플레이되었음을 검출하는 것과는 독립적으로 지터-제거 버퍼 (126) 에 프레임의 프레임 데이터를 저장할 수도 있다. 소거를 플레이하는 것에 후속하여 프레임을 프로세싱하는 것은 지터-제거 버퍼 (126) 의 깊이를 암시적 증가시킴으로써 암시적 버퍼 적응을 가능하게 할 수도 있다. 덧붙여, 분석기 (122) 는 번들 표시자, 오프셋 표시자, 소거 표시자, 또는 그 조합과, 하나 이상의 임계값들을 비교하는 것에 응답하여 버퍼 파라미터 (934) 를 조정할 수도 있다.
설명된 구현예들과 연계하여, 장치가 제 1 데이터와 제 2 데이터를 포함하는 패킷을 수신하는 수단을 포함할 수도 있다. 예를 들어, 패킷을 수신하는 수단은 도 1의 수신기 (124), 도 9의 수신기 (924), 트랜시버 (1350), 패킷을 수신하도록 구성되는 하나 이상의 다른 디바이스들, 회로들, 모듈들, 또는 명령들, 또는 그 조합을 포함할 수도 있다. 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함할 수도 있다. 제 2 데이터는 프레임들의 시퀀스 중 제 2 프레임에 대응할 수도 있다.
장치는, 패킷을 수신하는 것에 응답하여 제 1 데이터에 연관되는 제 1 프레임 수신 타임스탬프를 생성하는 수단과 패킷을 수신하는 것에 응답하여 제 2 데이터에 연관되는 제 2 프레임 수신 타임스탬프를 생성하는 수단을 포함하는 버퍼 관리를 수행하는 수단을 또한 포함할 수도 있다. 예를 들어, 버퍼 관리를 수행하는 수단, 제 1 프레임 수신 타임스탬프를 생성하는 수단, 및 제 2 프레임 수신 타임스탬프를 생성하는 수단은 분석기 (122), 버퍼 관리기 (910), 프로세서 (1306), 프로세서들 (1310), 코덱 (1334), 또는 그 조합을 포함할 수도 있다. 제 1 프레임 수신 타임스탬프는 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시할 수도 있다. 일부 구현예들에서, 버퍼 관리를 수행하는 수단은 지터-제거 버퍼의 제 1 버퍼 엔트리에 제 1 프레임 수신 타임스탬프를 저장하는 그리고 지터-제거 버퍼의 제 2 버퍼 엔트리에 제 2 프레임 수신 타임스탬프를 저장하는 기능을 추가로 수행할 수도 있다. 제 1 버퍼 엔트리는 제 1 프레임에 대응할 수도 있다. 제 2 버퍼 엔트리는 제 2 프레임에 대응할 수도 있다. 버퍼 관리를 수행하는 수단은 제 1 버퍼 엔트리를 프로세싱하는 그리고 제 2 버퍼 엔트리를 프로세싱하는 기능을 추가로 수행할 수도 있다. 구체적인 구현예에서, 버퍼 관리를 수행하는 수단은 대응하는 임계값을 충족시키는 하나 이상의 표시자들에 응답하여 버퍼 파라미터를 업데이트하도록 추가로 구성될 수도 있다. 그 장치는 제 1 프레임 데이터 및 제 2 프레임 데이터에 기초하여 프로세싱된 스피치 신호들을 생성하도록 구성되는 스피치를 디코딩하는 수단을 또한 포함할 수도 있다. 예를 들어, 스피치를 디코딩하는 수단은 도 1의 스피치 디코더 (160), 도 9의 스피치 디코더 (956), 도 13의 보코더 디코더 (1338), 또는 그 조합을 포함하거나 또는 그러한 것에 대응할 수도 있다. 예시적인 실시형태에서, 스피치를 디코딩하는 수단은 제 1 프레임 데이터를 압축을 푸는 그리고 비압축된 제 1 프레임 데이터에 기초하여 프로세싱된 스피치 신호를 생성하는 기능을 추가로 수행할 수도 있다.
개시된 양태들 중 하나 이상은 통신 디바이스, 고정 로케이션 데이터 유닛, 모바일 로케이션 데이터 유닛, 모바일 폰, 셀룰러 폰, 위성 폰, 컴퓨터, 태블릿, 휴대용 컴퓨터, 디스플레이 디바이스, 미디어 플레이어, 또는 데스크톱 컴퓨터를 포함할 수도 있는 시스템 또는 장치, 이를테면 디바이스 (1300) 에서 구현될 수도 있다.  대안적으로 또는 부가적으로, 디바이스 (1300) 는 셋톱 박스, 엔터테인먼트 유닛, 내비게이션 디바이스, 개인 정보 단말기 (PDA), 모니터, 컴퓨터 모니터, 텔레비전, 튜너, 라디오, 위성 라디오, 뮤직 플레이어, 디지털 뮤직 플레이어, 휴대용 뮤직 플레이어, 비디오 플레이어, 디지털 비디오 플레이어, 디지털 비디오 디스크 (DVD) 플레이어, 휴대용 디지털 비디오 플레이어, 위성, 차량, 프로세서를 포함하는 또는 데이터 또는 컴퓨터 명령들을 저장 또는 취출하는 임의의 다른 디바이스, 또는 그 조합을 포함할 수도 있다.  다른 예시적인 비제한적 예로서, 시스템 또는 장치는 원격 유닛들, 이를테면, 핸드헬드 개인 통신 시스템 (PCS) 유닛들, 글로벌 포지셔닝 시스템 (GPS) 가능 디바이스들과 같은 휴대용 데이터 유닛들, 미터 판독 장비와, 또는 프로세서를 포함하는 또는 데이터 또는 컴퓨터 명령들을 저장 또는 취출하는 임의의 다른 디바이스, 또는 그것들의 임의의 조합을 포함할 수도 있다.
비록 도 1 내지 도 13 중 하나 이상이 본 개시물의 교시들에 따른 시스템들, 장치들, 및/또는 방법들을 예시할 수도 있지만, 본 개시물은 이들 예시된 시스템들, 장치들, 및/또는 방법들로 제한되지 않는다.  본 명세서에서 예시되거나 또는 설명되는 바와 같은 도 1 내지 도 13 중 임의의 도면의 하나 이상의 기능들 또는 컴포넌트들은 도 1 내지 도 13의 다른 기능 또는 컴포넌트의 하나 이상의 다른 부분들과 조합될 수도 있다. 따라서, 본 명세서에서 설명되는 단일의 예가 제한으로서 해석되지 않아야 하고 개시물의 예들은 본 개시물의 교시들로부터 벗어남 없이 적절히 조합될 수도 있다.  일 예로서, 도 10 내지 도 12의 방법들 중 하나 이상은, 개별적으로 또는 조합하여, 도 13의 프로세서들 (1310) 에 의해 수행될 수도 있다.  예시하기 위해, 도 10 내지 도 12의 방법들 중 하나의 방법의 부분이 도 10 내지 도 12의 방법들 중 하나의 방법의 제 2 부분과 조합될 수도 있다. 덧붙여, 도 10 내지 도 12를 참조하여 설명된 하나 이상의 동작들은 옵션적일 수도 있으며, 적어도 부분적으로 동시에 수행될 수도 있으며, 그리고/또는 도시된 것 또는 설명된 것과는 상이한 순서로 수행될 수도 있다.
본 기술분야의 통상의 기술자들은 본 명세서에서 개시된 구현예들에 관련하여 설명되는 다양한 예시적인 논리 블록들, 구성들, 모듈들, 회로들, 및 알고리즘 단계들이 전자 하드웨어, 프로세서에 의해 실행되는 컴퓨터 소프트웨어, 또는 양쪽 모두의 조합들로서 구현될 수도 있다는 것을 추가로 이해할 것이다. 다양한 예시적인 컴포넌트들, 블록들, 구성들, 모듈들, 회로들, 및 단계들은 일반적으로 그것들의 기능의 측면에서 위에서 설명되었다. 이러한 기능이 하드웨어 또는 프로세서 실행가능 명령들로서 구현되는지는 전체 시스템에 부과되는 특정 애플리케이션 및 설계 제약들에 따라 달라진다. 통상의 기술자들은 설명된 기능을 각 특정 애플리케이션에 대하여 다양한 방식들로 구현할 수도 있지만, 이러한 구현 결정들은 본 개시물의 범위를 벗어나도록 야기하는 것으로서 해석되지 않는다.
본 명세서에서 개시된 구현예들에 관련하여 설명된 방법 또는 알고리즘의 단계들은 하드웨어로, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이들 두 가지의 조합으로 직접 실시될 수도 있다. 소프트웨어 모듈은 RAM (random-access memory), 플래시 메모리, ROM (read-only memory), 프로그래밍가능 ROM (PROM), 소거가능 프로그래밍가능 ROM (EPROM), 전기적 소거가능 프로그래밍가능 ROM (EEPROM), 레지스터들, 하드 디스크, 착탈식 디스크, CD-ROM (compact disc read-only memory), 또는 본 기술분야에서 알려진 임의의 다른 형태의 비일시적 저장 매체에 존재할 수도 있다. 예시적인 저장 매체가 프로세서에 커플링되어서 그 프로세서는 저장 매체로부터 정보를 판독할 수 있고 그 저장 매체에 정보를 기입할 수도 있다. 대체예에서, 저장 매체는 프로세서에 통합될 수도 있다. 프로세서와 저장 매체는 주문형 집적회로 (ASIC) 내에 존재할 수도 있다. ASIC은 컴퓨팅 디바이스 또는 사용자 단말 내에 존재할 수도 있다. 대체예에서, 프로세서와 저장 매체는 컴퓨팅 디바이스 또는 사용자 단말에 개별 컴포넌트들로서 존재할 수도 있다.
개시된 양태들의 이전의 설명은 본 기술분야의 통상의 기술자가 개시된 양들을 제작하고 사용하는 것을 가능하게 하기 위해 제공된다.  이들 양태들에 대한 다양한 변형예들은 본 기술분야의 통상의 기술자들에게 쉽사리 명확하게 될 것이고, 본 명세서에서 정의되는 원리들은 본 개시물의 범위로부터 벗어남 없이 다른 양태들에 적용될 수도 있다.  따라서, 본 개시물은 본 명세서에서 보인 양태들로 한정될 의도는 없으며 다음의 청구항들에 의해 정의된 바와 같은 원리들 및 신규한 특징들과 일치하는 가능한 가장 넓은 범위에 일치하는 것이다.

Claims (30)

  1. 디바이스로서,
    패킷을 수신하도록 구성되는 지터-제거 버퍼로서, 상기 패킷은 제 1 데이터와 제 2 데이터를 포함하며, 상기 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함하고, 상기 제 2 데이터는 상기 프레임들의 시퀀스 중 제 2 프레임에 대응하는, 상기 지터-제거 버퍼; 및
    상기 패킷을 수신하는 것에 응답하여,
    상기 제 2 데이터와 연관된 제 2 프레임 수신 타임스탬프를 생성하도록; 그리고
    상기 제 2 프레임 수신 타임스탬프에 기초하여 그리고 상기 제 1 프레임과 상기 제 2 프레임 사이의 프레임 오프셋에 기초하여 상기 제 1 데이터와 연관되는 제 1 프레임 수신 타임스탬프를 생성하도록 구성되는 분석기를 포함하고,
    상기 제 1 프레임 수신 타임스탬프는 상기 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시하는, 디바이스.
  2. 제 1 항에 있어서,
    상기 제 1 데이터 및 상기 제 1 프레임 수신 타임스탬프에 기초하여 제 1 출력을 생성하도록; 그리고
    상기 제 2 데이터 및 상기 제 2 프레임 수신 타임스탬프에 기초하여 제 2 출력을 생성하도록 구성되는 스피치 디코더를 더 포함하고,
    상기 제 2 프레임 수신 타임스탬프는 클록 출력에 기초하여 생성되는, 디바이스.
  3. 제 2 항에 있어서,
    상기 스피치 디코더는 또한,
    상기 제 2 데이터와 연관된 제 2 버퍼링 기간의 만료에 앞서 만료되는 제 1 버퍼링 기간의 만료 후에 상기 제 1 출력을 생성하도록; 그리고
    상기 제 2 버퍼링 기간의 만료 후에 상기 제 2 데이터에 기초하여 상기 제 2 출력을 생성하도록 구성되고,
    상기 제 1 버퍼링 기간의 만료는 상기 제 1 프레임 수신 타임스탬프에 기초하고, 상기 제 2 버퍼링 기간의 만료는 상기 제 2 프레임 수신 타임스탬프에 기초하는, 디바이스.
  4. 제 1 항에 있어서,
    상기 지터-제거 버퍼에서 하나 이상의 프레임들을 프로세싱하도록 구성된 스피치 디코더; 및
    상기 스피치 디코더에 의해 가장 최근에 프로세싱된 특정 프레임의 생성 타임스탬프를 저장하도록 구성되는 메모리를 더 포함하며,
    상기 분석기는 또한, 상기 제 1 프레임의 제 1 생성 타임스탬프를 결정하도록 구성되는, 디바이스.
  5. 제 4 항에 있어서,
    상기 패킷은 상기 제 2 프레임의 제 2 생성 타임스탬프를 표시하며, 상기 제 1 생성 타임스탬프는 프레임 오프셋 및 상기 제 2 생성 타임스탬프에 기초하여 결정되고, 상기 분석기는 또한, 상기 제 1 생성 타임스탬프가 상기 특정 프레임의 상기 생성 타임스탬프를 초과한다고 결정하는 것에 응답하여 제 1 버퍼 엔트리에 상기 제 1 프레임 수신 타임스탬프를 저장하도록 구성되는, 디바이스.
  6. 지터-제거 버퍼에서 패킷을 수신하는 단계로서, 상기 패킷은 제 1 데이터와 제 2 데이터를 포함하며, 상기 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함하고, 상기 제 2 데이터는 상기 프레임들의 시퀀스 중 제 2 프레임에 대응하는, 상기 패킷을 수신하는 단계; 및
    상기 패킷을 수신하는 단계에 응답하여:
    상기 제 2 데이터와 연관된 제 2 프레임 수신 타임스탬프를 생성하는 단계; 및
    상기 제 2 프레임 수신 타임스탬프에 기초하여 그리고 상기 제 1 프레임과 상기 제 2 프레임 사이의 프레임 오프셋에 기초하여 상기 제 1 데이터와 연관된 제 1 프레임 수신 타임스탬프를 생성하는 단계로서, 상기 제 1 프레임 수신 타임스탬프는 상기 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시하는, 상기 제 1 프레임 수신 타임스탬프를 생성하는 단계를 포함하는, 방법.
  7. 제 6 항에 있어서,
    상기 제 1 데이터 및 상기 제 1 프레임 수신 타임스탬프에 기초하여 제 1 출력을 생성하는 단계; 및
    상기 제 2 데이터 및 상기 제 2 프레임 수신 타임스탬프에 기초하여 제 2 출력을 생성하는 단계를 더 포함하고,
    상기 제 2 프레임 수신 타임스탬프는 클록 출력에 기초하여 생성되는, 방법.
  8. 제 7 항에 있어서,
    상기 제 1 출력은 상기 제 2 데이터와 연관된 제 2 버퍼링 기간의 만료에 앞서 만료되는 제 1 버퍼링 기간의 만료 후에 생성되며, 상기 제 1 버퍼링 기간의 만료는 상기 제 1 프레임 수신 타임스탬프에 기초하고, 상기 제 2 버퍼링 기간의 만료는 상기 제 2 프레임 수신 타임스탬프에 기초하고,
    상기 제 2 출력은 상기 제 2 버퍼링 기간의 만료 후에 생성되는, 방법.
  9. 제 6 항에 있어서,
    상기 지터-제거 버퍼에서의 상기 패킷을 이중-인큐잉하는 단계를 더 포함하며, 상기 패킷을 이중-인큐잉하는 단계는,
    상기 지터-제거 버퍼의 제 1 버퍼 엔트리에 상기 제 1 데이터 및 상기 제 1 프레임 수신 타임스탬프를 저장하는 단계로서, 상기 제 1 버퍼 엔트리는 상기 제 1 프레임에 대응하는, 상기 제 1 데이터 및 상기 제 1 프레임 수신 타임스탬프를 저장하는 단계, 및
    상기 지터-제거 버퍼의 제 2 버퍼 엔트리에 상기 제 2 데이터 및 상기 제 2 프레임 수신 타임스탬프를 저장하는 단계로서, 상기 제 2 버퍼 엔트리는 상기 제 2 프레임에 대응하는, 상기 제 2 데이터 및 상기 제 2 프레임 수신 타임스탬프를 저장하는 단계를 포함하는, 방법.
  10. 제 9 항에 있어서,
    상기 제 1 버퍼 엔트리에 상기 제 1 프레임 수신 타임스탬프를 저장하는 것은 상기 제 2 프레임에 대응하는 제 2 버퍼링 기간의 만료에 앞서 상기 제 1 프레임의 상기 부분 사본의 프로세싱을 가능하게 하는, 방법.
  11. 제 6 항에 있어서,
    상기 제 1 프레임이 상기 지터-제거 버퍼에 없다고 결정하는 것에 응답하여 무음 기간을 연장하는 단계로서, 상기 제 1 프레임은 상기 무음 기간에 후속하는 토크 스퍼트의 제 1 프레임이고, 상기 무음 기간은 오디오 입력 없음인 기간에 대응하는, 상기 무음 기간을 연장하는 단계; 및
    상기 무음 기간을 연장하는 단계에 후속하여 상기 제 1 프레임을 프로세싱하는 단계를 더 포함하는, 방법.
  12. 제 6 항에 있어서,
    상기 제 1 프레임 데이터가 상기 지터-제거 버퍼에 없다고 그리고 상기 패킷이 상기 제 1 프레임 데이터의 상기 부분 사본을 포함한다고 결정하는 것에 응답하여,
    제 1 메모리 로케이션에 상기 패킷의 제 1 사본을 저장하는 단계로서, 상기 지터-제거 버퍼의 제 1 버퍼 엔트리는 상기 제 1 메모리 로케이션을 표시하는, 상기 패킷의 제 1 사본을 저장하는 단계; 및
    제 2 메모리 로케이션에 상기 패킷의 제 2 사본을 저장하는 단계로서, 상기 지터-제거 버퍼의 제 2 버퍼 엔트리는 상기 제 2 메모리 로케이션을 표시하는, 상기 패킷의 제 2 사본을 저장하는 단계를 더 포함하는, 방법.
  13. 제 12 항에 있어서,
    상기 제 1 버퍼 엔트리가 프레임의 데이터의 부분 사본에 대응함을 표시하는 제 1 값으로 상기 제 1 버퍼 엔트리와 연관된 제 1 플래그를 설정하는 단계; 및
    상기 제 2 버퍼 엔트리가 프레임의 데이터의 전체 사본에 대응함을 표시하는 제 2 값으로 상기 제 2 버퍼 엔트리와 연관된 제 2 플래그를 설정하는 단계로서, 상기 제 2 데이터는 상기 제 2 프레임의 제 2 프레임 데이터의 전체 사본을 포함하는, 상기 제 2 플래그를 설정하는 단계를 더 포함하는, 방법.
  14. 제 6 항에 있어서,
    상기 제 1 프레임 수신 타임스탬프 및 특정 플레이아웃 지연에 기초하여 상기 제 1 프레임에 대응하는 제 1 버퍼링 기간을 결정하는 단계; 및
    상기 제 2 프레임 수신 타임스탬프 및 상기 특정 플레이아웃 지연에 기초하여 상기 제 2 프레임에 대응하는 제 2 버퍼링 기간을 결정하는 단계를 더 포함하며,
    상기 제 1 프레임의 제 1 플레이아웃 시간은 상기 제 2 프레임의 제 2 플레이아웃 시간보다 이른, 방법.
  15. 제 6 항에 있어서,
    상기 패킷을 수신하는 단계에 앞서 그리고 상기 제 1 프레임이 상기 지터-제거 버퍼에 없다고 결정하는 것에 응답하여,
    소거를 플레이하는 단계; 및
    버퍼 타임라인의 값을 업데이트하는 단계를 더 포함하는, 방법.
  16. 제 6 항에 있어서,
    지터-제거 버퍼의 제 1 버퍼 엔트리에 제 1 데이터를 저장하는 단계로서, 상기 제 1 버퍼 엔트리는 상기 제 1 프레임에 대응하는, 상기 제 1 데이터를 저장하는 단계;
    상기 제 1 프레임 데이터를 포함하는 제 2 패킷을 수신하는 단계; 및
    상기 제 1 데이터를 상기 제 1 프레임 데이터로 대체하기 위해 상기 지터-제거 버퍼의 상기 제 1 버퍼 엔트리를 업데이트하는 단계를 더 포함하는, 방법.
  17. 제 16 항에 있어서,
    상기 지터-제거 버퍼의 상기 제 1 버퍼 엔트리에 상기 제 1 프레임 수신 타임스탬프를 저장하는 단계;
    상기 제 2 패킷의 업데이트된 수신 타임스탬프를 결정하는 단계; 및
    상기 제 1 프레임 수신 타임스탬프를 상기 제 2 패킷의 상기 업데이트된 수신 타임스탬프로 대체하기 위해 상기 제 1 버퍼 엔트리를 업데이트하는 단계를 더 포함하는, 방법.
  18. 제 6 항에 있어서,
    복수의 패킷들을 수신하는 단계;
    상기 복수의 패킷들에 기초하여 프레임 소거율, 오프셋 값, 또는 프레임 번들링 값 중 적어도 하나를 결정하는 단계; 및
    제 1 임계값 이상인 상기 프레임 소거율, 제 2 임계값 이상인 상기 오프셋 값, 또는 제 3 임계값 이상인 상기 프레임 번들링 값 중 적어도 하나에 응답하여 버퍼와 연관된 파라미터를 업데이트하는 단계를 더 포함하는, 방법.
  19. 제 6 항에 있어서,
    복수의 패킷들을 수신하는 단계; 및
    프레임 소거율이 제 1 임계값을 충족하며, 오프셋 값이 제 2 임계값을 충족하고, 프레임 번들링 값이 제 3 임계값을 충족한다는 결정에 응답하여 버퍼와 연관된 파라미터를 업데이트하는 단계로서, 상기 프레임 번들링 값은 상기 복수의 패킷들에 기초하는, 상기 파라미터를 업데이트하는 단계를 더 포함하는, 방법.
  20. 제 19 항에 있어서,
    상기 파라미터를 업데이트하는 단계는 상기 파라미터의 값을 제 1 값으로부터 제 2 값으로 변경하는 단계를 포함하고,
    상기 방법은, 상기 파라미터가 업데이트된 후, 상기 제 1 임계값 미만인 상기 프레임 소거율, 상기 제 2 임계값 미만인 상기 오프셋 값, 또는 상기 제 3 임계값 미만인 상기 프레임 번들링 값에 응답하여 상기 파라미터의 상기 값을 상기 제 2 값으로부터 상기 제 1 값으로 변경하는 단계를 더 포함하는, 방법.
  21. 명령들을 저장하는 비일시적 컴퓨터 판독가능 저장 디바이스로서,
    상기 명령들은, 프로세서에 의해 실행될 때, 상기 프로세서로 하여금,
    지터-제거 버퍼에서 패킷을 프로세싱하는 동작으로서, 상기 패킷은 제 1 데이터와 제 2 데이터를 포함하며, 상기 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함하고, 상기 제 2 데이터는 상기 프레임들의 시퀀스 중 제 2 프레임에 대응하는, 상기 패킷을 프로세싱하는 동작; 및
    상기 패킷을 프로세싱하는 동작에 응답하여:
    상기 제 2 데이터와 연관된 제 2 프레임 수신 타임스탬프를 생성하는 동작; 및
    상기 제 2 프레임 수신 타임스탬프에 기초하여 그리고 상기 제 1 프레임과 상기 제 2 프레임 사이의 프레임 오프셋에 기초하여 상기 제 1 데이터와 연관된 제 1 프레임 수신 타임스탬프를 생성하는 동작으로서, 상기 제 1 프레임 수신 타임스탬프는 상기 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시하는, 상기 제 1 프레임 수신 타임스탬프를 생성하는 동작
    을 포함하는 동작들을 수행하게 하는, 비일시적 컴퓨터 판독가능 저장 디바이스.
  22. 제 21 항에 있어서,
    상기 제 1 프레임 수신 타임스탬프를 생성하는 동작은,
    지속기간을 획득하기 위해 프레임 플레이아웃 지속기간을 프레임 오프셋에 곱셈하는 동작; 및
    상기 제 2 프레임 수신 타임스탬프로부터 적어도 상기 지속기간을 감산하는 동작을 포함하는, 비일시적 컴퓨터 판독가능 저장 디바이스.
  23. 제 21 항에 있어서,
    상기 동작들은,
    상기 제 1 프레임의 제 1 생성 타임스탬프를 결정하는 동작; 및
    상기 제 1 생성 타임스탬프가 상기 프레임들의 시퀀스의 이전 프레임의 생성 타임스탬프를 초과한다고 결정하는 것에 응답하여 제 1 버퍼 엔트리에 상기 제 1 프레임 수신 타임스탬프를 저장하는 동작으로서, 상기 이전 프레임은 상기 프레임들의 시퀀스의 가장 최근에 프로세싱된 프레임인, 상기 저장하는 동작을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 디바이스.
  24. 제 23 항에 있어서,
    상기 동작들은,
    상기 이전 프레임의 상기 생성 타임스탬프를 초과하는 상기 제 1 프레임의 상기 제 1 생성 타임스탬프에 기초하여 상기 이전 프레임이 상기 프레임들의 시퀀스에서 상기 제 1 프레임보다 이르다고 결정하는 동작을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 디바이스.
  25. 제 23 항에 있어서,
    상기 제 1 생성 타임스탬프를 생성하는 동작은,
    제 1 값을 생성하기 위해 프레임 당 샘플들의 수를 상기 제 1 프레임과 상기 제 2 프레임 사이의 프레임 오프셋에 곱셈하는 동작; 및
    상기 제 2 프레임의 제 2 생성 타임스탬프로부터 상기 제 1 값을 감산하는 동작으로서, 상기 패킷은 상기 제 2 생성 타임스탬프의 표시를 포함하는, 상기 감산하는 동작을 포함하는, 비일시적 컴퓨터 판독가능 저장 디바이스.
  26. 제 21 항에 있어서,
    상기 패킷은 프레임 오프셋의 표시, 프레임 당 샘플들의 수, 또는 양자 모두를 포함하는, 비일시적 컴퓨터 판독가능 저장 디바이스.
  27. 제 21 항에 있어서,
    상기 동작들은 상기 제 1 프레임이 상기 지터-제거 버퍼에 없거나 버퍼 타임라인의 값과는 독립적이라고 결정하는 것에 응답하여 제 1 버퍼 엔트리에 상기 제 1 프레임 수신 타임스탬프를 저장하는 동작을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 디바이스.
  28. 제 21 항에 있어서,
    상기 동작들은,
    상기 제 1 데이터 및 상기 제 1 프레임 수신 타임스탬프에 기초하여 제 1 출력을 생성하는 동작; 및
    상기 제 2 데이터 및 상기 제 2 프레임 수신 타임스탬프에 기초하여 제 2 출력을 생성하는 동작을 더 포함하고,
    상기 제 2 프레임 수신 타임스탬프는 클록 출력에 기초하여 생성되는, 비일시적 컴퓨터 판독가능 저장 디바이스.
  29. 제 1 데이터와 제 2 데이터를 포함하는 패킷을 수신하는 수단으로서, 상기 제 1 데이터는 프레임들의 시퀀스 중 제 1 프레임에 대응하는 제 1 프레임 데이터의 부분 사본을 포함하고, 상기 제 2 데이터는 상기 프레임들의 시퀀스 중 제 2 프레임에 대응하는, 상기 패킷을 수신하는 수단; 및
    버퍼 관리를 수행하는 수단으로서,
    상기 패킷을 수신하는 것에 응답하여 상기 제 2 데이터와 연관된 제 2 프레임 수신 타임스탬프를 생성하는 수단; 및
    상기 제 2 프레임 수신 타임스탬프에 기초하여 그리고 상기 제 1 프레임과 상기 제 2 프레임 사이의 프레임 오프셋에 기초하여 상기 제 1 데이터와 연관된 제 1 프레임 수신 타임스탬프를 생성하는 수단으로서, 상기 제 1 프레임 수신 타임스탬프는 상기 제 2 프레임 수신 타임스탬프에 의해 표시된 제 2 시간보다 이른 제 1 시간을 표시하는, 상기 제 1 프레임 수신 타임스탬프를 생성하는 수단을 포함하는, 상기 버퍼 관리를 수행하는 수단을 포함하는, 장치.
  30. 제 29 항에 있어서,
    상기 수신하는 수단 및 상기 버퍼 관리를 수행하는 수단은 통신 디바이스, 컴퓨터, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 내비게이션 디바이스, 개인 정보 단말기 (PDA), 디코더, 또는 셋톱 박스 중 적어도 하나에 통합되는, 장치.
KR1020177029386A 2015-04-14 2016-03-10 지터-제거 버퍼 업데이트 KR101877699B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201562147386P 2015-04-14 2015-04-14
US201562147431P 2015-04-14 2015-04-14
US62/147,386 2015-04-14
US62/147,431 2015-04-14
US14/829,560 US9948578B2 (en) 2015-04-14 2015-08-18 De-jitter buffer update
US14/829,560 2015-08-18
PCT/US2016/021869 WO2016167904A1 (en) 2015-04-14 2016-03-10 De-jitter buffer update

Publications (2)

Publication Number Publication Date
KR20170137750A KR20170137750A (ko) 2017-12-13
KR101877699B1 true KR101877699B1 (ko) 2018-07-12

Family

ID=55587388

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177029386A KR101877699B1 (ko) 2015-04-14 2016-03-10 지터-제거 버퍼 업데이트

Country Status (6)

Country Link
US (1) US9948578B2 (ko)
EP (1) EP3284088A1 (ko)
JP (1) JP6442079B2 (ko)
KR (1) KR101877699B1 (ko)
CN (1) CN107534589B (ko)
WO (1) WO2016167904A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10148391B2 (en) * 2015-10-01 2018-12-04 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for removing jitter in audio data transmission
US10582258B2 (en) * 2015-12-26 2020-03-03 Intel Corporation Method and system of rendering late or early audio-video frames
US9967306B1 (en) * 2016-09-08 2018-05-08 Sprint Spectrum L.P. Prioritized transmission of redundancy data for packetized voice communication
WO2018091736A1 (de) * 2016-11-21 2018-05-24 Hirschmann Automation And Control Gmbh Messverfahren zur bedarfsgerechten bestimmung von durchlaufzeiten in einem datennetzwerk
US10616123B2 (en) * 2017-07-07 2020-04-07 Qualcomm Incorporated Apparatus and method for adaptive de-jitter buffer
KR102391799B1 (ko) * 2017-10-19 2022-04-29 삼성전자주식회사 유니캐스트 기반 멀티미디어 서비스 방법 및 장치
CN107948735B (zh) * 2017-12-06 2020-09-25 北京乐我无限科技有限责任公司 一种视频播放方法、装置及电子设备
US10951390B2 (en) * 2018-02-05 2021-03-16 Arris Enterprises Llc Two-stage IP de-jitter algorithm in a multiplexer for a group of statistically multiplexed single program transport streams
CN108933786B (zh) * 2018-07-03 2021-04-09 公安部第一研究所 用于改善无线数字通信系统接收方密文语音质量的方法
CN110098977B (zh) * 2019-04-12 2020-11-06 中国科学院声学研究所 网络数据包按序存储方法、计算机设备和存储介质
US11522816B2 (en) 2019-09-25 2022-12-06 MIXHalo Corp. Multi-stride packet payload mapping for robust transmission of data
WO2022049497A1 (en) * 2020-09-03 2022-03-10 Marvell Asia Pte Ltd Safety extension for precision time protocol (ptp)
US11889128B2 (en) * 2021-01-05 2024-01-30 Qualcomm Incorporated Call audio playback speed adjustment

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080101398A1 (en) * 2006-10-31 2008-05-01 Nokia Corporation Transmission scheme dependent control of a frame buffer
US20090129375A1 (en) * 2007-08-22 2009-05-21 Mohanty Bibhu P Method and Apparatus for Transmission of Circuit Switched Voice Over Packet Switched Networks
US20100312552A1 (en) * 2009-06-04 2010-12-09 Qualcomm Incorporated Systems and methods for preventing the loss of information within a speech frame

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6862298B1 (en) 2000-07-28 2005-03-01 Crystalvoice Communications, Inc. Adaptive jitter buffer for internet telephony
JP2003134076A (ja) * 2001-10-19 2003-05-09 Fujitsu Ltd スタッフ同期方式における受信装置
US7424026B2 (en) 2004-04-28 2008-09-09 Nokia Corporation Method and apparatus providing continuous adaptive control of voice packet buffer at receiver terminal
US7590047B2 (en) 2005-02-14 2009-09-15 Texas Instruments Incorporated Memory optimization packet loss concealment in a voice over packet network
KR100789902B1 (ko) * 2005-12-09 2008-01-02 한국전자통신연구원 다중 프레임을 갖는 브이오아이피 패킷 처리 장치 및 그방법
US7570670B2 (en) * 2006-05-19 2009-08-04 Alcatel-Lucent Usa Inc. Method and system for communicating and processing VOIP packets using a jitter buffer
US8031743B2 (en) * 2006-10-31 2011-10-04 Panasonic Corporation Apparatuses and method for multiplexing elementary streams based on a multiplexing pattern indicating an order of types of data to be multiplexed
US20080101355A1 (en) * 2006-10-31 2008-05-01 Nokia Corporation Transmission scheme dependent control of a frame buffer
US8111720B2 (en) 2007-01-09 2012-02-07 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus to indicate maximum scheduling delay for jitter buffer implementations
CN101426228B (zh) * 2008-11-28 2012-01-04 上海华为技术有限公司 语音包的发送方法、装置和系统
JP5229042B2 (ja) * 2009-03-25 2013-07-03 沖電気工業株式会社 ジッタバッファ制御装置、方法及びプログラム、並びに情報処理装置
US8094556B2 (en) * 2009-04-27 2012-01-10 Avaya Inc. Dynamic buffering and synchronization of related media streams in packet networks
EP2302845B1 (en) * 2009-09-23 2012-06-20 Google, Inc. Method and device for determining a jitter buffer level
CN102130764A (zh) * 2010-12-01 2011-07-20 华为技术有限公司 时间同步信息传送方法、系统和装置
CN102761468B (zh) * 2011-04-26 2015-04-08 中兴通讯股份有限公司 一种自适应调整语音抖动缓存区的方法及系统
US9047863B2 (en) * 2012-01-12 2015-06-02 Qualcomm Incorporated Systems, methods, apparatus, and computer-readable media for criticality threshold control
US9275644B2 (en) * 2012-01-20 2016-03-01 Qualcomm Incorporated Devices for redundant frame coding and decoding
CN103873382A (zh) * 2012-12-17 2014-06-18 马维尔国际有限公司 数据帧缓冲方法和设备
US20140185610A1 (en) 2013-01-03 2014-07-03 Qualcomm Incorporated Selectively patching erasures in circiut-switched calls whose frame erasure rate rises above a threshold by establishing and synchronizing a voip stream
EP3321935B1 (en) * 2013-06-21 2019-05-29 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Time scaler, audio decoder, method and a computer program using a quality control
SG11201510459YA (en) * 2013-06-21 2016-01-28 Fraunhofer Ges Forschung Jitter buffer control, audio decoder, method and computer program
US10614816B2 (en) * 2013-10-11 2020-04-07 Qualcomm Incorporated Systems and methods of communicating redundant frame information
US9680507B2 (en) * 2014-07-22 2017-06-13 Qualcomm Incorporated Offset selection for error correction data

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080101398A1 (en) * 2006-10-31 2008-05-01 Nokia Corporation Transmission scheme dependent control of a frame buffer
US20090129375A1 (en) * 2007-08-22 2009-05-21 Mohanty Bibhu P Method and Apparatus for Transmission of Circuit Switched Voice Over Packet Switched Networks
US20100312552A1 (en) * 2009-06-04 2010-12-09 Qualcomm Incorporated Systems and methods for preventing the loss of information within a speech frame

Also Published As

Publication number Publication date
KR20170137750A (ko) 2017-12-13
US9948578B2 (en) 2018-04-17
US20160308791A1 (en) 2016-10-20
WO2016167904A1 (en) 2016-10-20
CN107534589B (zh) 2021-02-05
JP2018514804A (ja) 2018-06-07
EP3284088A1 (en) 2018-02-21
CN107534589A (zh) 2018-01-02
JP6442079B2 (ja) 2018-12-19

Similar Documents

Publication Publication Date Title
KR101877699B1 (ko) 지터-제거 버퍼 업데이트
US7450601B2 (en) Method and communication apparatus for controlling a jitter buffer
ES2836220T3 (es) Sistema y procedimiento de recuperación de errores de transmisión de paquetes basada en redundancia
EP2936770B1 (en) Apparatus and methods for controlling jitter buffer
US7499472B2 (en) Jitter buffer management
US8279884B1 (en) Integrated adaptive jitter buffer
JP2017528958A5 (ko)
JP2018514804A5 (ko)
JP2006135974A (ja) 適応的バッファ遅延を有する音声受信機
US11064228B2 (en) Audio playback timing adjustment
JP2008541627A (ja) 順方向エラー訂正コードをデコードするためのシステム及び方法
JP2007295578A (ja) 音声データのフレームを含む音声ストリームを通す複数の通信モジュールを含む通信システムのための方法
RU2596808C2 (ru) Сглаживание дрожания в сети с уменьшенной задержкой
US7240013B2 (en) Method and apparatus for controlling buffering of audio stream
US7366193B2 (en) System and method for compensating packet delay variations
US8605599B2 (en) Method and apparatus for processing asynchronous audio stream
CN107770124A (zh) 一种ip语音缓冲区的动态控制方法及装置
JP5330183B2 (ja) パケット挿入削除方法及び通話システム
EP3343851B1 (en) Method and device for regulating playing delay
JP4983054B2 (ja) サーバ装置及び同装置におけるバッファ制御方法
JP5806719B2 (ja) 音声パケット再生装置とその方法とプログラム
US9118743B2 (en) Media rendering control
WO2009078535A1 (en) Apparatus and method for generating fixed delay of variable-bandwidth multicodec

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right