Re: [PATCH] Bug in sending heart-beat / silence frame / jitterbuffer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is variant 2 to fix that issue by directly calling
pjmedia_port_get_frame in stream.c after packet was sent via RTP to
ensure that there are "snychronous" calls of put- and get-frame.

---
 pjmedia/src/pjmedia/stream.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c
index adcaa628..1f2d0457 100644
--- a/pjmedia/src/pjmedia/stream.c
+++ b/pjmedia/src/pjmedia/stream.c
@@ -240,6 +240,12 @@ static const char digitmap[17] = { '0', '1', '2', '3',
 /* Zero audio frame samples */
 static pj_int16_t zero_frame[2 * 30 * 16000 / 1000];
 
+/* null buffer to hold result of get_frame after transmit of NULL frame.
+ * Make it big enough to hold any kind of media port size connected to conf
+ * bridge, e.g. up to 30ms ptime and 16kHz samplerate
+ */
+static pj_int16_t null_buffer[2 * 30 * 16000 / 1000];
+
 /*
  * Print error.
  */
@@ -1318,6 +1324,14 @@ static pj_status_t put_frame_imp( pjmedia_port *port,
                      (const void**)&rtphdr,
                      &rtphdrlen);
 
+    /* directly call get_frame of stream to avoid filling of JB during
+     * silence period */
+        pjmedia_frame null_frame;
+        pj_bzero(&null_frame, sizeof(null_frame));
+        null_frame.buf = null_buffer;
+        null_frame.type = PJMEDIA_FRAME_TYPE_AUDIO;
+        null_frame.size = stream->enc_samples_per_pkt * 2;
+        pjmedia_port_get_frame(&stream->port, &null_frame);
 
     /* Encode audio frame */
     } else if ((frame->type == PJMEDIA_FRAME_TYPE_AUDIO &&
-- 
2.13.7



_______________________________________________
Visit our blog: http://blog.pjsip.org

pjsip mailing list
pjsip@xxxxxxxxxxxxxxx
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org




[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux