tracer层级问题
This commit is contained in:
parent
b11a315b0d
commit
dc10092f7a
@ -14,12 +14,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func UploadTaskFile(ctx context.Context, task dto.Task, file dto.FileObject) error {
|
func UploadTaskFile(ctx context.Context, task dto.Task, file dto.FileObject) error {
|
||||||
url, err := QueryUploadUrlForTask(ctx, task.TaskID)
|
subCtx, span := tracer.Start(ctx, "UploadTaskFile")
|
||||||
|
defer span.End()
|
||||||
|
url, err := QueryUploadUrlForTask(subCtx, task.TaskID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Printf("开始上传文件, URL:【%s】\n", url)
|
log.Printf("开始上传文件, URL:【%s】\n", url)
|
||||||
if err := OssUpload(ctx, url, file.URL); err != nil {
|
if err := OssUpload(subCtx, url, file.URL); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -19,7 +19,7 @@ type LocalAdapter struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *LocalAdapter) GetFileList(ctx context.Context, dirPath string, relDt time.Time) ([]dto.File, error) {
|
func (l *LocalAdapter) GetFileList(ctx context.Context, dirPath string, relDt time.Time) ([]dto.File, error) {
|
||||||
_, span := tracer.Start(ctx, "GetFileList_local")
|
subCtx, span := tracer.Start(ctx, "GetFileList_local")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
if l.StorageConfig.Path == "" {
|
if l.StorageConfig.Path == "" {
|
||||||
span.SetAttributes(attribute.String("error", "未配置存储路径"))
|
span.SetAttributes(attribute.String("error", "未配置存储路径"))
|
||||||
@ -54,7 +54,7 @@ func (l *LocalAdapter) GetFileList(ctx context.Context, dirPath string, relDt ti
|
|||||||
if startTime.Equal(stopTime) || stopTime.IsZero() {
|
if startTime.Equal(stopTime) || stopTime.IsZero() {
|
||||||
// 如果文件名没有时间戳,则认为该文件是未录制完成的
|
// 如果文件名没有时间戳,则认为该文件是未录制完成的
|
||||||
// 尝试读取一下视频信息
|
// 尝试读取一下视频信息
|
||||||
duration, err := util.GetVideoDuration(ctx, path.Join(l.StorageConfig.Path, dirPath, file.Name()))
|
duration, err := util.GetVideoDuration(subCtx, path.Join(l.StorageConfig.Path, dirPath, file.Name()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// 如果还是没有,就按照配置文件里的加起来
|
// 如果还是没有,就按照配置文件里的加起来
|
||||||
stopTime = stopTime.Add(time.Second * time.Duration(config.Config.Record.Duration))
|
stopTime = stopTime.Add(time.Second * time.Duration(config.Config.Record.Duration))
|
||||||
|
@ -21,15 +21,15 @@ import (
|
|||||||
const FfmpegExec = "ffmpeg"
|
const FfmpegExec = "ffmpeg"
|
||||||
|
|
||||||
func RunFfmpegTask(ctx context.Context, task *dto.FfmpegTask) bool {
|
func RunFfmpegTask(ctx context.Context, task *dto.FfmpegTask) bool {
|
||||||
_, span := tracer.Start(ctx, "RunFfmpegTask")
|
subCtx, span := tracer.Start(ctx, "RunFfmpegTask")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
var result bool
|
var result bool
|
||||||
if len(task.Files) == 1 {
|
if len(task.Files) == 1 {
|
||||||
// 单个文件切割,用简单方法
|
// 单个文件切割,用简单方法
|
||||||
result = runFfmpegForSingleFile(ctx, task)
|
result = runFfmpegForSingleFile(subCtx, task)
|
||||||
} else {
|
} else {
|
||||||
// 多个文件切割,用速度快的
|
// 多个文件切割,用速度快的
|
||||||
result = runFfmpegForMultipleFile1(ctx, task)
|
result = runFfmpegForMultipleFile1(subCtx, task)
|
||||||
}
|
}
|
||||||
// 先尝试方法1
|
// 先尝试方法1
|
||||||
if result {
|
if result {
|
||||||
@ -38,7 +38,7 @@ func RunFfmpegTask(ctx context.Context, task *dto.FfmpegTask) bool {
|
|||||||
}
|
}
|
||||||
log.Printf("FFMPEG简易方法失败,尝试复杂方法转码")
|
log.Printf("FFMPEG简易方法失败,尝试复杂方法转码")
|
||||||
// 不行再尝试方法二
|
// 不行再尝试方法二
|
||||||
result = runFfmpegForMultipleFile2(ctx, task)
|
result = runFfmpegForMultipleFile2(subCtx, task)
|
||||||
if result {
|
if result {
|
||||||
span.SetStatus(codes.Ok, "FFMPEG复杂方法成功")
|
span.SetStatus(codes.Ok, "FFMPEG复杂方法成功")
|
||||||
return true
|
return true
|
||||||
@ -48,7 +48,7 @@ func RunFfmpegTask(ctx context.Context, task *dto.FfmpegTask) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runFfmpegForMultipleFile1(ctx context.Context, task *dto.FfmpegTask) bool {
|
func runFfmpegForMultipleFile1(ctx context.Context, task *dto.FfmpegTask) bool {
|
||||||
_, span := tracer.Start(ctx, "runFfmpegForMultipleFile1")
|
subCtx, span := tracer.Start(ctx, "runFfmpegForMultipleFile1")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
// 多文件,方法一:先转换成ts,然后合并切割
|
// 多文件,方法一:先转换成ts,然后合并切割
|
||||||
// 步骤一:先转换成ts,并行转换
|
// 步骤一:先转换成ts,并行转换
|
||||||
@ -61,7 +61,7 @@ func runFfmpegForMultipleFile1(ctx context.Context, task *dto.FfmpegTask) bool {
|
|||||||
go func(file *dto.File) {
|
go func(file *dto.File) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
tmpFile := path.Join(os.TempDir(), file.Name+".ts")
|
tmpFile := path.Join(os.TempDir(), file.Name+".ts")
|
||||||
result, err := convertMp4ToTs(ctx, *file, tmpFile)
|
result, err := convertMp4ToTs(subCtx, *file, tmpFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("转码出错: %v", err)
|
log.Printf("转码出错: %v", err)
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
@ -88,7 +88,7 @@ func runFfmpegForMultipleFile1(ctx context.Context, task *dto.FfmpegTask) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 步骤二:使用concat协议拼接裁切
|
// 步骤二:使用concat协议拼接裁切
|
||||||
result, err := QuickConcatVideoCut(ctx, task.Files, int64(task.Offset), int64(task.Length), task.OutputFile)
|
result, err := QuickConcatVideoCut(subCtx, task.Files, int64(task.Offset), int64(task.Length), task.OutputFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.SetAttributes(attribute.String("error", err.Error()))
|
span.SetAttributes(attribute.String("error", err.Error()))
|
||||||
span.SetStatus(codes.Error, "FFMPEG多文件concat协议转码失败")
|
span.SetStatus(codes.Error, "FFMPEG多文件concat协议转码失败")
|
||||||
@ -110,10 +110,10 @@ func runFfmpegForMultipleFile1(ctx context.Context, task *dto.FfmpegTask) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runFfmpegForMultipleFile2(ctx context.Context, task *dto.FfmpegTask) bool {
|
func runFfmpegForMultipleFile2(ctx context.Context, task *dto.FfmpegTask) bool {
|
||||||
_, span := tracer.Start(ctx, "runFfmpegForMultipleFile2")
|
subCtx, span := tracer.Start(ctx, "runFfmpegForMultipleFile2")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
// 多文件,方法二:使用计算资源编码
|
// 多文件,方法二:使用计算资源编码
|
||||||
result, err := SlowVideoCut(ctx, task.Files, int64(task.Offset), int64(task.Length), task.OutputFile)
|
result, err := SlowVideoCut(subCtx, task.Files, int64(task.Offset), int64(task.Length), task.OutputFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -121,9 +121,9 @@ func runFfmpegForMultipleFile2(ctx context.Context, task *dto.FfmpegTask) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runFfmpegForSingleFile(ctx context.Context, task *dto.FfmpegTask) bool {
|
func runFfmpegForSingleFile(ctx context.Context, task *dto.FfmpegTask) bool {
|
||||||
_, span := tracer.Start(ctx, "runFfmpegForSingleFile")
|
subCtx, span := tracer.Start(ctx, "runFfmpegForSingleFile")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
result, err := QuickVideoCut(ctx, task.Files[0].Url, int64(task.Offset), int64(task.Length), task.OutputFile)
|
result, err := QuickVideoCut(subCtx, task.Files[0].Url, int64(task.Offset), int64(task.Length), task.OutputFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.SetStatus(codes.Error, "FFMPEG单个文件裁切失败")
|
span.SetStatus(codes.Error, "FFMPEG单个文件裁切失败")
|
||||||
return false
|
return false
|
||||||
@ -188,7 +188,7 @@ func CheckFileCoverageAndConstructTask(ctx context.Context, fileList []dto.File,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func convertMp4ToTs(ctx context.Context, file dto.File, outFileName string) (bool, error) {
|
func convertMp4ToTs(ctx context.Context, file dto.File, outFileName string) (bool, error) {
|
||||||
_, span := tracer.Start(ctx, "convertMp4ToTs")
|
subCtx, span := tracer.Start(ctx, "convertMp4ToTs")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
ffmpegCmd := []string{
|
ffmpegCmd := []string{
|
||||||
FfmpegExec,
|
FfmpegExec,
|
||||||
@ -200,11 +200,11 @@ func convertMp4ToTs(ctx context.Context, file dto.File, outFileName string) (boo
|
|||||||
"-f", "mpegts",
|
"-f", "mpegts",
|
||||||
outFileName,
|
outFileName,
|
||||||
}
|
}
|
||||||
return handleFfmpegProcess(ctx, ffmpegCmd)
|
return handleFfmpegProcess(subCtx, ffmpegCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertHevcToTs(ctx context.Context, file dto.File, outFileName string) (bool, error) {
|
func convertHevcToTs(ctx context.Context, file dto.File, outFileName string) (bool, error) {
|
||||||
_, span := tracer.Start(ctx, "convertHevcToTs")
|
subCtx, span := tracer.Start(ctx, "convertHevcToTs")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
ffmpegCmd := []string{
|
ffmpegCmd := []string{
|
||||||
FfmpegExec,
|
FfmpegExec,
|
||||||
@ -216,11 +216,11 @@ func convertHevcToTs(ctx context.Context, file dto.File, outFileName string) (bo
|
|||||||
"-f", "mpegts",
|
"-f", "mpegts",
|
||||||
outFileName,
|
outFileName,
|
||||||
}
|
}
|
||||||
return handleFfmpegProcess(ctx, ffmpegCmd)
|
return handleFfmpegProcess(subCtx, ffmpegCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func QuickVideoCut(ctx context.Context, inputFile string, offset, length int64, outputFile string) (bool, error) {
|
func QuickVideoCut(ctx context.Context, inputFile string, offset, length int64, outputFile string) (bool, error) {
|
||||||
_, span := tracer.Start(ctx, "QuickVideoCut")
|
subCtx, span := tracer.Start(ctx, "QuickVideoCut")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
ffmpegCmd := []string{
|
ffmpegCmd := []string{
|
||||||
FfmpegExec,
|
FfmpegExec,
|
||||||
@ -236,11 +236,11 @@ func QuickVideoCut(ctx context.Context, inputFile string, offset, length int64,
|
|||||||
"-f", "mp4",
|
"-f", "mp4",
|
||||||
outputFile,
|
outputFile,
|
||||||
}
|
}
|
||||||
return handleFfmpegProcess(ctx, ffmpegCmd)
|
return handleFfmpegProcess(subCtx, ffmpegCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func QuickConcatVideoCut(ctx context.Context, inputFiles []dto.File, offset, length int64, outputFile string) (bool, error) {
|
func QuickConcatVideoCut(ctx context.Context, inputFiles []dto.File, offset, length int64, outputFile string) (bool, error) {
|
||||||
_, span := tracer.Start(ctx, "QuickConcatVideoCut")
|
subCtx, span := tracer.Start(ctx, "QuickConcatVideoCut")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
tmpFile := fmt.Sprintf("tmp%.10f.txt", rand.Float64())
|
tmpFile := fmt.Sprintf("tmp%.10f.txt", rand.Float64())
|
||||||
tmpFileObj, err := os.Create(tmpFile)
|
tmpFileObj, err := os.Create(tmpFile)
|
||||||
@ -277,11 +277,11 @@ func QuickConcatVideoCut(ctx context.Context, inputFiles []dto.File, offset, len
|
|||||||
"-f", "mp4",
|
"-f", "mp4",
|
||||||
outputFile,
|
outputFile,
|
||||||
}
|
}
|
||||||
return handleFfmpegProcess(ctx, ffmpegCmd)
|
return handleFfmpegProcess(subCtx, ffmpegCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SlowVideoCut(ctx context.Context, inputFiles []dto.File, offset, length int64, outputFile string) (bool, error) {
|
func SlowVideoCut(ctx context.Context, inputFiles []dto.File, offset, length int64, outputFile string) (bool, error) {
|
||||||
_, span := tracer.Start(ctx, "SlowVideoCut")
|
subCtx, span := tracer.Start(ctx, "SlowVideoCut")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
ffmpegCmd := []string{
|
ffmpegCmd := []string{
|
||||||
FfmpegExec,
|
FfmpegExec,
|
||||||
@ -311,7 +311,7 @@ func SlowVideoCut(ctx context.Context, inputFiles []dto.File, offset, length int
|
|||||||
outputFile,
|
outputFile,
|
||||||
)
|
)
|
||||||
|
|
||||||
return handleFfmpegProcess(ctx, ffmpegCmd)
|
return handleFfmpegProcess(subCtx, ffmpegCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleFfmpegProcess(ctx context.Context, ffmpegCmd []string) (bool, error) {
|
func handleFfmpegProcess(ctx context.Context, ffmpegCmd []string) (bool, error) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user