package m3u8 import ( "bytes" "context" "io/ioutil" "sync" ) var ( cacheEnkey []byte cacheLsjEnkey []byte initOnce sync.Once cacheNewEnkey []byte newEnkeyErr error newEnkeyOnce sync.Once ) func initEnkey() { initOnce.Do(func() { if len(cacheEnkey) == 0 { data, err := ioutil.ReadFile("conf/m3u8.key") if err != nil { panic(err) } cacheEnkey = data } if len(cacheLsjEnkey) == 0 { data, err := ioutil.ReadFile("conf/lsjm3u8.key") if err != nil { panic(err) } cacheLsjEnkey = data } }) } func Enkey(ctx context.Context) (buffer *bytes.Buffer, err error) { if cacheEnkey == nil { initEnkey() } buffer = bytes.NewBuffer(cacheEnkey) return } // NewEnkey 返回短剧原片使用的新 M3U8 解密密钥。 func NewEnkey(ctx context.Context) (buffer *bytes.Buffer, err error) { newEnkeyOnce.Do(func() { cacheNewEnkey, newEnkeyErr = ioutil.ReadFile("conf/newm3u8.key") }) if newEnkeyErr != nil { return nil, newEnkeyErr } return bytes.NewBuffer(cacheNewEnkey), nil } func LsjEnkey(ctx context.Context) (buffer *bytes.Buffer, err error) { if cacheLsjEnkey == nil { initEnkey() } buffer = bytes.NewBuffer(cacheLsjEnkey) return }