# rtsp-server **Repository Path**: general252/rtsp-server ## Basic Information - **Project Name**: rtsp-server - **Description**: No description available - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-25 - **Last Updated**: 2022-06-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 推流的SDP中要有ssrc 推流后知道所在的流 拉流要发送"接受者报告" 发送后服务端知道向哪里发流 rtsp: ``` rtp、rtcp端口固定 8000、8001 推流: 服务器端根据client_port判断是哪路流, 同时保存ip port与ssrc cname的对应关系, 当ip port找不到流时, 通过ssrc查找流 如果SDP(或SETUP的Transport)包含ssrc, 则可用于公网 拉流: 服务器端向客户端指定的client_port发流 发送Receiver Report中的有ssrc, 则可用于公网 推流者先发送Sender Report, 告知服务端发送者ssrc、端口 接收者先发送Receiver Report, 仅知道端口。这里不知道接收的哪个ssrc(其实是知道的, Setup的Reply中回复了ssrc) 说明: ip地址根据rtsp连接获取 ``` ``` 增加一个路由 推流的数据都发到这个路由 拉流的请求都注册回调到这个路由 ``` ``` Server: Connection: 处理TCP, UDP可变端口, UDP固定端口, UDP端口复用 Session: 处理rtsp/rtp/rtcp Track: rtp包排序, rtcp处理 参考websocket接口 conn := new websocket(tcpConn) rtpPkt, err := conn.readRTP() // data raw, track rtcpPkt, err := conn.readRTCP() // packet, err := conn.readPacket() // h264/hevc/aac/opus packet conn.writeRTP() conn.writeRTCP() conn.writePacket() 内部实现: tcp accept ```