From c9fce3501856179da22a8681808443a4e7559a30 Mon Sep 17 00:00:00 2001 From: Chaitanya Mankala Date: Thu, 31 Oct 2024 17:00:15 +0530 Subject: [PATCH 1/2] [update] seek time and Change Playback speed PLAY functions --- format/rtspv2/client.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/format/rtspv2/client.go b/format/rtspv2/client.go index d6d4816..eea4c13 100644 --- a/format/rtspv2/client.go +++ b/format/rtspv2/client.go @@ -387,6 +387,36 @@ func ReplayDial(options RTSPClientOptions, startTime string) (*RTSPClient, error return client, nil } +func (client *RTSPClient) SeekTime(startTime string) error { + // Prepare new PLAY request headers + headers := map[string]string{ + "Require": "onvif-replay", + "Range": "clock=" + startTime + "-"} + // 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) + } + 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 From cec6360a0a72226405db600138189771f73a6c7a Mon Sep 17 00:00:00 2001 From: Chaitanya Mankala Date: Tue, 24 Dec 2024 16:29:55 +0530 Subject: [PATCH 2/2] [fix] Range needs endtime too --- format/rtspv2/client.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/format/rtspv2/client.go b/format/rtspv2/client.go index eea4c13..afb2248 100644 --- a/format/rtspv2/client.go +++ b/format/rtspv2/client.go @@ -387,14 +387,17 @@ func ReplayDial(options RTSPClientOptions, startTime string) (*RTSPClient, error return client, nil } -func (client *RTSPClient) SeekTime(startTime string) error { +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", - "Range": "clock=" + startTime + "-"} + "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