461 change transport

pull/272/head
ZSC714725 2 years ago
parent b79f37f9c9
commit 3598c36cfb

@ -39,6 +39,10 @@ const (
CcstPushSession CcstPushSession
) )
var (
ErrUnsupportedTransport = fmt.Errorf("Unsupported Transport")
)
type ClientCommandSessionOption struct { type ClientCommandSessionOption struct {
DoTimeoutMs int DoTimeoutMs int
OverTcp bool OverTcp bool
@ -389,31 +393,51 @@ func (session *ClientCommandSession) writeAnnounce() error {
} }
func (session *ClientCommandSession) writeSetup() error { func (session *ClientCommandSession) writeSetup() error {
if session.sdpCtx.HasVideoAControl() { setup := func(setupUri string) error {
uri := session.sdpCtx.MakeVideoSetupUri(session.urlCtx.RawUrlWithoutUserInfo)
if session.option.OverTcp { if session.option.OverTcp {
if err := session.writeOneSetupTcp(uri); err != nil { if err := session.writeOneSetupTcp(setupUri); err != nil {
// 461情况下尝试切换UDP重试
if err == ErrUnsupportedTransport {
if err := session.writeOneSetup(setupUri); err != nil {
return err return err
} }
session.option.OverTcp = false
} else { } else {
if err := session.writeOneSetup(uri); err != nil {
return err return err
} }
} }
} } else {
// can't else if if err := session.writeOneSetup(setupUri); err != nil {
if session.sdpCtx.HasAudioAControl() { // 461情况尝试切换TCP重试
uri := session.sdpCtx.MakeAudioSetupUri(session.urlCtx.RawUrlWithoutUserInfo) if err == ErrUnsupportedTransport {
if session.option.OverTcp { if err = session.writeOneSetupTcp(setupUri); err != nil {
if err := session.writeOneSetupTcp(uri); err != nil {
return err return err
} }
session.option.OverTcp = true
} else { } else {
if err := session.writeOneSetup(uri); err != nil {
return err return err
} }
} }
} }
return nil
}
if session.sdpCtx.HasVideoAControl() {
uri := session.sdpCtx.MakeVideoSetupUri(session.urlCtx.RawUrlWithoutUserInfo)
if err := setup(uri); err != nil {
return err
}
}
// can't else if
if session.sdpCtx.HasAudioAControl() {
uri := session.sdpCtx.MakeAudioSetupUri(session.urlCtx.RawUrlWithoutUserInfo)
if err := setup(uri); err != nil {
return err
}
}
return nil return nil
} }
@ -438,6 +462,12 @@ func (session *ClientCommandSession) writeOneSetup(setupUri string) error {
return err return err
} }
if ctx.StatusCode == "461" {
// 切换transport尝试继续
err = ErrUnsupportedTransport
return err
}
session.sessionId = strings.Split(ctx.Headers.Get(HeaderSession), ";")[0] session.sessionId = strings.Split(ctx.Headers.Get(HeaderSession), ";")[0]
rRtpPort, rRtcpPort, err := parseServerPort(ctx.Headers.Get(HeaderTransport)) rRtpPort, rRtcpPort, err := parseServerPort(ctx.Headers.Get(HeaderTransport))
@ -508,6 +538,11 @@ func (session *ClientCommandSession) writeOneSetupTcp(setupUri string) error {
return err return err
} }
if ctx.StatusCode == "461" {
err = ErrUnsupportedTransport
return err
}
session.sessionId = strings.Split(ctx.Headers.Get(HeaderSession), ";")[0] session.sessionId = strings.Split(ctx.Headers.Get(HeaderSession), ";")[0]
// TODO chef: 这里没有解析回传的channel id了因为我假定了它和request中的是一致的 // TODO chef: 这里没有解析回传的channel id了因为我假定了它和request中的是一致的

Loading…
Cancel
Save