102 lines
2.7 KiB
Go
102 lines
2.7 KiB
Go
/*
|
||
* @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
|
||
}
|