Closed sapceman closed 1 year ago
你可以调试一下看看是否进入OnAuthPub,如果没有进入,看一下engine中调用OnAuthPub的地方,进一步看为啥没有进入
调试进入OnAuthPub了,没case到 *AuthPublisher:,返回nil,obs推流rtmp失败。engine中调用OnAuthPub的地方没看。
不要case *AuthPublisher。 因为你用rtmp推流,所以你接受到的是一个rtmp的publisher,用IPublisher
你用全局鉴权,就不需要自定义Publisher
感谢大神指导,改用IPublisher后能case到了,return nil,obs推流rtmp还是失败。
光return nil不行,return nil的话就依赖Promise的结果,需要对Promise调用Resolve来完成鉴权
参照官方文档,我的全局鉴权插件代码如下: `package auth import ( "errors" . "m7s.live/engine/v4" "m7s.live/engine/v4/util" )
type AuthConfig struct { Publish bool Salt string }
type AuthPublisher struct { Publisher Auth *AuthConfig }
var plugin = InstallPlugin(&AuthConfig{ Publish: true, Salt: "1EC96355", })
func init() { plugin.Warn("Publisher Auth init") OnAuthPub = func(p util.Promise[IPublisher]) error { var puber = p.Value switch v := puber.(type) { case AuthPublisher: // do auth if v.Auth.Publish { args := v.Args sign := args.Get("sign") auth := v.Auth.verifyAuth(v.Stream.Path, sign) if !auth { return errors.New("error! Unauthorized") } } return nil } return nil } }
func (a AuthConfig) OnEvent(event any) { switch event.(type) { case FirstConfig: plugin.Info("Auth start with", zap.String("Salt", a.Salt)) } } func (a AuthConfig) verifyAuth(path string, sign string) bool { return true }`
但我发现代码运行不到// do auth部分,OnAuthPub返回的应该是nil,推流依然失败,请问大神,代码问题在哪?