Commit Graph

320 Commits

Author SHA1 Message Date
Sean DuBois
775a521176 Don't store transceiver MID
These are generated at runtime (depending if we are doing Plan-B or
Unified Plan). Currently this field is actually unused, so just getting
rid of it.

Relates to #106
2019-07-22 21:31:39 -07:00
Sean DuBois
584bd651c1 Delete unimplemented stubs
We will implement these eventually, but for now just delete them.
We need to explore how we can automatically figure out what parts
of WebRTC we haven't implemented yet.

Relates to #106
2019-07-22 21:31:39 -07:00
Sean DuBois
9e4b41838e Remove no-op code from shutdown
Don't manually set the ICEConnectionState in Close. This
value is being set by pion/ice when we call Close on it already

Relates to #106
2019-07-22 21:31:39 -07:00
Sean DuBois
2228e7f61e Add custom-logger example
Demonstrate how users can user their own logger via the
SettingEngine

Resolves #726
2019-07-11 20:24:07 +01:00
Sean DuBois
eb737ba0b2 Fix routine leak in drainSRTP
Store orphaned SRTP/SRTCP streams and discard them
when we close the PeerConnection

Resolves #729
2019-07-06 22:58:07 +01:00
Hugo Arregui
93261960b1 Basic stats
Load DC, CandidatePair and Candidate basic stats
2019-06-25 19:36:57 +00:00
AlexWoo(武杰)
3a15b2ccda Check all SDP media sections for a fingerprint
Fix RemoteDescription parsing so that it parses all sections when
looking for a fingerprint, before it would fail if the first section
did not contain one
2019-06-23 23:40:40 -07:00
Sean DuBois
be3d922fbb Add mDNS Host Candidate support
This only does parsing, does not generate them.
In the future this option will be exposed via the SettingEngine,
including the ability to opt out of mDNS completely for security/scaling
concerns

Relates to pion/webrtc#699
2019-06-21 10:13:27 -07:00
mchlrhw
dc49947963 Fix panic in openSRTP
Implement fix by logging and bailing out if the local description has
not been set by the time we start receiving data from the other peer.

Fixes #563
2019-06-18 10:30:36 +01:00
Sean DuBois
2838b1a836 Move ICE code out of internal
Users are unable to use the callbacks inside `internal/ice`.
Even though we alias things like OnSelectedCandidatePairChange
are unusable since in the package they use `ice.Candidate` instead of
`ICECandidate`
2019-06-15 01:29:08 -07:00
Sean DuBois
0d773a38f6 Don't error when no candidate pairs
Fix inconsistency with error handling when we have no candidate pairs.
Before we had custom code in RTP handling that would discard errors
if it was because we had no candidate pairs. Move this logic into the
mux so we have consistent behavior with Datachannels

This can be expected and is a soft failure. Every subsystem is expected
to handle lossy communication.

Resolves #706
2019-06-08 17:51:18 -07:00
Konstantin Itskov
8c7f769e86 Fix race issue caused by multiple gathering
resolves #707
2019-06-07 20:05:55 -07:00
Adam Kiss
7756848a4c Moved ice related files to internal/ice
Moved ice related files to internal/ice. Added ice.go and
ice_go.go files containing aliases to internal/ice. Added
internal/tools/gen/genaliasdocs.go helper script for generating the
documentation for these aliases. Dropped ice
prefix from file names in internal/ice package.
2019-06-03 10:57:27 -07:00
Sean DuBois
1d721199ef Add ICE Trickle support
Resolves pion/ice#51

Co-authored-by: Konstantin Itskov <konstantin.itskov@kovits.com>
2019-05-29 17:15:28 -07:00
Adam Kiss
8289a3e7cc Prepare for internal/ice package
Removed SDP dependency from ice files. Exported string to ice enum
functions. Exported ICEServer.Validate.
2019-05-26 14:09:38 +02:00
Sean DuBois
b2049be130 Support ICETransportPolicy
Add support for ICETransportPolicy and ICEGatherPolicy for ORTC
2019-05-26 00:54:43 -07:00
Sean DuBois
85a1602698 Populate incoming Label/ID
Populate the Label/ID for incoming tracks. Before we
emitted them to the user with empty values

Resolves #670
2019-05-12 00:55:37 -05:00
Sean DuBois
bf8502ef02 AddTrack now creates SendRecv Transceiver
Before we incorrectly created a Sendonly transceiver
2019-05-06 00:35:36 -07:00
Adam Kiss
7820ed0726 Fixed create data channel
Data channel creation checks if the sctp transport is already
established. Because this check was incorrect, in some cases it returned
an error instead of delaying opening the data channel until the sctp
connection is established. Fixed the check. Added locking to
CreateDataChannel to avoid race condition. Added test.
2019-04-24 11:11:06 -07:00
Christopher Fry
54c3a4c672 Allow remote Sendrecv to be used with Recvonly
Before our RTPTransceiver logic would only allow Sendrecv to
match with another Sendrecv. Instead allow a SendRecv to be used
with a local Recvonly

Co-authored-by: Sean DuBois <sean@siobud.com>
2019-04-18 21:32:10 -07:00
Sean DuBois
e8fe7aa48d Bump SRTP/RTCP and update RTCP API
Reading/Writing RTCP packets now return a slice

Relates to pion/srtp#29
2019-04-11 16:03:26 -07:00
Max Hawkins
8f1f2f0416 SDP: set port to 0 when rejecting m= lines
Fixes #616
2019-04-11 15:23:36 -07:00
Max Hawkins
141ef8b71a SDP: reject media tracks without matching codec
Previously the PeerConnection would create invalid SDPs
when answering an offer that contained codecs it didn't
know about. Now it rejects them by setting the media format
to 0.

Related to #449
2019-04-09 18:12:58 -07:00
Michael MacDonald
88448e5e74 Support plan-b (fallback or explicit)
By default, we should be using unified-plan as the
SDP format of choice. This patch adds a PeerConnection
configuration option to allow the user to specify that
they want plan-b only, unified-plan only, or a special
compatibility mode where a plan-b answer will be generated
IFF a plan-b offer is received.
2019-04-09 10:26:42 -04:00
Marouane
2eaa90b5f1 Fix CreateOffer
Append missing Key Group "BUNDLE"

Resolves #601
2019-04-08 09:54:05 -07:00
Sean DuBois
fc7a465150 Response now use the same mid value as the offer
When generating responses we were incorrectly using numeric mid values.
This works for Unified Plan offers, but was breaking Plan-B
2019-04-07 20:48:20 -07:00
Sean DuBois
dbde6114a2 Update import paths
Add /v2 to import paths everywhere
2019-04-07 02:17:15 -07:00
Sean DuBois
4c781e64d9 Return error on certificate fingerprint failure
Instead of printing the error to stdout return the error to the user.
This may not be a hard error (as later certificates would have passed)
but it never is good to be in a state where you have certificates in a
broken state.

Resolves #586
2019-04-05 00:48:22 -07:00
Sean DuBois
6e26cd208f Make SCTPTransport thread safe
Relates to #525
2019-04-04 21:28:37 -07:00
Sean DuBois
1cdfc10c84 Mass replace pions -> pion
Pions organization was renamed to pion
2019-04-04 15:32:03 -07:00
Sean DuBois
1202dbaa06 Migrate SDP generation to Unified Plan
This commit has breaking changes. This API change means we
can no longer support an arbitrary number of receivers. For every track
you want to receive you MUST call PeerConnection.AddTransceiver

We do now support sending an multiple audio/video feeds. You can see
this behavior via gstreamer-receive and gstreamer-send currently.

Resolves #54
2019-04-04 12:55:36 -07:00
Hugo Arregui
87897285b1 Custom Loggers
Define LoggerFactory as part of the SettingEngine
2019-04-01 11:14:13 -03:00
Sean DuBois
fe3d7ce5e4 Don't allow answer without RemoteDescription
Resolves #563
2019-03-31 15:58:50 -07:00
Sean DuBois
cc25f30bdb Don't iterate Transceivers without lock
Properly use locks when accessing Transceivers

Resolves #431
2019-03-31 12:14:40 -07:00
Sean DuBois
6c0e8b8851 Return io.EOF when Track has no RTPSenders
Using this enum allows people to more gracefully handle shutdown,
also add a test to assert io.EOF is returned in other places

Resolves #511
2019-03-31 12:00:40 -07:00
Max Hawkins
4298892dc0 Rename SendRTCP -> WriteRTCP
Makes method name consistent with WriteRTP

Fixes #557
2019-03-30 10:21:46 -07:00
Sean DuBois
776c551307 Don't notify users via Track of ICE errors
Writing to a Track shouldn't return errors for an individual
RTPSender. This filters ErrNoCandidatePairs from being returned
and instead just returns nil

Resolves #523
2019-03-29 17:16:35 -07:00
Sean DuBois
b4bc4798b9 Move ICE out of tree
Relates to #361
2019-03-25 23:31:43 -07:00
Alex Browne
5ee8b1a5c5 Add ICE candidate event handlers
Add OnICECandidate and OnICEGatheringStateChange methods to
PeerConnection. The main goal of this change is to improve API
compatibility with the JavaScript/Wasm bindings. It does not actually
add trickle ICE support or change the ICE candidate gathering process,
which is still synchronous in the Go implementation. Rather, it fires
the appropriate events similar to they way they would be fired in a true
trickle ICE process.

Remove unused OnNegotiationNeeded event handler. This handler is not
required for most applications and would be difficult to implement in
Go. This commit removes the handler from the JavaScript/Wasm bindings,
which leads to a more similar API for Go and JavaScript/Wasm.

Add OnICEGatheringStateChange to the JavaScript/Wasm bindings. Also
changes the Go implementation so that the function signatures match.
2019-03-25 14:22:11 -07:00
backkem
fe0e4d692b Move logging out of tree
Relates to #361
2019-03-21 12:48:57 +01:00
Luke Curley
205c759a69 Add feedback support to SDP generation
Syntax could be better but works in a standards-compliant way.

```
codec := webrtc.NewRTPH264Codec(webrtc.DefaultPayloadTypeH264, 90000)
codec.RTPCodecCapability.RTCPFeedback = []webrtc.RTCPFeedback{{
    Type: "nack",
}, {
    Type:      "nack",
    Parameter: "pli",
}}
```
2019-03-20 15:44:17 -07:00
Yutaka Takeda
f28fadae04 Change PC pubic properties to methods
Resolves #526
2019-03-19 10:48:33 -07:00
Yutaka Takeda
8bd831fafe Change public DataChannel props to methods
Resolves #505
2019-03-19 08:33:18 -07:00
Luke Curley
08a93d89ba Optimize Read by buffering
Increases the Read performance to acceptable levels. Packet loss went
from roughly 8% to 0.5% with this change.
2019-03-12 21:34:48 -07:00
Konstantin Itskov
d23ceed6d4 Add a customization to control network types
- Fix an issue with ipv6 srflx candidates gathering.
- Add SetNetworkTypes config to SettingEngine to control what network
  types are allowed to be connected.

Resolves #460
2019-03-12 21:36:52 -04:00
Alex Browne
0f1ddf0825 Add JavaScript/WASM bindings
Resolves #478. Adds minimal JavaScript/WASM bindings. This makes it
possible to compile core parts of pions/webrtc to WASM and run it in the
browser. Only data channels are supported for now and there is
limited/no support for certificates and credentials.
2019-03-08 00:26:17 +01:00
Michael MacDonald
c4f37ff2a7 Check for nil Receiver in PeerConnection.AddTrack
Relates to #476

Also check for a nil Receiver on the RTPTransceiver.
2019-03-07 16:55:19 -05:00
Sean DuBois
005c731b9b Fix deadlock on DTLS shutdown
DTLS shutdown deadlocks if Close is called before startup completes,
because the DTLS connection hasn't finished yet we don't have handles
to close anything.

This updates DTLS to follow how SCTP is shutdown, by shutting down the
nextConn (ICE in this case) we can shutdown the subsystem. By closing
ICE first, DTLS (and then SCTP) close properly no matter what state
they are in.

Resolves #487
2019-03-07 11:48:40 +01:00
Sean DuBois
43604d5491 Remove pkg/errors dependency
Lots of people are paying attention to what dependecies we add to their
projects now. This just makes things a little cleaner.

Resolves #469
2019-03-06 09:34:10 -08:00
mxmCherry
abd6448925 Add RTPSender.hasSent helper
Mostly for PeerConnection.AddTrack RTPTransceiver filtering.

Also, removed nil-check for RTPSender.track:
1) RTPSender is always instantiated with PeerConnection.NewRTPSender
2) PeerConnection.NewRTPSender returns error if nil track passed
2019-03-06 00:08:11 +02:00