mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 23:26:54 +08:00
client: add clientconn.Seek()
This commit is contained in:
@@ -19,12 +19,12 @@ Features:
|
|||||||
* Read streams from servers with UDP, TCP or TLS (RTSPS)
|
* Read streams from servers with UDP, TCP or TLS (RTSPS)
|
||||||
* Switch protocol automatically (switch to TCP in case of server error or UDP timeout)
|
* Switch protocol automatically (switch to TCP in case of server error or UDP timeout)
|
||||||
* Read only selected tracks of a stream
|
* Read only selected tracks of a stream
|
||||||
* Pause reading without disconnecting from the server
|
* Pause or seek without disconnecting from the server
|
||||||
* Generate RTCP receiver reports automatically
|
* Generate RTCP receiver reports automatically
|
||||||
* Publish
|
* Publish
|
||||||
* Publish streams to servers with UDP, TCP or TLS (RTSPS)
|
* Publish streams to servers with UDP, TCP or TLS (RTSPS)
|
||||||
* Switch protocol automatically (switch to TCP in case of server error)
|
* Switch protocol automatically (switch to TCP in case of server error)
|
||||||
* Pause publishing without disconnecting from the server
|
* Pause without disconnecting from the server
|
||||||
* Generate RTCP sender reports automatically
|
* Generate RTCP sender reports automatically
|
||||||
* Server
|
* Server
|
||||||
* Handle requests from clients
|
* Handle requests from clients
|
||||||
|
@@ -1826,6 +1826,32 @@ func TestClientReadSeek(t *testing.T) {
|
|||||||
}.Write(bconn.Writer)
|
}.Write(bconn.Writer)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
req, err = readRequest(bconn.Reader)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, base.Pause, req.Method)
|
||||||
|
|
||||||
|
err = base.Response{
|
||||||
|
StatusCode: base.StatusOK,
|
||||||
|
}.Write(bconn.Writer)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
req, err = readRequest(bconn.Reader)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, base.Play, req.Method)
|
||||||
|
|
||||||
|
err = ra.Read(req.Header["Range"])
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, headers.Range{
|
||||||
|
Value: &headers.RangeNPT{
|
||||||
|
Start: headers.RangeNPTTime(6400 * time.Millisecond),
|
||||||
|
},
|
||||||
|
}, ra)
|
||||||
|
|
||||||
|
err = base.Response{
|
||||||
|
StatusCode: base.StatusOK,
|
||||||
|
}.Write(bconn.Writer)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
req, err = readRequest(bconn.Reader)
|
req, err = readRequest(bconn.Reader)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.Teardown, req.Method)
|
require.Equal(t, base.Teardown, req.Method)
|
||||||
@@ -1868,5 +1894,10 @@ func TestClientReadSeek(t *testing.T) {
|
|||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// asdasdasd
|
_, err = conn.Seek(&headers.Range{
|
||||||
|
Value: &headers.RangeNPT{
|
||||||
|
Start: headers.RangeNPTTime(6400 * time.Millisecond),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
@@ -1574,6 +1574,16 @@ func (cc *ClientConn) Pause() (*base.Response, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Seek asks the server to re-start the stream from a specific timestamp.
|
||||||
|
func (cc *ClientConn) Seek(ra *headers.Range) (*base.Response, error) {
|
||||||
|
_, err := cc.Pause()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return cc.Play(ra)
|
||||||
|
}
|
||||||
|
|
||||||
// ReadFrames starts reading frames.
|
// ReadFrames starts reading frames.
|
||||||
func (cc *ClientConn) ReadFrames(onFrame func(int, StreamType, []byte)) error {
|
func (cc *ClientConn) ReadFrames(onFrame func(int, StreamType, []byte)) error {
|
||||||
cc.readCBMutex.Lock()
|
cc.readCBMutex.Lock()
|
||||||
|
Reference in New Issue
Block a user