50 lines
916 B
Go
50 lines
916 B
Go
package h264
|
|
|
|
import (
|
|
"NanoKVM-Server/common"
|
|
"time"
|
|
|
|
"github.com/pion/webrtc/v4/pkg/media"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func send() {
|
|
screen := common.GetScreen()
|
|
common.CheckScreen()
|
|
|
|
fps := screen.FPS
|
|
duration := time.Second / time.Duration(fps)
|
|
|
|
ticker := time.NewTicker(duration)
|
|
defer ticker.Stop()
|
|
|
|
vision := common.GetKvmVision()
|
|
for range ticker.C {
|
|
if !isSending && len(trackMap) == 0 {
|
|
return
|
|
}
|
|
|
|
data, result := vision.ReadH264(screen.Width, screen.Height, screen.BitRate)
|
|
if result < 0 || len(data) == 0 {
|
|
continue
|
|
}
|
|
|
|
sample := media.Sample{
|
|
Data: data,
|
|
Duration: duration,
|
|
}
|
|
|
|
for _, track := range trackMap {
|
|
if err := track.WriteSample(sample); err != nil {
|
|
log.Errorf("failed to send h264 data: %s", err)
|
|
}
|
|
}
|
|
|
|
if screen.FPS != fps {
|
|
fps = screen.FPS
|
|
duration = time.Second / time.Duration(fps)
|
|
ticker.Reset(duration)
|
|
}
|
|
}
|
|
}
|