You've already forked VptPassiveAdapter
720p
This commit is contained in:
72
main.go
72
main.go
@@ -7,13 +7,16 @@ import (
|
||||
"ZhenTuLocalPassiveAdapter/dto"
|
||||
"ZhenTuLocalPassiveAdapter/logger"
|
||||
"ZhenTuLocalPassiveAdapter/telemetry"
|
||||
"ZhenTuLocalPassiveAdapter/util"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/signal"
|
||||
"runtime"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
@@ -48,6 +51,16 @@ func startTask(device config.DeviceMapping, task dto.Task) {
|
||||
logger.Info("处理任务成功",
|
||||
zap.String("taskID", task.TaskID),
|
||||
zap.String("deviceNo", task.DeviceNo))
|
||||
|
||||
// 复制主文件用于异步生成预览,避免阻塞主上传流程
|
||||
copyFile := strings.TrimSuffix(fo.URL, ".mp4") + "_copy.mp4"
|
||||
copyErr := copyFileOnDisk(fo.URL, copyFile)
|
||||
if copyErr != nil {
|
||||
logger.Warn("复制文件用于预览失败",
|
||||
zap.String("taskID", task.TaskID),
|
||||
zap.Error(copyErr))
|
||||
}
|
||||
|
||||
err = api.UploadTaskFile(ctx, task, *fo)
|
||||
if err != nil {
|
||||
span.SetStatus(codes.Error, "上传文件失败")
|
||||
@@ -56,6 +69,9 @@ func startTask(device config.DeviceMapping, task dto.Task) {
|
||||
zap.String("deviceNo", task.DeviceNo),
|
||||
zap.Error(err))
|
||||
api.ReportTaskFailure(ctx, task.TaskID)
|
||||
if copyErr == nil {
|
||||
os.Remove(copyFile)
|
||||
}
|
||||
return
|
||||
}
|
||||
result := api.ReportTaskSuccess(ctx, task.TaskID, fo)
|
||||
@@ -65,12 +81,68 @@ func startTask(device config.DeviceMapping, task dto.Task) {
|
||||
zap.String("taskID", task.TaskID),
|
||||
zap.String("deviceNo", task.DeviceNo),
|
||||
zap.Error(err))
|
||||
if copyErr == nil {
|
||||
os.Remove(copyFile)
|
||||
}
|
||||
return
|
||||
}
|
||||
span.SetStatus(codes.Ok, "上传文件成功")
|
||||
logger.Info("上传文件成功",
|
||||
zap.String("taskID", task.TaskID),
|
||||
zap.String("deviceNo", task.DeviceNo))
|
||||
|
||||
// 异步:从副本压缩720p预览 → 上传 → 上报
|
||||
if copyErr == nil {
|
||||
go uploadPreview(task.TaskID, copyFile)
|
||||
}
|
||||
}
|
||||
|
||||
func uploadPreview(taskID string, copyFile string) {
|
||||
ctx, span := tracer.Start(context.Background(), "uploadPreview")
|
||||
defer span.End()
|
||||
defer os.Remove(copyFile)
|
||||
|
||||
previewFile := strings.TrimSuffix(copyFile, "_copy.mp4") + "_preview.mp4"
|
||||
ok, _ := util.CompressTo720p(ctx, copyFile, previewFile)
|
||||
if !ok {
|
||||
span.SetStatus(codes.Error, "生成预览文件失败")
|
||||
logger.Error("生成预览文件失败", zap.String("taskID", taskID))
|
||||
return
|
||||
}
|
||||
|
||||
err := api.UploadPreviewFile(ctx, taskID, previewFile)
|
||||
if err != nil {
|
||||
span.SetStatus(codes.Error, "上传预览文件失败")
|
||||
logger.Error("上传预览文件失败",
|
||||
zap.String("taskID", taskID),
|
||||
zap.Error(err))
|
||||
os.Remove(previewFile)
|
||||
return
|
||||
}
|
||||
result := api.ReportPreviewSuccess(ctx, taskID)
|
||||
if !result {
|
||||
span.SetStatus(codes.Error, "上报预览成功失败")
|
||||
logger.Error("上报预览成功失败",
|
||||
zap.String("taskID", taskID))
|
||||
return
|
||||
}
|
||||
span.SetStatus(codes.Ok, "预览上传成功")
|
||||
logger.Info("预览上传成功", zap.String("taskID", taskID))
|
||||
}
|
||||
|
||||
func copyFileOnDisk(src, dst string) error {
|
||||
in, err := os.Open(src)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer in.Close()
|
||||
out, err := os.Create(dst)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer out.Close()
|
||||
_, err = io.Copy(out, in)
|
||||
return err
|
||||
}
|
||||
|
||||
func executeDisconnectCommand(command string) {
|
||||
|
||||
Reference in New Issue
Block a user