gst-plugins-rs/net/rtsp
Nirbheek Chauhan 975556c06b rtspsrc2: Allow a SETUP response without a Transports header
If we only send a single Transport in the Transports header, then the
server is allowed to omit it in the response. This has some strange
consequences for UDP transport: specifically, we have no idea what
addr/port we will get the packets from.

In those cases, we connect() on the socket when we receive the first
packet, so we can send RTCP RRs, and also so we can ensure that we
ignore data from other addresses.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1425>
2024-02-07 20:29:23 +05:30
..
src rtspsrc2: Allow a SETUP response without a Transports header 2024-02-07 20:29:23 +05:30
build.rs New RTSP source plugin with live streaming support 2024-02-07 20:29:18 +05:30
Cargo.toml New RTSP source plugin with live streaming support 2024-02-07 20:29:18 +05:30
LICENSE-MPL-2.0 New RTSP source plugin with live streaming support 2024-02-07 20:29:18 +05:30
README.md rtspsrc2: Allow a SETUP response without a Transports header 2024-02-07 20:29:23 +05:30

rtspsrc2

Rust rewrite of rtspsrc, with the purpose of fixing the fundamentally broken architecture of rtspsrc. There are some major problems with rtspsrc:

  1. Element states are linked to RTSP states, which causes unfixable glitching and issues, especially in shared RTSP media
  2. The command loop is fundamentally broken and buggy, which can cause RTSP commands such as SET_PARAMETER and GET_PARAMETER to be lost
  3. The combination of the above two causes unfixable deadlocks when doing state changes due to external factors such as server state, or when seeking
  4. Parsing of untrusted RTSP messages from the network was done in C with the GstRTSPMessage API.
  5. Parsing of untrusted SDP from the network was done in C with the GstSDPMessage API

Implemented features

  • RTSP 1.0 support
  • Lower transports: TCP, UDP, UDP-Multicast
  • RTCP SR and RTCP RR
  • RTCP-based A/V sync
  • Lower transport selection and priority (NEW!)
    • Also supports different lower transports for each SETUP

Missing features

Roughly in order of priority:

  • Credentials support
  • TLS/TCP support
  • NAT hole punching
  • Allocate a buffer pool for receiving + pushing UDP packets
  • Allow ignoring specific streams (SDP medias)
    • Currently all available source pads must be linked
  • SRTP support
  • HTTP tunnelling
  • Proxy support
  • GET_PARAMETER / SET_PARAMETER
  • Make TCP connection optional when using UDP transport
    • Or TCP reconnection if UDP has not timed out
  • Parse SDP rtcp-fb attributes
  • Parse SDP ssrc attributes
  • Clock sync support, such as RFC7273
  • PAUSE support with VOD
  • Seeking support with VOD
  • ONVIF backchannel support
  • ONVIF trick mode support
  • RTSP 2 support (no servers exist at present)

Missing configuration properties

These are some misc rtspsrc props that haven't been implemented in rtspsrc2 yet:

  • latency
  • do-rtx
  • do-rtcp
  • iface
  • user-agent

Maintenance and future cleanup

  • Refactor SDP → Caps parsing into a module
  • Test with market RTSP cameras
    • Currently, only live555 and gst-rtsp-server have been tested
  • Add tokio-console and tokio tracing support