You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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.go
  • format/rtmp/rtmp.go

请问有什么有效的解决方案吗?


内容的提问来源于stack exchange,提问作者Kundera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:12:40