Skip to content

Releases: elixir-webrtc/ex_webrtc

v0.6.2

21 Oct 07:49
Compare
Choose a tag to compare

Move peer connection initialization to handle_continue

v0.5.1

21 Oct 07:49
Compare
Choose a tag to compare

Move peer connection initialization to handle_continue

v0.6.1

10 Oct 11:49
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.6.0...v0.6.1

v0.6.0

08 Oct 10:02
4782ace
Compare
Choose a tag to compare

Breaking Changes

This release doesn't include any breaking changes! 🎉

What's Changed

Full Changelog: v0.5.0...v0.6.0

v0.5.0

10 Sep 16:51
Compare
Choose a tag to compare

Breaking Changes

This release doesn't include any breaking changes! 🎉

What's Changed

  • Add DataChannels by @LVala in #157
  • DataChannels: allow for closing, apply negotiated stream parameters by @LVala in #161
  • Include DataChannel stats in PeerConnection.get_stats by @LVala in #162
  • Make DataChannel support optional by @LVala in #163
  • Add guide on offering to receive media tracks by @mickel8 in #165
  • Fix typo in docs by @Arp-G in #166

New Contributors

Full Changelog: v0.4.1...v0.5.0

v0.4.1

24 Aug 17:30
Compare
Choose a tag to compare

What's Changed

  • Make docs smaller by @sgfn in #156
  • Buffer RT(C)P packets that arrive pre-DTLS handshake completion by @sgfn in #160
  • Add deploying tutorial by @mickel8 in #159

Full Changelog: v0.4.0...v0.4.1

v0.4.0

09 Aug 14:56
dc1ec48
Compare
Choose a tag to compare

Breaking changes

  • Packets sent in the {:rtcp, ...} message now come wrapped in a 2-element tuple. A new field denotes the ID of the corresponding track (the one to which the feedback is related), i.e.
  {:ex_webrtc, input_pc, {:rtcp, packets}} = msg

  for packet <- packets do
    case packet do
-     %ExRTCP.Packet.PayloadFeedback.PLI{} ->
+     {track_id, %ExRTCP.Packet.PayloadFeedback.PLI{}} ->
         # do something
  ...

In the case of PLI and NACK, this is the ID of an outgoing (sender's) track; in the case of Sender and Receiver Reports, it's the ID of an incoming (receiver's) track.

If matching to a track was not possible (like in the case of TWCC packets), track_id is set to nil, i.e.

  ...
-     %ExRTCP.Packet.TransportFeedback.CC{} ->
+     {nil, %ExRTCP.Packet.TransportFeedback.CC{}} ->
         # do something else
    end
  end
  • Supported payloaders (VP8, Opus) are now created and accessed using the same module: ExWebRTC.RTP.Payloader. The same applies to depayloaders (ExWebRTC.RTP.Depayloader):
  video_codec = %ExWebRTC.RTPCodecParameters{
    payload_type: 96,
    mime_type: "video/VP8",
    clock_rate: 90_000
  }

  audio_codec = %ExWebRTC.RTPCodecParameters{
    payload_type: 111,
    mime_type: "audio/opus",
    clock_rate: 48_000,
    channels: 2
  }

  # Creating (de)payloaders
- video_payloader = ExWebRTC.RTP.VP8.Payloader.new()
+ {:ok, video_payloader} = ExWebRTC.RTP.Payloader.new(video_codec)

+ {:ok, audio_depayloader} = ExWebRTC.RTP.Depayloader.new(audio_codec)

  # Using (de)payloaders
- {packets, video_payloader} = ExWebRTC.RTP.VP8.Payloader.payload(video_payloader, frame)
+ {packets, video_payloader} = ExWebRTC.RTP.Payloader.payload(video_payloader, frame)

- frame = ExWebRTC.RTP.Opus.Depayloader.depayload(packet)
+ {frame, audio_depayloader} = ExWebRTC.RTP.Depayloader.depayload(audio_depayloader, packet)

Refer to Payloader and Depayloader docs for more info.

What's Changed

  • Remove redundant FMTP specification from default codecs by @mickel8 in #125
  • Add RTP.Munger and H264 codec utilities by @LVala in #126
  • Update examples. Update ex_webrtc deps. by @mickel8 in #131
  • Fix examples sometimes not loading in Chromium by @mickel8 in #133
  • Improve inbound/outbound RTP stats by @LVala in #134
  • Fix: always include remote fingerprint in stats by @LVala in #135
  • Expose ICE port range by @mickel8 in #139
  • Add Introduction to Elixir WebRTC tutorial by @LVala in #136
  • Add track_id to packets sent in {:rtcp, ...} message by @LVala in #140
  • Further improvements to Introduction to Elixir WebRTC tutorial by @LVala in #141
  • Fix set_remote_description failing on description with rejected m-lines by @LVala in #145
  • Handle other retransmit case in DTLSTransport by @sgfn in #148
  • Add tutorial about debugging by @LVala in #146
  • Ignore lack of rtcp_mux in rejected m-lines by @LVala in #150
  • Add format parameters to default video codecs by @LVala in #153
  • Add simulcast tutorial by @mickel8 in #151
  • Add behaviour and dynamic dispatch for (de)payloaders by @sgfn in #147
  • Bump deps, release 0.4.0 by @sgfn in #155

Full Changelog: v0.3.0...v0.4.0

v0.3.0

28 Jun 07:30
Compare
Choose a tag to compare

Breaking changes

  • RTP packets are now returned in 4 element tuple (comparing to 3 element tuple before). A new field denotes RID i.e.

    - {:ex_webrtc, input_pc, {:rtp, id, packet}}
    + {:ex_webrtc, input_pc, {:rtp, id, rid, packet}}

    RID identifies simulcast layer. If client side offers simulcast, ExWebRTC will by default accept it. If simulcast is disabled, RID is equal to nil.

  • all features like RTX, TWCC, Simulcast, etc. are now by default enabled. You can disable them using feature option of PeerConnection configuration options. This means you can remove RTX codec from your list of codecs:

    @video_codecs [
      %RTPCodecParameters{
        payload_type: 96,
        mime_type: "video/H264",
        clock_rate: 90_000,
    -    rtcp_fbs: [%ExSDP.Attribute.RTCPFeedback{pt: 96, feedback_type: :nack}]
      },
    -  %RTPCodecParameters{
    -    payload_type: 97,
    -    mime_type: "video/rtx",
    -    clock_rate: 90_000,
    -    sdp_fmtp_line: %ExSDP.Attribute.FMTP{pt: 97, apt: 96}
    - }
    ]
  • ExWebRTC now supports MediaStreams. If you offer to send media tracks, they, by default, won't be assigned to any media stream. As a result, on the other side, in particular in a web browser, streams field of the RTCTrackEvent will be an empty array. You have to either create a stream in Elixir WebRTC or in a web browser i.e.

    To keep this working:

    pc.ontrack = event => videoPlayer.srcObject = event.streams[0];

    assign tracks to media stream in Elixir WebRTC:

    - {:ok, _sender} = PeerConnection.add_track(pc, MediaStreamTrack.new(:audio))
    - {:ok, _sender} = PeerConnection.add_track(pc, MediaStreamTrack.new(:video))
    + media_stream_id = MediaStreamTrack.generate_stream_id()
    + {:ok, _sender} = PeerConnection.add_track(pc, MediaStreamTrack.new(:audio, [media_stream_id]))
    + {:ok, _sender} = PeerConnection.add_track(pc, MediaStreamTrack.new(:video, [media_stream_id]))

What's Changed

New Contributors

Full Changelog: v0.2.0...v0.3.0

v0.2.0

14 May 10:08
ae1e49f
Compare
Choose a tag to compare

What's Changed

  • Add logo by @mickel8 in #70
  • Add support for TWCC feedbacks by @LVala in #63
  • Allow MediaStreamTrack.t() as a parameter to send_rtp/3 by @srcrip in #72
  • Fix invalid order of return values from `TWCCRecorder.get_feedback/1 by @LVala in #73
  • Move functions modyfing RTPSender out of PeerConnection by @LVala in #75
  • adding rtcp processing example by @themusicman in #76
  • Add support for RTCP Receiver Reports by @LVala in #77
  • Add support for RTCP Sender Reports by @LVala in #78
  • Update bidirectional connection example in the transceiver guide by @mickel8 in #79
  • Fix SDPUtils.get_dtls_role/1. Handle multiple Group attributes. by @mickel8 in #82
  • Allow for setting custom controlling process by @mickel8 in #84
  • Add local/remote ICE candidates to current/pending description. by @LVala in #83
  • Fix get_all_running/0 test by @mickel8 in #85
  • Fix TWCCRecorder base timestamp evaluation bug by @LVala in #86
  • Sending RTCP Reports by @LVala in #81
  • Use normalized comparison in PeerConnection.Configuration.supported_codec?/2 by @clone1018 in #87
  • Fix issue with not-updating RTP header extensions on remote description by @LVala in #89
  • Allow add_ice_candidate when current_remote_description is not set by @LVala in #92
  • Improve CI by @LVala in #91
  • Generate NACKs and handle incoming RTX packets by @LVala in #90
  • Handle incoming data before receiving an answer by @LVala in #95
  • Add ice_gathering_state_change event by @mickel8 in #96
  • Change controlling process spec to Process.dest() by @LVala in #97
  • Add WHEP from file example by @clone1018 in #88
  • Add send_pli function by @LVala in #99
  • Allow to pass GenServer opts to the PeerConnection by @mickel8 in #98
  • Add outbound RTX by @LVala in #101
  • Adjustments for BUNDLE group. Update ex_ice. by @mickel8 in #102
  • Update README.md by @LVala in #103
  • Improve the structs in the API, add docs by @LVala in #104
  • Accept padding packets in VP8 depayloader by @mickel8 in #106
  • Release 0.2.0 by @LVala in #105

New Contributors

Full Changelog: v0.1.0...v0.2.0

v0.1.0

07 Feb 14:26
8bc7dd1
Compare
Choose a tag to compare

What's Changed

  • Handle server side DTLS handshake by @mickel8 in #1
  • Create transceivers on set_remote_description by @mickel8 in #2
  • Generate SDP answer from RTPTransceivers by @mickel8 in #3
  • Ensure BUNDLE group by @mickel8 in #4
  • Ensure ICE credentials by @mickel8 in #5
  • Add initial implementation of craete_offer, apply_local_description and add_transceiver by @LVala in #6
  • Add/refactor set_local_description and create_answer by @LVala in #7
  • Assign mids in create_offer by @LVala in #8
  • Move DTLS utilities to DTLSTransport module by @LVala in #10
  • Document and refactor PeerConnection options by @mickel8 in #11
  • Configure codecov by @mickel8 in #13
  • Setup SRTP decryption by @LVala in #12
  • Make codecs and rtp header extensions configurable by @mickel8 in #14
  • Basic RTP demuxing by @LVala in #15
  • Change DTLSTransport to a process by @LVala in #16
  • Use new, struct-based ex_dtls; add tests by @LVala in #17
  • Add PeerConnection state machine by @mickel8 in #20
  • Increase assert_receive_timeout to 300ms by @mickel8 in #23
  • Verify peer cert fingerprint by @mickel8 in #22
  • Allow for sending data by @LVala in #21
  • Add ICETransport behaviour by @mickel8 in #25
  • Update deps. Get rid of most of the compiler warnings by @mickel8 in #26
  • Move ICETransport initialization to PeerConnection by @mickel8 in #27
  • Add IVF reader by @mickel8 in #29
  • Negotiation improvements by @LVala in #31
  • Fix ssrc in demuxer by @LVala in #32
  • Add AV1 to the list of default video codecs by @mickel8 in #33
  • Initial version of sending from a file by @mickel8 in #30
  • Fix timestamps and typos in send_from_file example by @mickel8 in #36
  • Properly handle new remote tracks by @LVala in #34
  • Add add_track/2 function to API by @LVala in #38
  • Update config on receiving remote SDP by @mickel8 in #37
  • Correctly generate SSRC for RTPSender by @mickel8 in #39
  • Stop transports on closing PeerConnection by @mickel8 in #40
  • Add negotiation_needed notification by @mickel8 in #41
  • Ogg reader by @LVala in #43
  • Add IVF writer by @mickel8 in #44
  • Add VP8 depayloader by @mickel8 in #45
  • Add save_to_file example by @mickel8 in #46
  • Add Opus payloader by @LVala in #47
  • Ogg writer by @LVala in #50
  • Add removeTrack by @mickel8 in #49
  • Extend Ogg examples by @LVala in #52
  • Restructure Media module by @LVala in #53
  • Add replace_track by @mickel8 in #51
  • Refactor PeerConnection tests by @mickel8 in #54
  • Add stop_transceiver/2 by @mickel8 in #55
  • Add audio handling in the echo example by @LVala in #58
  • Add Transceiver guide by @mickel8 in #56
  • Improve API and API docs by @mickel8 in #57
  • Add test for adding and removing tracks in a loop by @mickel8 in #59
  • Handle ExDTLS errors by @mickel8 in #60
  • Fix no supported codecs scenario by @mickel8 in #61
  • Add ICECandidate.to_json and ICECandidate.from_json by @mickel8 in #62
  • Fix bug with choosing transceiver for remote m-line by @LVala in #65
  • Simplify examples by @LVala in #66
  • Add get_stats/1 by @mickel8 in #64
  • Fix issue with rejecting non-matching FMTP by @LVala in #67
  • Call end_of_candidates on receiving an empty ICE candidate by @mickel8 in #68
  • Update README.md by @LVala in #69

New Contributors

  • @LVala made their first contribution in #6

Full Changelog: https://github.com/elixir-webrtc/ex_webrtc/commits/v0.1.0