Skip to content

在双机部署互相配置对方为relay_pull时(场景为本地没有流就去目标地址回源)先pull的话会publish不了流 #364

@ShubinZheng

Description

@ShubinZheng

正常启动两个服务,互相配置双方为relay_pull的配置,如果先拉流,会publish不了流

2024/12/04 12:11:59.934429 ERROR [GROUP1] in stream already exist at group. add=RTMPPUBSUB2, exist=RTMPPULL1 - group__in.go:54
2024/12/04 12:11:59.934446 ERROR [RTMPPUBSUB2] doMsg failed. stream=header={Csid:4 MsgLen:80 MsgTypeId:20 MsgStreamId:1 TimestampAbs:0}, b=len(core)=4096, rpos=0, wpos=0, hex=, msg=0200077075626c6973680040140000000000000502003273747265616d3f6c616c5f7365637265743d30336232383061633563343231356237303933633238326664313231636462390200046c697665 - server_session.go:250

源码这里报错了 pkg/logic/group_in.go,这个hasInSession里面会是true,因为里面会判断group.hasPullSession(),而这个hasPullSession里面会去找pullProxy里面的session,即group.pullProxy.rtmpSession != nil,导致层层传递为true,但是我的pullProxy也就是另一个lal进程没有这个流

func (group *Group) AddRtmpPubSession(session *rtmp.ServerSession) error {
	group.mutex.Lock()
	defer group.mutex.Unlock()

	if group.hasInSession() {
		Log.Errorf("[%s] in stream already exist at group. add=%s, exist=%s",
			group.UniqueKey, session.UniqueKey(), group.inSessionUniqueKey())
		return base.ErrDupInStream
	}

	Log.Debugf("[%s] [%s] add rtmp pub session into group.", group.UniqueKey, session.UniqueKey())

	group.rtmpPubSession = session
	group.addIn()

	if group.shouldStartRtspRemuxer() {
		group.rtmp2RtspRemuxer = remux.NewRtmp2RtspRemuxer(
			group.onSdpFromRemux,
			group.onRtpPacketFromRemux,
		)
	}

	session.SetPubSessionObserver(group)

	return nil
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions