Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • gst-plugins-bad gst-plugins-bad
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 973
    • Issues 973
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 103
    • Merge requests 103
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GStreamerGStreamer
  • gst-plugins-badgst-plugins-bad
  • Issues
  • #1539
Closed
Open
Issue created Mar 04, 2021 by Aaron Clauson@sipsorcery

webrtcbin: dtls close not firing connection-state signal

I'm doing some testing with a webrtcbin pipeline and have encountered an issue where the connection-state signal does not get fired when the underlying DTLS connection is closed. Possibly related to #758 (closed). I am using a single sendonly VP8 video stream from webrtcbin to Chrome.

"webrtcbin bundle-policy=max-bundle name=sendonly "
       "videotestsrc is-live=true pattern=ball ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay ! "
       "queue ! application/x-rtp,media=video,encoding-name=VP8,payload=96 ! sendonly. "

The code I use to hook up the signals is:

  g_signal_connect (webrtcbin, "on-negotiation-needed", G_CALLBACK (on_negotiation_needed), NULL);
  g_signal_connect (webrtcbin, "on-ice-candidate", G_CALLBACK (send_ice_candidate_message), NULL);
  g_signal_connect (webrtcbin, "on-new-transceiver", G_CALLBACK (on_new_transceiver), NULL);
  g_signal_connect (webrtcbin, "notify::on-new-transceiver", G_CALLBACK (on_new_transceiver), NULL);
  g_signal_connect (webrtcbin, "notify::ice-gathering-state", G_CALLBACK (on_ice_gathering_state_notify), NULL);
  g_signal_connect (webrtcbin, "notify::ice-connection-state", G_CALLBACK (on_ice_connection_state_notify), NULL);
  g_signal_connect (webrtcbin, "notify::connection-state", G_CALLBACK (on_connection_state_notify), NULL);

And then we I connect to my application using Chrome the abbreviated output is:

set_offer.
on_offer_set.
create-answer promise wait over.
on_answer_created.
on_connection_state_notify '2'.
on_ice_gathering_state_notify '1'.
on_ice_connection_state_notify '3'.
on_ice_gathering_state_notify '2'.
on_negotiation_needed
The name of the element is 'sendonly'.
The signaling state of the element is '0'.
Remote description is set.

Closing the connection in Chrome does NOT fire any signal that I have been able to detect.

If I add in some debug logging with GST_DEBUG=2,dtls*:7 I can see the DTLS connection close being detected. But after that the webrtcbin pipeline is not closed and continues to send packets to Chrome.

0:00:36.928521700     9 0x7f3470001980 LOG            dtlssrtpdemux gstdtlssrtpdemux.c:123:sink_chain:<dtlssrtpdemux0> pushing dtls packet
0:00:36.928840100     9 0x7f3470001980 DEBUG                dtlsdec gstdtlsdec.c:610:sink_chain:<dtlsdec0> received buffer from rtp_0_1231155112 with length 31
0:00:36.929062100     9 0x7f3470001980 TRACE         dtlsconnection gstdtlsconnection.c:618:gst_dtls_connection_process:<GstDtlsConnection@0x7f3470009c50> locking @ process
0:00:36.929237600     9 0x7f3470001980 TRACE         dtlsconnection gstdtlsconnection.c:620:gst_dtls_connection_process:<GstDtlsConnection@0x7f3470009c50> locked @ process
0:00:36.929438600     9 0x7f3470001980 LOG           dtlsconnection gstdtlsconnection.c:844:log_state:<GstDtlsConnection@0x7f3470009c50> process start: role=client buf=(0x7f346c237210:0/31) 1000001|1 SSL negotiation finished successfully
0:00:36.929646900     9 0x7f3470001980 DEBUG         dtlsconnection gstdtlsconnection.c:1222:bio_method_read:<GstDtlsConnection@0x7f3470009c50> reading 31/31 bytes 31 at offset 0, output buff size is 16717
0:00:36.929888000     9 0x7f3470001980 DEBUG         dtlsconnection gstdtlsconnection.c:667:gst_dtls_connection_process:<GstDtlsConnection@0x7f3470009c50> read result: 0
0:00:36.930132300     9 0x7f3470001980 LOG           dtlsconnection gstdtlsconnection.c:997:handle_error:<GstDtlsConnection@0x7f3470009c50> Connection was closed
0:00:36.930509700     9 0x7f3470001980 DEBUG                dtlsdec gstdtlsdec.c:499:process_buffer:<dtlsdec0> Peer closed the connection
Assignee
Assign to
Time tracking