# rtmp-rtp-flv **Repository Path**: ericps/rtmp-rtp-flv ## Basic Information - **Project Name**: rtmp-rtp-flv - **Description**: 云端节点:接收 RTMP 流,RTP 封装 FLV,然后发送到组播地址 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-02-20 - **Last Updated**: 2024-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CloudServer ![system.png](https://s2.loli.net/2022/10/04/q2GfX9DdxPhsACH.png) ## Start - rtp port: 5220, rtcp port: 5221 - 发送 rtp 包到指定的地址,默认为:127.0.0.1:5222 - 配置相关参数在 config.yaml 文件中: ```yaml packet_loss_rate: 0 # 掉包率,现在一般在边缘控制 quic_addr: :4242 # quic 服务端地址 client_address_list: # 发 rtp 包的目的地址 - 127.0.0.1:5222 - 127.0.0.1:5224 ``` > `go run cloudserver.go` ## Configuration ```go const ( AUDIO_TAG = byte(0x08) VIDEO_TAG = byte(0x09) SCRIPT_DATA_TAG = byte(0x12) DURATION_OFFSET = 53 HEADER_LEN = 13 MAX_RTP_PAYLOAD_LEN = 1000 RTP_INITIAL_SEQ = uint16(65000) ) // rtp相关 var localPort = 5220 var local, _ = net.ResolveIPAddr("ip", "127.0.0.1") var rsLocal *rtp.Session var localZone = "" // Config app参数 type Config struct { PACKET_LOSS_RATE float64 QUIC_ADDR string CLIENT_ADDRESS_LIST []string } var conf = &Config{ //default config PACKET_LOSS_RATE: 0.000, QUIC_ADDR: ":4242", CLIENT_ADDRESS_LIST: []string{"127.0.0.1:5222"}, } // 读取自定义参数的 config.yaml 文件 func (conf *Config) readFromXml(src string) { content, err := ioutil.ReadFile(src) if err != nil { conf.writeToXml(src) return } err = yaml.Unmarshal(content, conf) checkError(err) } func (conf *Config) writeToXml(src string) { data, err := yaml.Marshal(conf) checkError(err) err = ioutil.WriteFile(src, data, 0777) checkError(err) } ``` ## Structure - `define.go`:基本配置项文件,读取 config.yaml 文件 - `utils.go`:一些封装函数,包括等待quic连接、创建 flv 文件等 - `conn.go`:quic 服务器,用于重传丢失的 rtp 数据包 - `flv.go`:处理 flv 数据,包括构造 flvTag 以及读写 flv 数据 - `rtp_packet.go`:处理 rtp 数据包,包括设置 ssrc 等 - `mapQueue.go`:缓存 rtp 数据包的 linkedHashMap,listQueue.go 目前没用 - `cloundserver.go`:代码主要逻辑