mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
Capture bandwidth switch (#14)
* Handle bitrate change by finding the stream with closest bitrate as peer * Convert video id into bitrate when creating peer or changing bitrate * Try to fix prometheus panic * Revert metrics label name change * minor fixes. * bitrate selector. * skip if moving to the same stream. * no closure for getting target bitrate. * fix: high res switch to lo video, stream bitrate out of range * revert dev config change. * white space. Co-authored-by: Aleksandar Sukovic <aleksandar.sukovic@gmail.com>
This commit is contained in:
@ -214,7 +214,7 @@ func (manager *WebRTCManagerCtx) newPeerConnection(codecs []codec.RTPCodec, logg
|
||||
return api.NewPeerConnection(manager.webrtcConfiguration)
|
||||
}
|
||||
|
||||
func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID string) (*webrtc.SessionDescription, error) {
|
||||
func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, bitrate int) (*webrtc.SessionDescription, error) {
|
||||
id := atomic.AddInt32(&manager.peerId, 1)
|
||||
manager.metrics.NewConnection(session)
|
||||
|
||||
@ -280,11 +280,12 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// set default video id
|
||||
err = videoTrack.SetVideoID(videoID)
|
||||
if err != nil {
|
||||
// set initial video bitrate
|
||||
if err = videoTrack.SetBitrate(bitrate); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
videoID := videoTrack.stream.ID()
|
||||
manager.metrics.SetVideoID(session, videoID)
|
||||
|
||||
// data channel
|
||||
@ -298,14 +299,19 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin
|
||||
logger: logger,
|
||||
connection: connection,
|
||||
dataChannel: dataChannel,
|
||||
changeVideo: func(videoID string) error {
|
||||
if err := videoTrack.SetVideoID(videoID); err != nil {
|
||||
changeVideo: func(bitrate int) error {
|
||||
if err := videoTrack.SetBitrate(bitrate); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
videoID := videoTrack.stream.ID()
|
||||
manager.metrics.SetVideoID(session, videoID)
|
||||
return nil
|
||||
},
|
||||
// TODO: Refactor.
|
||||
videoId: func() string {
|
||||
return videoTrack.stream.ID()
|
||||
},
|
||||
setPaused: func(isPaused bool) {
|
||||
videoTrack.SetPaused(isPaused)
|
||||
audioTrack.SetPaused(isPaused)
|
||||
@ -418,7 +424,9 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin
|
||||
connection.Close()
|
||||
case webrtc.PeerConnectionStateClosed:
|
||||
session.SetWebRTCConnected(peer, false)
|
||||
video.RemoveReceiver(videoTrack)
|
||||
if err = video.RemoveReceiver(videoTrack); err != nil {
|
||||
logger.Err(err).Msg("failed to remove video receiver")
|
||||
}
|
||||
audioTrack.RemoveStream()
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user