Lost microphone, some news
Joakim Tjernlund
Joakim.Tjernlund at infinera.com
Tue Jun 26 11:39:48 EDT 2018
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, ×tamp);
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
More information about the Support
mailing list