mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
add SDP answer.
This commit is contained in:
parent
096efe9b38
commit
7b2c1570bf
@ -19,9 +19,10 @@ type ICEServer struct {
|
|||||||
|
|
||||||
type WebRTCPeer interface {
|
type WebRTCPeer interface {
|
||||||
CreateOffer(ICERestart bool) (*webrtc.SessionDescription, error)
|
CreateOffer(ICERestart bool) (*webrtc.SessionDescription, error)
|
||||||
SignalOffer(sdp string) error
|
CreateAnswer() (*webrtc.SessionDescription, error)
|
||||||
SignalAnswer(sdp string) error
|
SetOffer(sdp string) error
|
||||||
SignalCandidate(candidate webrtc.ICECandidateInit) error
|
SetAnswer(sdp string) error
|
||||||
|
SetCandidate(candidate webrtc.ICECandidateInit) error
|
||||||
|
|
||||||
SetVideoID(videoID string) error
|
SetVideoID(videoID string) error
|
||||||
SendCursorPosition(x, y int) error
|
SendCursorPosition(x, y int) error
|
||||||
@ -36,5 +37,5 @@ type WebRTCManager interface {
|
|||||||
|
|
||||||
ICEServers() []ICEServer
|
ICEServers() []ICEServer
|
||||||
|
|
||||||
CreatePeer(session Session, videoID string) (*webrtc.SessionDescription, error)
|
CreatePeer(session Session, videoID string) (WebRTCPeer, error)
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ func (manager *WebRTCManagerCtx) ICEServers() []types.ICEServer {
|
|||||||
return manager.config.ICEServers
|
return manager.config.ICEServers
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID string) (*webrtc.SessionDescription, error) {
|
func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID string) (types.WebRTCPeer, error) {
|
||||||
// add session id to logger context
|
// add session id to logger context
|
||||||
logger := manager.logger.With().Str("session_id", session.ID()).Logger()
|
logger := manager.logger.With().Str("session_id", session.ID()).Logger()
|
||||||
logger.Info().Msg("creating webrtc peer")
|
logger.Info().Msg("creating webrtc peer")
|
||||||
@ -238,5 +238,5 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin
|
|||||||
})
|
})
|
||||||
|
|
||||||
session.SetWebRTCPeer(peer)
|
session.SetWebRTCPeer(peer)
|
||||||
return peer.CreateOffer(false)
|
return peer, nil
|
||||||
}
|
}
|
||||||
|
@ -27,17 +27,33 @@ func (peer *WebRTCPeerCtx) CreateOffer(ICERestart bool) (*webrtc.SessionDescript
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return peer.setLocalDescription(offer)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (peer *WebRTCPeerCtx) CreateAnswer() (*webrtc.SessionDescription, error) {
|
||||||
|
peer.mu.Lock()
|
||||||
|
defer peer.mu.Unlock()
|
||||||
|
|
||||||
|
answer, err := peer.connection.CreateAnswer(nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return peer.setLocalDescription(answer)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (peer *WebRTCPeerCtx) setLocalDescription(description webrtc.SessionDescription) (*webrtc.SessionDescription, error) {
|
||||||
if !peer.iceTrickle {
|
if !peer.iceTrickle {
|
||||||
// Create channel that is blocked until ICE Gathering is complete
|
// Create channel that is blocked until ICE Gathering is complete
|
||||||
gatherComplete := webrtc.GatheringCompletePromise(peer.connection)
|
gatherComplete := webrtc.GatheringCompletePromise(peer.connection)
|
||||||
|
|
||||||
if err := peer.connection.SetLocalDescription(offer); err != nil {
|
if err := peer.connection.SetLocalDescription(description); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
<-gatherComplete
|
<-gatherComplete
|
||||||
} else {
|
} else {
|
||||||
if err := peer.connection.SetLocalDescription(offer); err != nil {
|
if err := peer.connection.SetLocalDescription(description); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -45,21 +61,30 @@ func (peer *WebRTCPeerCtx) CreateOffer(ICERestart bool) (*webrtc.SessionDescript
|
|||||||
return peer.connection.LocalDescription(), nil
|
return peer.connection.LocalDescription(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (peer *WebRTCPeerCtx) SignalOffer(sdp string) error {
|
func (peer *WebRTCPeerCtx) SetOffer(sdp string) error {
|
||||||
|
peer.mu.Lock()
|
||||||
|
defer peer.mu.Unlock()
|
||||||
|
|
||||||
return peer.connection.SetRemoteDescription(webrtc.SessionDescription{
|
return peer.connection.SetRemoteDescription(webrtc.SessionDescription{
|
||||||
SDP: sdp,
|
SDP: sdp,
|
||||||
Type: webrtc.SDPTypeOffer,
|
Type: webrtc.SDPTypeOffer,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (peer *WebRTCPeerCtx) SignalAnswer(sdp string) error {
|
func (peer *WebRTCPeerCtx) SetAnswer(sdp string) error {
|
||||||
|
peer.mu.Lock()
|
||||||
|
defer peer.mu.Unlock()
|
||||||
|
|
||||||
return peer.connection.SetRemoteDescription(webrtc.SessionDescription{
|
return peer.connection.SetRemoteDescription(webrtc.SessionDescription{
|
||||||
SDP: sdp,
|
SDP: sdp,
|
||||||
Type: webrtc.SDPTypeAnswer,
|
Type: webrtc.SDPTypeAnswer,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (peer *WebRTCPeerCtx) SignalCandidate(candidate webrtc.ICECandidateInit) error {
|
func (peer *WebRTCPeerCtx) SetCandidate(candidate webrtc.ICECandidateInit) error {
|
||||||
|
peer.mu.Lock()
|
||||||
|
defer peer.mu.Unlock()
|
||||||
|
|
||||||
return peer.connection.AddICECandidate(candidate)
|
return peer.connection.AddICECandidate(candidate)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,12 @@ func (h *MessageHandlerCtx) signalRequest(session types.Session, payload *messag
|
|||||||
payload.Video = videos[0]
|
payload.Video = videos[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
offer, err := h.webrtc.CreatePeer(session, payload.Video)
|
peer, err := h.webrtc.CreatePeer(session, payload.Video)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
offer, err := peer.CreateOffer(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -46,6 +51,7 @@ func (h *MessageHandlerCtx) signalRestart(session types.Session) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Use offer event intead.
|
||||||
session.Send(
|
session.Send(
|
||||||
event.SIGNAL_RESTART,
|
event.SIGNAL_RESTART,
|
||||||
message.SignalDescription{
|
message.SignalDescription{
|
||||||
@ -61,7 +67,23 @@ func (h *MessageHandlerCtx) signalOffer(session types.Session, payload *message.
|
|||||||
return errors.New("webRTC peer does not exist")
|
return errors.New("webRTC peer does not exist")
|
||||||
}
|
}
|
||||||
|
|
||||||
return peer.SignalOffer(payload.SDP)
|
err := peer.SetOffer(payload.SDP)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
answer, err := peer.CreateAnswer()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
session.Send(
|
||||||
|
event.SIGNAL_ANSWER,
|
||||||
|
message.SignalDescription{
|
||||||
|
SDP: answer.SDP,
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *MessageHandlerCtx) signalAnswer(session types.Session, payload *message.SignalDescription) error {
|
func (h *MessageHandlerCtx) signalAnswer(session types.Session, payload *message.SignalDescription) error {
|
||||||
@ -70,7 +92,7 @@ func (h *MessageHandlerCtx) signalAnswer(session types.Session, payload *message
|
|||||||
return errors.New("webRTC peer does not exist")
|
return errors.New("webRTC peer does not exist")
|
||||||
}
|
}
|
||||||
|
|
||||||
return peer.SignalAnswer(payload.SDP)
|
return peer.SetAnswer(payload.SDP)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *MessageHandlerCtx) signalCandidate(session types.Session, payload *message.SignalCandidate) error {
|
func (h *MessageHandlerCtx) signalCandidate(session types.Session, payload *message.SignalCandidate) error {
|
||||||
@ -79,7 +101,7 @@ func (h *MessageHandlerCtx) signalCandidate(session types.Session, payload *mess
|
|||||||
return errors.New("webRTC peer does not exist")
|
return errors.New("webRTC peer does not exist")
|
||||||
}
|
}
|
||||||
|
|
||||||
return peer.SignalCandidate(payload.ICECandidateInit)
|
return peer.SetCandidate(payload.ICECandidateInit)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *MessageHandlerCtx) signalVideo(session types.Session, payload *message.SignalVideo) error {
|
func (h *MessageHandlerCtx) signalVideo(session types.Session, payload *message.SignalVideo) error {
|
||||||
|
Loading…
Reference in New Issue
Block a user