# rtsp **Repository Path**: waiot/rtsp ## Basic Information - **Project Name**: rtsp - **Description**: Real Time Streaming Protocol - **Primary Language**: Go - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-03-30 - **Last Updated**: 2026-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RTSP Go 语言实现的 RTSP 客户端库,支持 RTSP、RTSPS、RTSPU、HTTP、HTTPS 协议。 ## 功能特性 ### 协议支持 - **传输协议**: RTSP over TCP、RTSP over UDP、RTSP over TLS - **隧道模式**: RTSP over HTTP、HTTPS - **代理支持**: HTTP CONNECT、SOCKS5 代理 ### 视频编解码 - H.264 / H.265 / H.266 - AV1、VP8、VP9 - MJPEG、MPEG4、MPEG2 ### 音频编解码 - AAC、G.711、G.722、G.726 - MP3、Opus、PCM ### 核心功能 - 支持 Basic、Digest 认证 - 支持 DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN 等 RTSP 方法 - 支持 RTP/RTCP 接收与处理 - 支持媒体录制(原始码流、FMP4 格式) - 支持分片录制策略(按时间、按大小、按关键帧) - 支持事件回调(RTP 数据、状态变化、错误告警) - 支持多种配置方式(YAML、TOML、JSON) ## 项目结构 ``` . ├── cmd/ # CLI 命令行工具 │ ├── generater.go # 配置生成器 │ ├── information.go # 信息查询 │ ├── initialize.go # 初始化 │ ├── listen.go # 监听命令 │ ├── monitor.go # 监控命令 │ ├── parser.go # 解析器 │ ├── root.go # 根命令 │ ├── start.go # 启动命令 │ ├── stop.go # 停止命令 │ └── version.go # 版本信息 ├── internal/ # 内部包 │ ├── client/ # 内部客户端实现 │ ├── common/ # 公共定义 │ ├── config/ # 配置管理 │ └── server/ # 服务端(未实现) ├── pkg/ # 核心包 │ ├── auth/ # 认证模块 │ ├── client/ # RTSP 客户端 │ ├── config/ # 客户端配置 │ ├── header/ # RTSP/HTTP 头 │ ├── media/ # 媒体处理 │ ├── message/ # 消息封装 │ ├── record/ # 录制功能 │ ├── rtsp/ # RTSP 协议定义 │ ├── server/ # 服务端(未实现) │ ├── session/ # 会话管理 │ ├── transport/ # 传输层 │ └── utils/ # 工具函数 ├── examples/ # 示例代码 │ └── client/ # 客户端示例 ├── configs/ # 配置文件 └── docs/ # 协议文档 ``` ## 快速开始 ### 安装 ```bash go get gitee.com/waiot/rtsp ``` ### 基本使用 ```go package main import ( "context" "log" "os" "os/signal" "syscall" "time" "gitee.com/waiot/rtp/rtp" "gitee.com/waiot/rtsp/pkg/client" "gitee.com/waiot/rtsp/pkg/config" "gitee.com/waiot/rtsp/pkg/rtsp" ) func main() { id := "stream1" url := "rtsp://admin:password@192.168.0.100:554/Streaming/Channels/101" ctx, cancel := context.WithCancel(context.Background()) defer cancel() cfg, err := config.New(id, rtsp.RTSP_VERSION_1_0, rtsp.HTTP_VERSION_1_1, url, "", false, nil, -1, -1, -1, 5*time.Second) if err != nil { log.Fatal(err) } c := client.New(cfg). OnRTP(func(id string, track *rtsp.MediaTrack, pkt *rtp.Packet) { log.Printf("RTP: MediaType=%s, Codec=%s, SSRC=%x, Length=%d", track.MediaType, track.Codec, pkt.Header.SSRC, len(pkt.Payload)) }). OnState(func(id string, oldState, newState rtsp.State) { log.Printf("State: %s -> %s", rtsp.States[oldState], rtsp.States[newState]) }). OnError(func(id string, err error) { log.Printf("Error: %v", err) }) defer c.Stop() signalCh := make(chan os.Signal, 1) signal.Notify(signalCh, syscall.SIGINT, syscall.SIGTERM) if err := c.Start(ctx); err != nil { log.Fatal(err) } <-signalCh } ``` ### 带录制功能 ```go cfg, err := config.NewRTSPClientConfig(conf) if err != nil { log.Fatal(err) } c := client.New(cfg). OnRTP(func(id string, track *rtsp.MediaTrack, pkt *rtp.Packet) { // 处理 RTP 数据包 }). OnState(func(id string, oldState, newState rtsp.State) { log.Printf("State: %s -> %s", rtsp.States[oldState], rtsp.States[newState]) }) // 内部 client 包会自动处理录制逻辑 ``` ## 配置示例 ### YAML 配置文件 ```yaml mode: debug language: zh data_save_path: /data/record log_save_path: /data/logs clients: - id: stream1 url: rtsp://admin:password@192.168.0.100:554/Streaming/Channels/101 record: enable: true save_path: /data/record/stream1 formats: - raw - fmp4 segment: strategy: time duration: 300s max_size: 100 log: level: debug console: true file: true ``` ## API 概览 ### 客户端方法 | 方法 | 说明 | |------|------| | `New(cfg)` | 创建新客户端 | | `OnRTP(fn)` | 注册 RTP 数据回调 | | `OnRTCP(fn)` | 注册 RTCP 数据回调 | | `OnState(fn)` | 注册状态变化回调 | | `OnSignal(fn)` | 注册信令交互回调 | | `OnEvent(fn)` | 注册事件回调 | | `OnWarn(fn)` | 注册警告回调 | | `OnError(fn)` | 注册错误回调 | | `Start(ctx)` | 启动客户端连接 | | `Stop()` | 停止客户端连接 | | `Play()` | 发送 PLAY 请求 | | `Pause()` | 发送 PAUSE 请求 | | `State()` | 获取当前状态 | ### 会话状态 - `Init`: 初始状态 - `Ready`: 就绪状态 - `Playing`: 播放中 - `Recording`: 录制中 - `Paused`: 已暂停 ## 依赖 - Go 1.26+ - gitee.com/waiot/rtp - gitee.com/waiot/sdp - github.com/spf13/cobra - github.com/spf13/viper - go.uber.org/zap ## 协议文档 参考以下标准协议文档: - RFC 2326 - Real Time Streaming Protocol (RTSP 1.0) - RFC 7826 - Real-Time Streaming Protocol Version 2.0 (RTSP 2.0) - RFC 3550 - RTP: A Transport Protocol for Real-Time Applications - RFC 3551 - RTP Profile for Audio and Video Conferences - RFC 6184 - RTP Payload Format for H.264 Video - RFC 7798 - RTP Payload Format for HEVC - RFC 3984 - RTP Payload Format for H.264 ## License MIT License