diff --git a/format/rtspv2/client.go b/format/rtspv2/client.go index d6d4816..afb2248 100644 --- a/format/rtspv2/client.go +++ b/format/rtspv2/client.go @@ -387,6 +387,39 @@ func ReplayDial(options RTSPClientOptions, startTime string) (*RTSPClient, error return client, nil } +func (client *RTSPClient) SeekTime(startTime string, scale float64, endTime string) error { + // Prepare new PLAY request headers + scaleStr := fmt.Sprintf("%.6f", scale) + headers := map[string]string{ + "Require": "onvif-replay", + "Scale": scaleStr, + "Range": "clock=" + startTime + "-" + endTime} + // Send the PLAY request with the new scale + err := client.request(PLAY, headers, client.control, false, true) + if err != nil { + client.Println("Failed to Change SEEKTIME", err) + return fmt.Errorf("failed to change speed: %w", err) + } + return nil +} + +func (client *RTSPClient) ChangeSpeed(scale float64) error { + // Convert scale to string format + scaleStr := fmt.Sprintf("%.6f", scale) + // Prepare new PLAY request headers + headers := map[string]string{ + "Require": "onvif-replay", + "Scale": scaleStr, + "Speed": "1.000000"} + // Send the PLAY request with the new scale + err := client.request(PLAY, headers, client.control, false, true) + if err != nil { + return fmt.Errorf("failed to change speed: %w", err) + } + client.Println("Speed changed to scale:", scale) + return nil +} + func (client *RTSPClient) ControlTrack(track string) string { if strings.Contains(track, "rtsp://") { return track