Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RTSP support #216

Open
8 tasks
gavv opened this issue Jun 6, 2019 · 3 comments
Open
8 tasks

RTSP support #216

gavv opened this issue Jun 6, 2019 · 3 comments

Comments

@gavv
Copy link
Member

gavv commented Jun 6, 2019

Implement RTSP support and use it for session negotiation (#34).

Ideally, both RTSP/1 and RTSP/2 should be supported.

RTSP support will consist of the following:

  • implement RTSP handler for roc_ctl (Implement roc_ctl module #214)
  • allow sender and receiver in the API tools to act as a server or a client (Refine roc_sender/roc_receiver API #263)
  • if sender or receiver is a server, support serving an RTSP endpoint
  • if sender or receiver is a client, support connecting to an RTSP endpoint
  • implement session negotiation: session parameters should be passed via RTSP; source and repair endpoints should be allocated dynamically and also passed via RTSP
  • support RTSP endpoints in tools
  • support RTSP endpoints in API
  • support RTSP endpoints in PulseAudio modules
@gavv gavv added this to the 0.2.0 milestone Jun 6, 2019
@gavv gavv added this to Frontlog in kanban board Jun 6, 2019
@gavv gavv moved this from Frontlog to In progress in kanban board Aug 22, 2019
@gavv gavv moved this from In progress to Frontlog in kanban board Aug 22, 2019
@gavv gavv moved this from Frontlog to In progress in kanban board Aug 22, 2019
@gavv gavv moved this from In progress to Frontlog in kanban board Aug 22, 2019
@gavv
Copy link
Member Author

gavv commented Sep 30, 2019

Features

Initially, we will implement a minimal RTSP client and server supporting only live sessions (i.e. no seeking, scaling, ranges, and pipelining).

The requirements to it are described here: https://tools.ietf.org/html/rfc2326#page-85

We should implement at least these methods:

  • OPTIONS
  • DESCRIBE
  • ANNOUNCE
  • SETUP
  • TEARDOWN
  • RECORD
  • PLAY

In the initial implementation we should be able to parse, or generate, or both (depending on the field) the following header fields:

  • Accept
  • Allow
  • Content-Base
  • Content-Encoding
  • Content-Length
  • Content-Type
  • CSeq
  • Connection
  • Require
  • RTP-Info
  • Session
  • Server
  • Transport
  • Unsupported
  • User-Agent

Ideally, we should also support (maybe later):

  • pausing (client and server)
  • redirects, including REDIRECT method and Location/Content-Location fields (on client)
  • retries, including Retry-After field (on client and server)
  • If-Match/If-Modified-Since/Last-Modified/etag (at least on server)

We will implement a single content encoding: application/sdp.

We will implement at least RTP/AVP transport, and probably also RTP/AVP/TCP (interleaved) transport.

We will implement at least "rtsp://" scheme, and probably also "rtspu://" scheme.

The initial implementation will not provide encryption.

@gavv
Copy link
Member Author

gavv commented Sep 30, 2019

Methods usage

Sender connects to receiver (sender is client, receiver is server):

  • C->S ANNOUNCE
  • C->S SETUP
  • C->S RECORD
  • C->S TEARDOWN

Receiver connects to sender (receiver is client, sender is server):

  • C->S DESCRIBE
  • C->S SETUP
  • C->S PLAY
  • C->S TEARDOWN

@gavv
Copy link
Member Author

gavv commented Jul 8, 2020

Negotiated parameters

  • addresses
  • rtpmap (dynamic payload types)
  • fssi (FEC-scheme specific information)

@gavv gavv mentioned this issue Jul 8, 2020
@gavv gavv removed this from the 0.2.0 milestone Dec 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

No branches or pull requests

1 participant