Skip to content

Repository files navigation

Cyaim.RTSPClient

NuGet VersionNuGet DownloadsLicense.NET

中文 | English


中文

简介

Cyaim.RTSPClient 是一个功能完整的 C# RTSP 客户端库,支持完整的 RTSP 协议、RTP/RTCP 传输、H.264/H.265 视频流、多种音频编码以及 ONVIF 回传通道。支持 NVIDIA NVENC/NVDEC、Intel QSV 等硬件加速。

功能特性

功能说明
RTSP 协议OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, GET_PARAMETER, SET_PARAMETER, ANNOUNCE, RECORD
传输模式TCP Interleaved, UDP Unicast
视频编码H.264, H.265 (HEVC), VP8, VP9, MJPEG
音频编码G.711A/U, G.722, G.726, G.729, AAC, Opus, AMR, Speex, Vorbis, MP3
硬件加速NVIDIA NVENC/NVDEC, Intel QSV, AMD AMF, VA-API, VideoToolbox, D3D11VA
认证方式Digest 认证 (RFC 2617)
心跳保活自动 OPTIONS/GET_PARAMETER 心跳
自动重连可配置的重连策略
异步流Channel<T> 异步数据流
ONVIF回传通道支持

安装

# 核心库
dotnet add package Cyaim.RTSPClient
# FFmpeg 视频编解码器 (可选,支持硬件加速)
dotnet add package Cyaim.RTSPClient.Codecs.FFmpeg.Video
# FFmpeg 音频编解码器 (可选)
dotnet add package Cyaim.RTSPClient.Codecs.FFmpeg.Audio

快速开始

基本用法(推荐:一键拉流)

usingCyaim.RTSPClient;usingCyaim.RTSPClient.Session;varconfig=newRTSPSessionConfig{Url="rtsp://192.168.1.127:554/live",Username="admin",Password="admin",AutoReconnect=true// 断线后自动重连并恢复 SETUP/PLAY};awaitusingvarsession=newRTSPSession(config);session.StateChanged+=(s,e)=>Console.WriteLine($"状态变更: {e.OldState} -> {e.NewState}");session.Reconnected+=(s,e)=>Console.WriteLine("已自动重连");// 一键完成 连接 → OPTIONS → DESCRIBE(自动认证)→ SETUP 全部轨道 → PLAYawaitsession.StartAsync();// 按轨道读取原始 RTP 包(track 0 通常是视频)varreader=session.GetRtpReader(trackId:0);while(awaitreader.WaitToReadAsync()){while(reader.TryRead(outvarpacket)){Console.WriteLine($"Seq: {packet.SequenceNumber}, TS: {packet.Timestamp}");}}

视频帧接收(解包后的完整 NAL)

// GetMediaFrameReader 自动根据 SDP 选择 H.264/H.265 解包器,// 并注入 sprop-parameter-sets 中的 SPS/PPSvarframes=session.GetMediaFrameReader(trackId:0);while(awaitframes.WaitToReadAsync()){while(frames.TryRead(outvarframe)){// frame.Data = 完整 NAL;frame.IsKeyFrame;frame.IsAccessUnitEnd = 帧边界Console.WriteLine($"NAL: {frame.Data.Length} bytes, key={frame.IsKeyFrame}");}}

手动控制(低层 API)

awaitusingvarsession=newRTSPSession("rtsp://192.168.1.127:554/live");session.UserName="admin";session.Password="admin";// 401 时自动携带凭据重试(Digest qop=auth / Basic)awaitsession.ConnectAsync();awaitsession.OptionsAsync();awaitsession.DescribeAsync();// 按 SDP 控制属性 SETUP(TransportMode 枚举重载自动分配 interleaved 通道)varvideo=session.SDP!.GetVideoMedia();awaitsession.SetupAsync(video!.ControlUri!,TransportMode.TcpInterleaved);awaitsession.PlayAsync();session.DataReceived+=(s,e)=>{// 注意:事件在独立泵线程触发,处理慢不会阻塞网络接收(有界队列,超限丢最旧包)};

硬件加速解码

usingCyaim.RTSPClient.Codecs.FFmpeg.Video;// 注册 FFmpeg 编解码器CodecFactory.Instance.RegisterFactory(newFFmpegVideoDecoderFactory());CodecFactory.Instance.RegisterFactory(newFFmpegVideoEncoderFactory());// 创建硬件解码器vardecoder=CodecFactory.Instance.CreateVideoDecoder(newVideoDecoderConfig{Codec=VideoCodec.H264,Width=1920,Height=1080,EnableHardwareAcceleration=true// 自动选择最佳硬件});Console.WriteLine(decoder.Name);// "FFmpeg H.264 Decoder (Cuda)"Console.WriteLine(decoder.IsHardwareAccelerated);// true

FFmpeg 音频编解码

usingCyaim.RTSPClient.Codecs.FFmpeg.Audio;CodecFactory.Instance.RegisterFactory(newFFmpegAudioDecoderFactory());CodecFactory.Instance.RegisterFactory(newFFmpegAudioEncoderFactory());// AAC 解码varaacDecoder=CodecFactory.Instance.CreateAudioDecoder(AudioCodec.AAC);// Opus 编码varopusEncoder=CodecFactory.Instance.CreateAudioEncoder(AudioCodec.OPUS);

编解码器

内置编解码器 (纯 C#)

编码解码编码说明
G.711A/U8kHz, 64kbps
G.72216kHz, 48/56/64kbps
G.7268kHz, 16/24/32/40kbps
G.7298kHz, 8kbps
AAC-LC44.1kHz

FFmpeg 编解码器

编码解码编码硬件加速
H.264NVENC, QSV, AMF, VAAPI
H.265NVENC, QSV, AMF, VAAPI
VP8VAAPI
VP9VAAPI
AAC-
Opus-
AMR-
Speex-

配置选项

varconfig=newRTSPSessionConfig{Url="rtsp://host:port/path",ConnectTimeout=TimeSpan.FromSeconds(5),ResponseTimeout=TimeSpan.FromSeconds(10),Username="admin",Password="password",TransportMode=TransportMode.TcpInterleaved,AutoReconnect=true,MaxReconnectAttempts=3,KeepAliveMethod="OPTIONS",UseBackchannel=true};

项目结构

Cyaim.RTSPClient/ # 核心库
├── Session/ # 会话管理
├── Protocol/ # 传输层 (TCP/UDP)
├── RTP/ # RTP 解析和解包
├── RTCP/ # RTCP 反馈
├── Media/Codecs/ # 内置编解码器
├── Auth/ # 认证
└── KeepAlive/ # 心跳管理
Cyaim.RTSPClient.Codecs.FFmpeg.Video/ # FFmpeg 视频编解码器
├── Decoders/ # H.264, H.265, VP8, VP9, MJPEG
├── Encoders/ # H.264, H.265, VP8, VP9
└── FFmpegHardwareHelper.cs # 硬件加速工具
Cyaim.RTSPClient.Codecs.FFmpeg.Audio/ # FFmpeg 音频编解码器
├── Decoders/ # AAC, Opus, AMR, Speex, Vorbis, MP3
└── Encoders/ # AAC, Opus, AMR, Speex, Vorbis, MP3

许可证

MIT License - 详见 LICENSE


English

Introduction

Cyaim.RTSPClient is a full-featured C# RTSP client library with complete RTSP protocol, RTP/RTCP transport, H.264/H.265 video, multi-codec audio, and ONVIF backchannel support. Hardware acceleration via NVIDIA NVENC/NVDEC, Intel QSV, and more.

Features

FeatureDescription
RTSP ProtocolOPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, GET_PARAMETER, SET_PARAMETER, ANNOUNCE, RECORD
TransportTCP Interleaved, UDP Unicast
Video CodecsH.264, H.265 (HEVC), VP8, VP9, MJPEG
Audio CodecsG.711A/U, G.722, G.726, G.729, AAC, Opus, AMR, Speex, Vorbis, MP3
HW AccelNVIDIA NVENC/NVDEC, Intel QSV, AMD AMF, VA-API, VideoToolbox, D3D11VA
AuthDigest (RFC 2617)
Keep-AliveAuto OPTIONS/GET_PARAMETER heartbeat
ReconnectConfigurable retry policy
ONVIFBackchannel support

Installation

# Core
dotnet add package Cyaim.RTSPClient
# FFmpeg video codecs (optional, with hardware acceleration)
dotnet add package Cyaim.RTSPClient.Codecs.FFmpeg.Video
# FFmpeg audio codecs (optional)
dotnet add package Cyaim.RTSPClient.Codecs.FFmpeg.Audio

Quick Start

usingCyaim.RTSPClient;usingCyaim.RTSPClient.Session;varconfig=newRTSPSessionConfig{Url="rtsp://192.168.1.127:554",Username="admin",Password="admin",AutoReconnect=true};usingvarsession=newRTSPSession(config);awaitsession.ConnectAsync();awaitsession.SetupAsync("trackID=1",TransportMode.TcpInterleaved);awaitsession.PlayAsync();varreader=session.GetRTPReader(trackId:0);while(awaitreader.WaitToReadAsync()){while(reader.TryRead(outvarpacket))Console.WriteLine($"Seq: {packet.SequenceNumber}");}

Hardware Acceleration

usingCyaim.RTSPClient.Codecs.FFmpeg.Video;CodecFactory.Instance.RegisterFactory(newFFmpegVideoDecoderFactory());vardecoder=CodecFactory.Instance.CreateVideoDecoder(newVideoDecoderConfig{Codec=VideoCodec.H264,Width=1920,Height=1080,EnableHardwareAcceleration=true});// Auto-selects best hardware: CUDA > QSV > D3D11VA > DXVA2 > VAAPIConsole.WriteLine(decoder.Name);// "FFmpeg H.264 Decoder (Cuda)"

License

MIT License - see LICENSE


Links

About

CSharp rtsp client.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages