/* * @Author: BlackTeay * @Date: 2024-05-09 15:41:11 * @LastEditTime: 2024-05-09 15:59:27 * @LastEditors: BlackTeay * @Description: * @FilePath: /hls_builder/paths.go * Copyright 2024 JLNTV NMTD, All Rights Reserved. */ // paths.go package main import ( "embed" "log" "os" "path/filepath" "runtime" ) //go:embed bin/* var binFS embed.FS // getFFmpegPath 获取FFmpeg可执行文件的路径。 // 该函数根据运行时操作系统选择对应的FFmpeg文件,将该文件从嵌入的文件系统读出, // 并写入到一个临时目录中,然后返回这个临时文件的路径。 // 返回值: // // string - FFmpeg可执行文件的临时路径。 func getFFmpegPath() (string, func(), error) { var ffmpegFileName string switch runtime.GOOS { case "windows": ffmpegFileName = "ffmpeg_windows.exe" case "darwin": ffmpegFileName = "ffmpeg_darwin" } // 根据操作系统选择的FFmpeg文件名,从嵌入的文件系统中读取文件内容 data, err := binFS.ReadFile("bin/" + ffmpegFileName) if err != nil { log.Fatal(err) } // 创建临时目录并将FFmpeg文件内容写入该目录中的文件 tmpDir, err := os.MkdirTemp("", "ffmpeg") if err != nil { log.Fatal(err) } tmpFilePath := filepath.Join(tmpDir, ffmpegFileName) if err := os.WriteFile(tmpFilePath, data, 0755); err != nil { log.Fatal(err) } else { log.Println("FFmpeg path:", tmpFilePath) } cleanup := func() { os.RemoveAll(tmpDir) // 删除整个临时目录 log.Println("Cleaned up FFmpeg temporary files.") } return tmpFilePath, cleanup, nil } // getUs3cliPath 获取us3cli二进制文件的临时路径。 // 该函数根据运行的操作系统选择对应的us3cli文件,并将其从嵌入的文件系统中读出, // 然后写入到一个临时文件中,最后返回这个临时文件的路径。 // 返回值: // - string: us3cli临时文件的路径。 func getUs3cliPath() (string, func(), error) { var us3cliFileName string switch runtime.GOOS { case "windows": us3cliFileName = "us3cli-windows.exe" case "darwin": us3cliFileName = "us3cli-mac" } // 根据操作系统选择的us3cli文件名,从嵌入的文件系统中读取文件内容 data, err := binFS.ReadFile("bin/" + us3cliFileName) if err != nil { log.Fatal(err) } // 创建临时目录并将us3cli文件内容写入其中 tmpDir, err := os.MkdirTemp("", "us3cli") if err != nil { log.Fatal(err) } tmpFilePath := filepath.Join(tmpDir, us3cliFileName) if err := os.WriteFile(tmpFilePath, data, 0755); err != nil { log.Fatal(err) } else { log.Println("us3cli path:", tmpFilePath) } cleanup := func() { os.RemoveAll(tmpDir) // 删除整个临时目录 log.Println("Cleaned up Us3cli temporary files.") } return tmpFilePath, cleanup, nil }