📚 gortsplib - Awesome Go Library for Video

Go Gopher mascot for gortsplib

Pure Go RTSP server and client library

🏷️ Video
📂 Video
0 stars
View on GitHub 🔗

Detailed Description of gortsplib

gortsplib

Test Lint Go Report Card CodeCov PkgGoDev

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

Go ≥ 1.25 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

formatdocumentationencoder and decoder available
AV1link:heavy_check_mark:
VP9link:heavy_check_mark:
VP8link:heavy_check_mark:
H265link:heavy_check_mark:
H264link:heavy_check_mark:
MPEG-4 Video (H263, Xvid)link:heavy_check_mark:
MPEG-1/2 Videolink:heavy_check_mark:
M-JPEGlink:heavy_check_mark:

Audio

formatdocumentationencoder and decoder available
Opuslink:heavy_check_mark:
Vorbislink
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-3link:heavy_check_mark:
Speexlink
G726link
G722link:heavy_check_mark:
G711 (PCMA, PCMU)link:heavy_check_mark:
LPCMlink:heavy_check_mark:

Other

formatdocumentationencoder and decoder available
MPEG-TSlink:heavy_check_mark:
KLVlink:heavy_check_mark:

Specifications

namearea
RFC2326, RTSP 1.0protocol
RFC7826, RTSP 2.0protocol
ONVIF Streaming Specification 23.06protocol
RFC8866, SDP: Session Description ProtocolSDP
RFC4567, Key Management Extensions for Session Description Protocol (SDP) and Real Time Streaming Protocol (RTSP)secure variants
RFC3830, MIKEY: Multimedia Internet KEYingsecure variants
RTP Payload Format For AV1 (v1.0)payload formats / AV1
RFC9628, RTP Payload Format for VP9 Videopayload formats / VP9
RFC7741, RTP Payload Format for VP8 Videopayload formats / VP8
RFC7798, RTP Payload Format for High Efficiency Video Coding (HEVC)payload formats / H265
RFC6184, RTP Payload Format for H.264 Videopayload formats / H264
RFC3640, RTP Payload Format for Transport of MPEG-4 Elementary Streamspayload formats / MPEG-4 audio, MPEG-4 video
RFC2250, RTP Payload Format for MPEG1/MPEG2 Videopayload formats / MPEG-1/2 video, MPEG-1/2 audio, MPEG-TS
RFC2435, RTP Payload Format for JPEG-compressed Videopayload formats / M-JPEG
RFC7587, RTP Payload Format for the Opus Speech and Audio Codecpayload formats / Opus
Multiopus in libwebrtcpayload formats / Opus
RFC5215, RTP Payload Format for Vorbis Encoded Audiopayload formats / Vorbis
RFC4184, RTP Payload Format for AC-3 Audiopayload formats / AC-3
RFC6416, RTP Payload Format for MPEG-4 Audio/Visual Streamspayload formats / MPEG-4 audio LATM
RFC5574, RTP Payload Format for the Speex Codecpayload formats / Speex
RFC3551, RTP Profile for Audio and Video Conferences with Minimal Controlpayload formats / G726, G722, G711, LPCM
RFC3190, RTP Payload Format for 12-bit DAT Audio and 20- and 24-bit Linear Sampled Audiopayload formats / LPCM
RFC6597, RTP Payload Format for Society of Motion Picture and Television Engineers (SMPTE) ST 336 Encoded Datapayload formats / KLV
Codec specificationscodecs
Golang project layoutproject layout

Related projects