基于joy4的RTMP服务器重复流密钥异常处理方案咨询
问题:Joy4 RTMP服务器重复流密钥的异常处理问题
我用Go语言的joy4包搭建RTMP服务器时,发现它缺乏重复流密钥的异常处理机制。当使用同一RTMP推流地址(如rtmp://localhost:1935/app/test)进行重复推流时——先通过OBS向服务器推流,再使用项目示例中的example/rtmp_publish/main.go重复推流至该地址,会出现连接不稳定的问题。
我尝试在HandlePublish函数中借助map检测重复的URL路径,若存在则调用conn.Close()来处理,但该方案未能解决问题。相关代码如下:
server.HandlePublish = func(conn *rtmp.Conn) { logger.Info("server.HandlePublish start Call") streams, _ := conn.Streams() l.Lock() // if key(rtmp url exists), conn.close() ch, ok := channels[conn.URL.Path] if ok { logger.Errorf("Already published: %s", conn.URL.Path) conn.Close() // add this line. return } if ch == nil { logger.Info("after inside of HandlePublish ch is nil") ch = &Channel{} ch.que = pubsub.NewQueue() ch.que.WriteHeader(streams) channels[conn.URL.Path] = ch } else { ch = nil } l.Unlock() if ch == nil { return } avutil.CopyPackets(ch.que, conn) l.Lock() delete(channels, conn.URL.Path) l.Unlock() ch.que.Close() }
参考文件:
examples/http_flv_and_rtmp_server/main.goformat/rtmp/rtmp.go
请问有什么有效的解决方案吗?
内容的提问来源于stack exchange,提问作者Kundera
相关产品推荐
相关产品推荐

