Fix deprecation cutover, and bad SDP creation

Methods that were marked as deprecated weren't properly handled. There
was a mix of old+new ones supported which caused broken behavior.

SDP creation didn't add SCTP to Offer

Resolves #156
This commit is contained in:
Sean DuBois
2018-09-18 23:02:25 -07:00
parent e496511145
commit cc4160f3ad
5 changed files with 11 additions and 28 deletions

View File

@@ -61,7 +61,7 @@ func main() {
datachannels := make([]*webrtc.RTCDataChannel, 0) datachannels := make([]*webrtc.RTCDataChannel, 0)
var dataChannelsLock sync.RWMutex var dataChannelsLock sync.RWMutex
peerConnection.Ondatachannel = func(d *webrtc.RTCDataChannel) { peerConnection.OnDataChannel = func(d *webrtc.RTCDataChannel) {
dataChannelsLock.Lock() dataChannelsLock.Lock()
datachannels = append(datachannels, d) datachannels = append(datachannels, d)
dataChannelsLock.Unlock() dataChannelsLock.Unlock()

View File

@@ -46,7 +46,7 @@ func main() {
// Set a handler for when a new remote track starts, this handler creates a gstreamer pipeline // Set a handler for when a new remote track starts, this handler creates a gstreamer pipeline
// for the given codec // for the given codec
peerConnection.Ontrack = func(track *webrtc.RTCTrack) { peerConnection.OnTrack = func(track *webrtc.RTCTrack) {
codec := track.Codec codec := track.Codec
fmt.Printf("Track has started, of type %d: %s \n", track.PayloadType, codec.Name) fmt.Printf("Track has started, of type %d: %s \n", track.PayloadType, codec.Name)
pipeline := gst.CreatePipeline(codec.Name) pipeline := gst.CreatePipeline(codec.Name)

View File

@@ -26,7 +26,7 @@ func buildPeerConnection() *webrtc.RTCPeerConnection {
fmt.Printf("Connection State has changed %s \n", connectionState.String()) fmt.Printf("Connection State has changed %s \n", connectionState.String())
} }
peerConnection.Ondatachannel = func(d *webrtc.RTCDataChannel) { peerConnection.OnDataChannel = func(d *webrtc.RTCDataChannel) {
fmt.Printf("New DataChannel %s %d\n", d.Label, d.ID) fmt.Printf("New DataChannel %s %d\n", d.Label, d.ID)
d.Lock() d.Lock()

View File

@@ -47,7 +47,7 @@ func main() {
// Set a handler for when a new remote track starts, this handler saves buffers to disk as // Set a handler for when a new remote track starts, this handler saves buffers to disk as
// an ivf file, since we could have multiple video tracks we provide a counter. // an ivf file, since we could have multiple video tracks we provide a counter.
// In your application this is where you would handle/process video // In your application this is where you would handle/process video
peerConnection.Ontrack = func(track *webrtc.RTCTrack) { peerConnection.OnTrack = func(track *webrtc.RTCTrack) {
if track.Codec.Name == webrtc.VP8 { if track.Codec.Name == webrtc.VP8 {
fmt.Println("Got VP8 track, saving to disk as output.ivf") fmt.Println("Got VP8 track, saving to disk as output.ivf")
i, err := ivfwriter.New("output.ivf") i, err := ivfwriter.New("output.ivf")

View File

@@ -99,35 +99,17 @@ type RTCPeerConnection struct {
// OnIceCandidateError func() // FIXME NOT-USED // OnIceCandidateError func() // FIXME NOT-USED
// OnSignalingStateChange func() // FIXME NOT-USED // OnSignalingStateChange func() // FIXME NOT-USED
// OnICEConnectionStateChange designates an event handler which is called
// when an ice connection state is changed.
//
// Deprecated: use OnIceConnectionStateChange instead.
OnICEConnectionStateChange func(ice.ConnectionState)
// OnIceConnectionStateChange designates an event handler which is called // OnIceConnectionStateChange designates an event handler which is called
// when an ice connection state is changed. // when an ice connection state is changed.
OnIceConnectionStateChange func(ice.ConnectionState) OnICEConnectionStateChange func(ice.ConnectionState)
// OnIceGatheringStateChange func() // FIXME NOT-USED // OnIceGatheringStateChange func() // FIXME NOT-USED
// OnConnectionStateChange func() // FIXME NOT-USED // OnConnectionStateChange func() // FIXME NOT-USED
// Ontrack designates an event handler which is called when remote track
// arrives from a remote peer.
//
// Deprecated: use OnTrack instead.
Ontrack func(*RTCTrack)
// OnTrack designates an event handler which is called when remote track // OnTrack designates an event handler which is called when remote track
// arrives from a remote peer. // arrives from a remote peer.
OnTrack func(*RTCTrack) OnTrack func(*RTCTrack)
// Ondatachannel designates an event handler which is invoked when a data
// channel message arrives from a remote peer.
//
// Deprecated: use OnDataChannel instead.
Ondatachannel func(*RTCDataChannel)
// OnDataChannel designates an event handler which is invoked when a data // OnDataChannel designates an event handler which is invoked when a data
// channel message arrives from a remote peer. // channel message arrives from a remote peer.
OnDataChannel func(*RTCDataChannel) OnDataChannel func(*RTCDataChannel)
@@ -419,6 +401,7 @@ func (pc *RTCPeerConnection) CreateAnswer(options *RTCAnswerOptions) (RTCSession
} }
} else if strings.HasPrefix(*remoteMedia.MediaName.String(), "application") { } else if strings.HasPrefix(*remoteMedia.MediaName.String(), "application") {
pc.addDataMediaSection(d, midValue, candidates, sdp.ConnectionRoleActive) pc.addDataMediaSection(d, midValue, candidates, sdp.ConnectionRoleActive)
appendBundle()
} }
} }
@@ -763,7 +746,7 @@ func (pc *RTCPeerConnection) Close() error {
/* Everything below is private */ /* Everything below is private */
func (pc *RTCPeerConnection) generateChannel(ssrc uint32, payloadType uint8) (buffers chan<- *rtp.Packet) { func (pc *RTCPeerConnection) generateChannel(ssrc uint32, payloadType uint8) (buffers chan<- *rtp.Packet) {
if pc.Ontrack == nil { if pc.OnTrack == nil {
return nil return nil
} }
@@ -792,7 +775,7 @@ func (pc *RTCPeerConnection) generateChannel(ssrc uint32, payloadType uint8) (bu
// TODO: Register the receiving Track // TODO: Register the receiving Track
go pc.Ontrack(track) go pc.OnTrack(track)
return bufferTransport return bufferTransport
} }
@@ -815,10 +798,10 @@ func (pc *RTCPeerConnection) dataChannelEventHandler(e network.DataChannelEvent)
id := event.StreamIdentifier() id := event.StreamIdentifier()
newDataChannel := &RTCDataChannel{ID: &id, Label: event.Label, rtcPeerConnection: pc} newDataChannel := &RTCDataChannel{ID: &id, Label: event.Label, rtcPeerConnection: pc}
pc.dataChannels[e.StreamIdentifier()] = newDataChannel pc.dataChannels[e.StreamIdentifier()] = newDataChannel
if pc.Ondatachannel != nil { if pc.OnDataChannel != nil {
go pc.Ondatachannel(newDataChannel) go pc.OnDataChannel(newDataChannel)
} else { } else {
fmt.Println("Ondatachannel is unset, discarding message") fmt.Println("OnDataChannel is unset, discarding message")
} }
case *network.DataChannelMessage: case *network.DataChannelMessage:
if datachannel, ok := pc.dataChannels[e.StreamIdentifier()]; ok { if datachannel, ok := pc.dataChannels[e.StreamIdentifier()]; ok {