From 17d3d8540d0ae94694645d9923a35f31f620221b Mon Sep 17 00:00:00 2001 From: kenneth Date: Wed, 13 Dec 2023 17:31:48 +0800 Subject: [PATCH] update m3u8 ts name --- internal/handlers/server.go | 2 +- internal/pkg/convert/hls.go | 66 ++++++++++++++++++++++++++++++++++++- internal/pkg/rand/rand.go | 25 ++++++++++++++ main.go | 4 --- 4 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 internal/pkg/rand/rand.go diff --git a/internal/handlers/server.go b/internal/handlers/server.go index 011d98d..17d3a8f 100644 --- a/internal/handlers/server.go +++ b/internal/handlers/server.go @@ -89,7 +89,7 @@ func (server *Server) setupRouter() { router.HandleFunc("/play/{xid}", server.videoView).Methods(http.MethodGet) router.HandleFunc("/media/{xid}/stream/", server.stream).Methods(http.MethodGet) - router.HandleFunc("/media/{xid}/stream/{segName:index[0-9]+.ts}", server.stream).Methods(http.MethodGet) + router.HandleFunc("/media/{xid}/stream/{segName:[a-z0-9]+.ts}", server.stream).Methods(http.MethodGet) subRouter := router.PathPrefix("/").Subrouter() subRouter.Use(server.authorize) diff --git a/internal/pkg/convert/hls.go b/internal/pkg/convert/hls.go index 292e3b4..187b374 100644 --- a/internal/pkg/convert/hls.go +++ b/internal/pkg/convert/hls.go @@ -1,12 +1,16 @@ package convert import ( + "bufio" + "io" "os" "os/exec" + "path" "strings" "github.com/zhang2092/mediahls/internal/pkg/fileutil" "github.com/zhang2092/mediahls/internal/pkg/logger" + "github.com/zhang2092/mediahls/internal/pkg/rand" ) func ConvertHLS(savePath, filePath string) error { @@ -35,7 +39,67 @@ func ConvertHLS(savePath, filePath string) error { return err } - return nil + // 替换 m3u8 文件信息 + return replaceM3u8(savePath) + // ffmpeg -i upload/20231129/o6e6qKaMdk0VC1Ys2SHnr.mp4 -profile:v baseline -level 3.0 -s 1920x1080 -start_number 0 -f hls -hls_time 10 -segment_list web/statics/js/index.m3u8 web/statics/mmm/index.m3u8 // ffmpeg -i upload/20231129/o6e6qKaMdk0VC1Ys2SHnr.mp4 -c copy -map 0 -f segment -segment_list web/statics/js/index.m3u8 -segment_time 20 web/statics/js/index_%3d.ts } + +type newOldName struct { + old string + new string +} + +func replaceM3u8(savePath string) error { + f, err := os.OpenFile(savePath+"/index.m3u8", os.O_RDWR, 0777) + if err != nil { + return err + } + defer f.Close() + + reader := bufio.NewReader(f) + var result []newOldName + var content string + for { + line, _, err := reader.ReadLine() + if err == io.EOF { + break + } + if err != nil { + return err + } + ls := string(line) + if strings.HasSuffix(ls, ".ts") { + ext := path.Ext(ls) + filename := strings.TrimSuffix(ls, ext) + temp := rand.RandomString(5) + result = append(result, newOldName{ + old: ls, + new: temp + ext, + }) + ls = strings.ReplaceAll(ls, filename, temp) + } + content += ls + "\n" + } + + fw, err := os.OpenFile(savePath+"/index.m3u8", os.O_WRONLY|os.O_TRUNC, 0777) + if err != nil { + return err + } + defer fw.Close() + + writer := bufio.NewWriter(fw) + writer.WriteString(content) + if err := writer.Flush(); err != nil { + return err + } + + for _, item := range result { + if err := os.Rename(savePath+item.old, savePath+item.new); err != nil { + return err + } + } + + return nil +} diff --git a/internal/pkg/rand/rand.go b/internal/pkg/rand/rand.go new file mode 100644 index 0000000..f0eeb9d --- /dev/null +++ b/internal/pkg/rand/rand.go @@ -0,0 +1,25 @@ +package rand + +import ( + rd "crypto/rand" + "encoding/hex" + "io" +) + +func RandomBytes(n int) []byte { + b := make([]byte, n) + bs, err := io.ReadFull(rd.Reader, b) + if err != nil { + return nil + } + if bs < n { + return nil + } + + return b +} + +func RandomString(n int) string { + b := RandomBytes(n) + return hex.EncodeToString(b) +} diff --git a/main.go b/main.go index 4feaf2a..ec19d83 100644 --- a/main.go +++ b/main.go @@ -19,10 +19,6 @@ var templateFS embed.FS var staticFS embed.FS func main() { - // filename, _ := nanoId.Nanoid() - // log.Println(filename) - // return - // Set up templates templates, err := fs.Sub(templateFS, "web/templates") if err != nil {