Ticket #461 (assigned enhancement)

Opened 11 years ago

Last modified 11 years ago

New Jitter Buffer Development

Reported by: nanang Owned by: nanang
Priority: normal Milestone: Known-Issues-and-Ideas
Component: pjmedia Version: users_nanang
Keywords: Cc:
Backport to 1.x milestone: Backported:

Description

Main objectives are aiming optimum latency, drift handling, less noise, and good samples manipulation (insertion/deletion).

New jitter buffer works around playout buffering, packet reordering, decoder/PLC control, burst/jitter level calculation, drift calculation, samples insertion and deletion algorithms for drift compensation.

Related issues:

  • DTX (silence frames and stop receiving/sending).
  • White/grey noise generator.
  • Codec switching on the fly (simultaneous codec).
  • Jitter buffer re-usability for video.

Change History

comment:1 Changed 11 years ago by nanang

In r1770: Added the new jitter buffer, initial source.

comment:2 Changed 11 years ago by nanang

In r1771: Added test for new jitter buffer (JB2). The test will read text file that contains sequence of characters that simulate JB2 operations (PUT & GET). This test is useful to analyze JB2 behaviour on jitter, DTX, drift, and packet lost.

comment:3 Changed 11 years ago by nanang

In r1772: Added another test for JB2, which the objective is to measure the quality of drift compensation. The test will read wav file (raw PCM) and supply frames to JB2 at rate controlled by pjmedia_clock so drift can be simulated via clock setting. The sound device will regularly get the frames from JB2 at its own clock.

comment:4 Changed 11 years ago by nanang

In r1773: Fixed bug in find_matched_window(), the ref pointer is not correctly set.

comment:5 Changed 11 years ago by nanang

  • Status changed from new to assigned

In r1775:

  • added JB phases(idle, learning, running)
  • changed jb_vbuf_shrink_to() to jb_vbuf_shrink(), the size param specifies the shrink size
  • added jb_vbuf_expand
  • modified insert_samples(), automatically insert new frames needed to jb

comment:6 Changed 11 years ago by nanang

In r1776:

  • added feature resample, to test the effect of drift compensation on resampling
  • removed 'frame' options (specifies number of samples per frame)
  • changed options 'file' (specifies inputfile) to argument

comment:7 Changed 11 years ago by nanang

In r1778:

  • added param userdata to JB callbacks
  • added a bit optimization on pjmedia_jb2_get_frame(): shifting pointer instead of shifting frame buffer(memmove) when only parts of PCM frame needed
  • modified DTX handling mechanism: detects jumping timestamp but good sequence to generate noise/silence frames, instead of relying on abnormal drift.
  • modified behaviour on failure of allocating frame
  • moved abnormal drift detection from compensate_drift() to update_state()
  • added/removed some log for debugging purpose

comment:8 Changed 11 years ago by nanang

In r1779: Initial integration of the new jitter buffer into stream

comment:9 Changed 11 years ago by bennylp

  • Milestone changed from release-0.9.0 to unassigned
Note: See TracTickets for help on using tickets.