fix webcam
This commit is contained in:
@@ -96,6 +96,23 @@ var (
|
||||
webcamActive *webcamState
|
||||
)
|
||||
|
||||
func activeWebcamFrameFPS(requested int, captureFPS float64) int {
|
||||
actual := int(captureFPS + 0.5)
|
||||
if requested < 1 {
|
||||
requested = actual
|
||||
}
|
||||
if actual > 0 && requested > actual {
|
||||
requested = actual
|
||||
}
|
||||
if requested < 1 {
|
||||
requested = 30
|
||||
}
|
||||
if requested > 120 {
|
||||
requested = 120
|
||||
}
|
||||
return requested
|
||||
}
|
||||
|
||||
func NowWebcam(ctx context.Context, env *rt.Env) error {
|
||||
if ctx.Err() != nil {
|
||||
return nil
|
||||
@@ -122,6 +139,8 @@ func NowWebcam(ctx context.Context, env *rt.Env) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
frameFPS := activeWebcamFrameFPS(env.WebcamFPS, state.captureFPS)
|
||||
|
||||
quality := env.WebcamQuality
|
||||
codec := env.WebcamCodec
|
||||
outFormat := format
|
||||
@@ -158,7 +177,7 @@ func NowWebcam(ctx context.Context, env *rt.Env) error {
|
||||
Type: "frame",
|
||||
Header: wire.FrameHeader{
|
||||
Monitor: deviceIndex,
|
||||
FPS: 0,
|
||||
FPS: frameFPS,
|
||||
Format: outFormat,
|
||||
Webcam: true,
|
||||
},
|
||||
@@ -168,14 +187,7 @@ func NowWebcam(ctx context.Context, env *rt.Env) error {
|
||||
return nil
|
||||
}
|
||||
if outFormat == "h264" && webrtcpub.IsActive(webrtcpub.KindWebcam) {
|
||||
fps := env.WebcamFPS
|
||||
if fps <= 0 {
|
||||
fps = 30
|
||||
}
|
||||
dur := time.Second / time.Duration(fps)
|
||||
if dur <= 0 {
|
||||
dur = 33 * time.Millisecond
|
||||
}
|
||||
dur := time.Second / time.Duration(frameFPS)
|
||||
if werr := webrtcpub.WriteH264(webrtcpub.KindWebcam, frameBytes, dur); werr != nil {
|
||||
log.Printf("webrtc: write webcam h264 failed: %v", werr)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user