mirror of
https://github.com/krishpranav/remote-desktop.git
synced 2025-09-26 20:21:10 +08:00
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package rtc
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/krishpranav/remote-desktop/encoders"
|
|
"github.com/krishpranav/remote-desktop/rdisplay"
|
|
)
|
|
|
|
type RemoteScreenService struct {
|
|
stunServer string
|
|
videoService rdisplay.Service
|
|
encodingService encoders.Service
|
|
}
|
|
|
|
func NewRemoteScreenService(stun string, video rdisplay.Service, enc encoders.Service) Service {
|
|
return &RemoteScreenService{
|
|
stunServer: stun,
|
|
videoService: video,
|
|
encodingService: enc,
|
|
}
|
|
}
|
|
|
|
func hasElement(haystack []string, needle string) bool {
|
|
for _, item := range haystack {
|
|
if item == needle {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (svc *RemoteScreenService) CreateRemoteScreenConnection(screenIx int, fps int) (RemoteScreenConnection, error) {
|
|
screens, err := svc.videoService.Screens()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if screenIx < 0 || screenIx > len(screens) {
|
|
screenIx = 0
|
|
}
|
|
screen := screens[screenIx]
|
|
screenGrabber, err := svc.videoService.CreateScreenGrabber(screen, fps)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(screens) == 0 {
|
|
return nil, fmt.Errorf("No available screens")
|
|
}
|
|
|
|
rtcPeer := newRemoteScreenPeerConn(svc.stunServer, screenGrabber, svc.encodingService)
|
|
return rtcPeer, nil
|
|
}
|