github pion/webrtc v3.2.0

latest releases: v3.3.3, v3.3.2, v3.3.1...
17 months ago

Pion WebRTC v3.2.0 is now available. Pion WebRTC is a Go implementation of WebRTC. If you haven't used it before check out awesome-pion or example-webrtc-applications for what people are doing. We maintain a feature list and other helpful resources in our README.md

This release includes 260 commits from 55 authors. This release was primarily focused on providing more tools around understanding and handling network conditions. Pion wouldn't be possible without everyone involved.

New Features

Media Bandwidth Estimator

Pion now provides a Bandwidth Estimator in-tree for serving media. You now get signals about how much bandwidth is available so you can either send more or less data, giving your users the best experience possible. We currently have a implementation of Google Congestion Control. This was implemented using a generic interface so we can provide more implementations in the future.

To use this you create a cc.BandwidthEstimator provided by pion/interceptor. This estimator then can be queried via estimator.GetTargetBitrate(). This returned value tells you if you should raise, lower or sustain the bitrate you are currently sending.

See bandwidth-estimation-from-disk for a full example of how it can be used.

This was implemented by @mengelbart. Work on Pion's congestion control and bandwidth estimation was funded through the User-Operated Internet fund, a fund established by NLnet made possible by financial support from the PKT Community/The Network Steward and stichting Technology Commons Trust.

webrtc-stats implementation

You can now query and process metadata about your media connections. This data is presented in the standardized webrtc-stats format. These statistics give insight into the why of a WebRTC session.

You can use this to monitor how your Pion WebRTC PeerConnections are operating. Users are also finding this useful to monitor, debug and analyze other WebRTC media servers. You can quickly start up a Pion WebRTC PeerConnection and write canaries and tests against other WebRTC software.

To use this you create a stats.Interceptor provided by pion/interceptor. This allows you to query on a per SSRC basis the status of a stream. The following is an example of query it in a loop in the OnTrack for each stream.

peerConnection.OnTrack(func(track *webrtc.TrackRemote, receiver *webrtc.RTPReceiver) {
    fmt.Printf("New incoming track with codec: %s\n", track.Codec().MimeType)
    for {
        // Pull the stats for the stream that caused OnTrack to be fired
        stats := statsGetter.Get(uint32(track.SSRC()))
                 
         // Print InboundRTPStreamStats. Other stats are available as well
         fmt.Println(stats.InboundRTPStreamStats)

         time.Sleep(time.Second * 5)     
    }
})

See stats for a full example of how it can be used.

This was implemented by @mengelbart

Simulcast Sender

You are now able to send Simulcast traffic with Pion WebRTC. Before this commit we were only able to receive Simulcast traffic.

Developer are using this to move Simulcast traffic between their servers as they scale out. It has also been useful for testing WebRTC servers. Using a small Pion process you can assert that your servers are properly handling Simulcast traffic.

This was implemented in 37e16a3 by @boks1971

AV1 Support

Pion WebRTC now has AV1 support. You can send AV1 with the same APIs you send and receive H264, H265, VP8, VP9, Opus and PCM with.

A example of saving AV1 to disk is available at save-to-disk-av1

Extensive Tooling Improvements

@stv0g and @at-wat made extensive improvements to the .goassets repo. Tools and processes had fallen out of date and were slowing the project down. They took on a lot of frustrating work so Pion can be stable and defect free.

Don't miss a new webrtc release

NewReleases is sending notifications on new releases.