Lost microphone, some news

David Balažic David.Balazic at comtrade.com
Mon Jul 2 05:55:33 EDT 2018


Just an info point: This happens often to me in Window susing MS Skype for Business (also with USB headset: Logitech).
Suddenly noone in the conference can hear me. The workaround is to leave the conference and rejoin.

As the simptoms are similar, this might help... or not.

David Balažic
Lead Engineer
www.comtrade.com

> -----Original Message-----
> From: Support [mailto:support-bounces at pidgin.im] On Behalf Of Joakim Tjernlund
> Sent: 26. June 2018 17:40
> To: support at pidgin.im
> Subject: Lost microphone, some news [dkim]
> 
> I loose my microphone(USB headset) on and off. Fairly easy to trigger doing SIPE Test Calls I have debugged it with GST_DEBUG=3 to:
> 0:01:44.674183639  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:686:validate_buffer:<srtpdec_1> No SSRC found in buffer
> 0:01:44.674222435  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:1254:gst_srtp_dec_chain:<srtpdec_1> Invalid buffer,
> dropping
> 0:01:44.723644690  9191 0x7f7750005370 WARN                 srtpdec gstsrtpdec.c:686:validate_buffer:<srtpdec_1> No SSRC found in buffer
> 0:01:44.723684456  9191 0x7f7750005370 WARN                 srtpdec gstsrtpdec.c:1254:gst_srtp_dec_chain:<srtpdec_1> Invalid buffer,
> dropping
> 0:01:44.773257417  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:686:validate_buffer:<srtpdec_1> No SSRC found in buffer
> 0:01:44.773299667  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:1254:gst_srtp_dec_chain:<srtpdec_1> Invalid buffer,
> dropping
> 0:01:44.773345513  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:686:validate_buffer:<srtpdec_1> No SSRC found in buffer
> 0:01:44.773362553  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:1254:gst_srtp_dec_chain:<srtpdec_1> Invalid buffer,
> dropping
> 0:01:44.773552549  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:686:validate_buffer:<srtpdec_1> No SSRC found in buffer
> 0:01:44.773577829  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:1254:gst_srtp_dec_chain:<srtpdec_1> Invalid buffer,
> dropping
> 0:01:44.824544605  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:686:validate_buffer:<srtpdec_1> No SSRC found in buffer
> 0:01:44.824593763  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:1254:gst_srtp_dec_chain:<srtpdec_1> Invalid buffer,
> dropping
> 0:01:44.984509825  9191 0x7f7750005370 WARN                 srtpdec gstsrtpdec.c:686:validate_buffer:<srtpdec_1> No SSRC found in buffer
> 0:01:44.984555736  9191 0x7f7750005370 WARN                 srtpdec gstsrtpdec.c:1254:gst_srtp_dec_chain:<srtpdec_1> Invalid buffer,
> dropping
> 0:01:45.038746276  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:686:validate_buffer:<srtpdec_1> No SSRC found in buffer
> 0:01:45.038816916  9191 0x55f2eff3f0f0 WARN                 srtpdec gstsrtpdec.c:1254:gst_srtp_dec_chain:<srtpdec_1> Invalid buffer,
> dropping
> 0:01:45.214407207  9191 0x55f2f0c30400 FIXME               basesink gstbasesink.c:3144:gst_base_sink_default_event:<autoaudiosink2-
> actual-sink-pulse> stream-start event without group-id. Consider implementing group-id handling in the upstream elements
> 0:01:45.297601562  9191 0x7f7784025a40 WARN                   pulse pulsesink.c:702:gst_pulsering_stream_underflow_cb:<autoaudiosink2-
> actual-sink-pulse> Got underflow
> 0:01:53.676467518  9191 0x7f7784025a40 WARN                   pulse pulsesink.c:702:gst_pulsering_stream_underflow_cb:<autoaudiosink2-
> actual-sink-pulse> Got underflow
> 0:02:10.626495331  9191 0x7f7784025a40 WARN                   pulse pulsesink.c:702:gst_pulsering_stream_underflow_cb:<autoaudiosink2-
> actual-sink-pulse> Got underflow
> 0:02:11.988072210  9191 0x7f7784025a40 WARN                   pulse pulsesink.c:702:gst_pulsering_stream_underflow_cb:<autoaudiosink2-
> actual-sink-pulse> Got underflow
> 0:02:15.532355085  9191 0x7f7750004b70 WARN                   pulse pulsesrc.c:1141:gst_pulsesrc_read:<autoaudiosrc3-actual-src-puls> error:
> pa_pause2: OK
> 0:02:15.532500956  9191 0x7f7750004b70 WARN                   pulse pulsesrc.c:1204:gst_pulsesrc_read:<autoaudiosrc3-actual-src-puls> error:
> pa_unlock_and_fail: OK
> 0:02:15.532584089  9191 0x7f7750004b70 WARN                audiosrc gstaudiosrc.c:221:audioringbuffer_thread_func:<autoaudiosrc3-actual-
> src-puls> error reading data -1 (reason: Resource temporarily unavailable), skipping segment
> 
> Here I loose my microphone and further(with some extra debug in gstreamer, pulsesrc.c:
> gst_pulsesrc_read()
> ....
> while (length > 0) {
>     size_t l;
> 
>     GST_LOG_OBJECT (pulsesrc, "reading %u bytes", length);
> 
>     /*check if we have a leftover buffer */
>     if (!pulsesrc->read_buffer) {
>       for (;;) {
>           if (gst_pulsesrc_is_dead (pulsesrc, TRUE)) {
>               GST_ELEMENT_ERROR (pulsesrc, RESOURCE, FAILED,
>                                  ("pa_dead: %s",
>                                   pa_strerror (pa_context_errno (pulsesrc->context))), (NULL));
>               goto unlock_and_fail;
>           }
> 
>         /* read all available data, we keep a pointer to the data and the length
>          * and take from it what we need. */
>         if (pa_stream_peek (pulsesrc->stream, &pulsesrc->read_buffer,
>                 &pulsesrc->read_buffer_length) < 0)
>           goto peek_failed;
> 
>         GST_LOG_OBJECT (pulsesrc, "have data of %" G_GSIZE_FORMAT " bytes",
>             pulsesrc->read_buffer_length);
> 
>         /* if we have data, process if */
>         if (pulsesrc->read_buffer && pulsesrc->read_buffer_length)
>           break;
> 
>         /* now wait for more data to become available */
>         GST_LOG_OBJECT (pulsesrc, "waiting for data");
>         pa_threaded_mainloop_wait (pulsesrc->mainloop);
> 
>         if (pulsesrc->paused) {
>             GST_ELEMENT_ERROR (pulsesrc, RESOURCE, FAILED,
>                                ("pa_pause2: %s",
>                                 pa_strerror (pa_context_errno (pulsesrc->context))), (NULL));
>             goto was_paused;
>         }
>       }
>     }
> 
> .....
> unlock_and_fail:
>   {
>     GST_ELEMENT_ERROR (pulsesrc, RESOURCE, FAILED,
>         ("pa_unlock_and_fail: %s",
>             pa_strerror (pa_context_errno (pulsesrc->context))), (NULL));
>     pulsesrc->in_read = FALSE;
>     pa_threaded_mainloop_unlock (pulsesrc->mainloop);
> 
>     return (guint) - 1;
>   }
> }
> 
> Here one can se that whenever pause happens, I loose audio.
> I don't know where to go next, this is audioringbuffer_thread_func() in gstaudiosrc.c:
> ....
> do {
>         read = readfunc (src, readptr, left, &timestamp);
>         GST_LOG_OBJECT (src, "transfered %d bytes of %d to segment %d", read,
>             left, readseg);
>         if (read < 0 || read > left) {
>           GST_WARNING_OBJECT (src,
>               "error reading data %d (reason: %s), skipping segment", read,
>               g_strerror (errno));
>           break;
>         }
>         left -= read;
>         readptr += read;
> } while (left > 0);
> 
>       /* Update timestamp on buffer if required */
>       gst_audio_ring_buffer_set_timestamp (buf, readseg, timestamp);
> 
>       /* we read one segment */
>       gst_audio_ring_buffer_advance (buf, 1); ....
> No idea if pause should be handle here or maybe somewhere in pidgin,pidgin-sipe ?
> 
>  Jocke
> _______________________________________________
> Support at pidgin.im mailing list
> Want to unsubscribe?  Use this link:
> https://pidgin.im/cgi-bin/mailman/listinfo/support



More information about the Support mailing list