mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
private mode implementation.
This commit is contained in:
@ -200,6 +200,12 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin
|
||||
|
||||
return videoTrack.SetStream(videoStream)
|
||||
},
|
||||
setPaused: func(isPaused bool) {
|
||||
videoTrack.SetPaused(isPaused)
|
||||
audioTrack.SetPaused(isPaused)
|
||||
|
||||
// TODO: Send fresh cursor position & image when unpausing.
|
||||
},
|
||||
iceTrickle: manager.config.ICETrickle,
|
||||
}
|
||||
|
||||
@ -314,12 +320,22 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin
|
||||
})
|
||||
|
||||
cursorImage := func(entry *cursor.ImageEntry) {
|
||||
// TODO: Refactor.
|
||||
if videoTrack.paused {
|
||||
return
|
||||
}
|
||||
|
||||
if err := peer.SendCursorImage(entry.Cursor, entry.Image); err != nil {
|
||||
logger.Err(err).Msg("could not send cursor image")
|
||||
}
|
||||
}
|
||||
|
||||
cursorPosition := func(x, y int) {
|
||||
// TODO: Refactor.
|
||||
if videoTrack.paused {
|
||||
return
|
||||
}
|
||||
|
||||
if session.IsHost() {
|
||||
return
|
||||
}
|
||||
@ -352,6 +368,11 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin
|
||||
})
|
||||
|
||||
dataChannel.OnMessage(func(message webrtc.DataChannelMessage) {
|
||||
// TODO: Refactor.
|
||||
if videoTrack.paused {
|
||||
return
|
||||
}
|
||||
|
||||
if err := manager.handle(message.Data, session); err != nil {
|
||||
logger.Err(err).Msg("data handle failed")
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ type WebRTCPeerCtx struct {
|
||||
connection *webrtc.PeerConnection
|
||||
dataChannel *webrtc.DataChannel
|
||||
changeVideo func(videoID string) error
|
||||
setPaused func(isPaused bool)
|
||||
iceTrickle bool
|
||||
}
|
||||
|
||||
@ -122,6 +123,19 @@ func (peer *WebRTCPeerCtx) SetVideoID(videoID string) error {
|
||||
return peer.changeVideo(videoID)
|
||||
}
|
||||
|
||||
func (peer *WebRTCPeerCtx) SetPaused(isPaused bool) error {
|
||||
peer.mu.Lock()
|
||||
defer peer.mu.Unlock()
|
||||
|
||||
if peer.connection == nil {
|
||||
return types.ErrWebRTCConnectionNotFound
|
||||
}
|
||||
|
||||
peer.logger.Info().Bool("is_paused", isPaused).Msg("set paused")
|
||||
peer.setPaused(isPaused)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (peer *WebRTCPeerCtx) Destroy() {
|
||||
peer.mu.Lock()
|
||||
defer peer.mu.Unlock()
|
||||
|
@ -26,12 +26,17 @@ func (manager *WebRTCManagerCtx) newPeerStreamTrack(stream types.StreamSinkManag
|
||||
peer := &PeerStreamTrack{
|
||||
logger: logger,
|
||||
track: track,
|
||||
listener: func(sample types.Sample) {
|
||||
err := track.WriteSample(media.Sample(sample))
|
||||
if err != nil && errors.Is(err, io.ErrClosedPipe) {
|
||||
logger.Warn().Err(err).Msg("pipeline failed to write")
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
peer.listener = func(sample types.Sample) {
|
||||
if peer.paused {
|
||||
return
|
||||
}
|
||||
|
||||
err := track.WriteSample(media.Sample(sample))
|
||||
if err != nil && errors.Is(err, io.ErrClosedPipe) {
|
||||
logger.Warn().Err(err).Msg("pipeline failed to write")
|
||||
}
|
||||
}
|
||||
|
||||
err = peer.SetStream(stream)
|
||||
@ -41,6 +46,7 @@ func (manager *WebRTCManagerCtx) newPeerStreamTrack(stream types.StreamSinkManag
|
||||
type PeerStreamTrack struct {
|
||||
logger zerolog.Logger
|
||||
track *webrtc.TrackLocalStaticSample
|
||||
paused bool
|
||||
listener func(sample types.Sample)
|
||||
|
||||
stream types.StreamSinkManager
|
||||
@ -92,3 +98,7 @@ func (peer *PeerStreamTrack) AddToConnection(connection *webrtc.PeerConnection)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (peer *PeerStreamTrack) SetPaused(paused bool) {
|
||||
peer.paused = paused
|
||||
}
|
||||
|
Reference in New Issue
Block a user