64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
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 返回短剧原片使用的解密密钥。
|
|
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
|
|
}
|