Profile
Back to NewsBack
GitHub Trending 4 min
Reader Mode
bluenviron/gortsplib: RTSP client and server library for the Go programming language

bluenviron/gortsplib: RTSP client and server library for the Go programming language

19 hours ago

gortsplib

Test</a> Lint</a> CodeCov</a> PkgGoDev</a>

RTSP client and server library for the Go programming language, written for MediaMTX.

Go ≥ 1.26 is required.

Features:

  • Client
- Support secure protocol variants (RTSPS, SRTP, SRTCP) - Support tunneling (RTSP-over-HTTP, RTSP-over-WebSocket) - Query servers about available media streams - Read media streams from a server ("play") - Read streams with the UDP, UDP-multicast or TCP transport protocol - Switch transport protocol automatically - Read selected media streams - Pause or seek without disconnecting from the server - Write to ONVIF back channels - Get PTS (presentation timestamp) of inbound packets - Get NTP (absolute timestamp) of inbound packets - Write media streams to a server ("record") - Write streams with the UDP or TCP transport protocol - Switch transport protocol automatically - Pause without disconnecting from the server
  • Server
- Support secure protocol variants (RTSPS, SRTP, SRTCP) - Support tunneling (RTSP-over-HTTP, RTSP-over-WebSocket) - Handle requests from clients - Validate client credentials - Read media streams from clients ("record") - Read streams with the UDP or TCP transport protocol - Get PTS (presentation timestamp) of inbound packets - Get NTP (absolute timestamp) of inbound packets - Serve media streams to clients ("play") - Write streams with the UDP, UDP-multicast or TCP transport protocol - Compute and provide SSRC, RTP-Info to clients - Read ONVIF back channels
  • Utilities
- Parse RTSP elements - Encode/decode RTP packets into/from codec-specific frames

Table of contents

Examples

API Documentation

Click to open the API Documentation

RTP Payload Formats

In RTSP, media streams are transmitted by using RTP packets, which are encoded in a specific, codec-dependent, format. This library supports the following formats:

Video

| format | documentation | encoder and decoder available | | ------------------------- | ----------------------------------------------------------------------------------- | ----------------------------- | | AV1 | link | :heavy_check_mark: | | VP9 | link | :heavy_check_mark: | | VP8 | link | :heavy_check_mark: | | H265 | link | :heavy_check_mark: | | H264 | link | :heavy_check_mark: | | MPEG-4 Video (H263, Xvid) | link | :heavy_check_mark: | | MPEG-1/2 Video | link | :heavy_check_mark: | | M-JPEG | link | :heavy_check_mark: |

Audio

| format | documentation | encoder and decoder available | | ---------------------------- | --------------------------------------------------------------------------------------- | ----------------------------- | | Opus | link | :heavy_check_mark: | | Vorbis | link | | | MPEG-4 Audio (AAC) | link | :heavy_check_mark: | | MPEG-4 Audio LATM (AAC-LATM) | link | :heavy_check_mark: | | MPEG-1/2 Audio (MP3) | link | :heavy_check_mark: | | AC-3 | link | :heavy_check_mark: | | Speex | link | | | G726 | link | | | G722 | link | :heavy_check_mark: | | G711 (PCMA, PCMU) | link | :heavy_check_mark: | | LPCM | link | :heavy_check_mark: |

Other

| format | documentation | encoder and decoder available | | ------- | ------------------------------------------------------------------------------- | ----------------------------- | | MPEG-TS | link | :heavy_check_mark: | | KLV | link | :heavy_check_mark: |

Specifications

| name | area | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | | RFC2326, RTSP 1.0 | protocol | | RFC7826, RTSP 2.0 | protocol | | ONVIF Streaming Specification 23.06 | protocol | | RFC8866, SDP: Session Description Protocol | SDP | | RFC4567, Key Management Extensions for Session Description Protocol (SDP) and Real Time Streaming Protocol (RTSP) | secure variants | | RFC3830, MIKEY: Multimedia Internet KEYing | secure variants | | RFC4568, SDP Security Descriptions for Media Streams | secure variants | | RFC2069, An Extension to HTTP : Digest Access Authentication | digest authentication | | RFC7616, HTTP Digest Access Authentication | digest authentication | | RTP Payload Format For AV1 (v1.0) | payload formats / AV1 | | RFC9628, RTP Payload Format for VP9 Video | payload formats / VP9 | | RFC7741, RTP Payload Format for VP8 Video | payload formats / VP8 | | RFC7798, RTP Payload Format for High Efficiency Video Coding (HEVC) | payload formats / H265 | | RFC6184, RTP Payload Format for H.264 Video | payload formats / H264 | | RFC3640, RTP Payload Format for Transport of MPEG-4 Elementary Streams | payload formats / MPEG-4 audio, MPEG-4 video | | RFC2250, RTP Payload Format for MPEG1/MPEG2 Video | payload formats / MPEG-1/2 video, MPEG-1/2 audio, MPEG-TS | | RFC2435, RTP Payload Format for JPEG-compressed Video | payload formats / M-JPEG | | RFC7587, RTP Payload Format for the Opus Speech and Audio Codec | payload formats / Opus | | Multiopus in libwebrtc | payload formats / Opus | | RFC5215, RTP Payload Format for Vorbis Encoded Audio | payload formats / Vorbis | | RFC4184, RTP Payload Format for AC-3 Audio | payload formats / AC-3 | | RFC6416, RTP Payload Format for MPEG-4 Audio/Visual Streams | payload formats / MPEG-4 audio LATM | | RFC5574, RTP Payload Format for the Speex Codec | payload formats / Speex | | RFC3551, RTP Profile for Audio and Video Conferences with Minimal Control | payload formats / G726, G722, G711, LPCM | | RFC3190, RTP Payload Format for 12-bit DAT Audio and 20- and 24-bit Linear Sampled Audio | payload formats / LPCM | | RFC6597, RTP Payload Format for Society of Motion Picture and Television Engineers (SMPTE) ST 336 Encoded Data | payload formats / KLV | | Codec specifications | codecs | | Golang project layout | project layout |

Related projects

Chat with me