If the ontrack() event is not being called on Safari with a Go-based WebRTC peer, there are a few potential reasons for this issue. The ontrack() event is fired when a new media track is received from a remote peer, and it's crucial for handling remote media streams in WebRTC. Here are some things to check and possible solutions:

  1. Safari Compatibility:

    • First, ensure that your version of Safari supports the WebRTC API and ontrack() event. As of my last update in September 2021, Safari had partial support for WebRTC, and some features might not be fully compatible. Check the latest Safari documentation and WebRTC compatibility table to see if ontrack() is supported.
  2. AddTrack vs. ontrack():

    • In WebRTC, there are two ways to handle remote media tracks: using addTrack() or ontrack().
    • In Go-based WebRTC peers, make sure you are correctly using ontrack() on the receiving end. If the Go peer is not correctly invoking ontrack() when receiving remote tracks, it won't trigger the event on the JavaScript side.
  3. RTCPeerConnection Configuration:

    • Check the configuration of your RTCPeerConnection on both the Go and JavaScript sides. Ensure that the negotiation is correctly set up to establish the media connection.
    • Verify that you are using the same RTCPeerConnection configuration on both ends to ensure compatibility.
  4. ICE Servers:

    • Make sure you have correctly configured ICE servers for NAT traversal. Lack of ICE servers or misconfiguration might cause connection issues on certain networks or browsers.
  5. WebRTC SDP Compatibility:

    • Ensure that the SDP (Session Description Protocol) generated by the Go-based peer is fully compatible with Safari's implementation of WebRTC.
    • Check for any codec or encryption-related compatibility issues that might prevent the media tracks from being received correctly.
  6. Logging and Debugging:

    • Add logging statements to both the Go and JavaScript code to track the flow of data and verify where the issue might be occurring.
    • Use browser developer tools to inspect network traffic and examine the SDP and ICE exchange between the peers.
  7. Third-Party Libraries:

    • If you are using any third-party libraries or wrappers around the Go WebRTC implementation, ensure they are up to date and don't introduce any incompatibilities.
  8. Browser Permissions:

    • Check if your Safari browser is blocking permissions for camera and microphone access. Without these permissions, Safari won't trigger the ontrack() event.

Remember that WebRTC implementations and browser support can evolve over time, so always refer to the latest documentation and compatibility charts for the most accurate information. If you can provide more details or code snippets, it will be easier to pinpoint the specific issue you are facing and provide a more targeted solution.

Have questions or queries?
Get in Touch