feat: Added FFMpeg library for video transcoding and gorm for database operations in generalnode routes

This commit is contained in:
2025-02-13 15:18:26 +01:00
parent ffbd653098
commit 34cbded795
4 changed files with 94 additions and 0 deletions

View File

@@ -2,10 +2,15 @@ package generalnode
import (
"encoding/json"
"fmt"
"github.com/alexohneander/flotte/pkg/models"
"github.com/alexohneander/flotte/pkg/types/request"
respone "github.com/alexohneander/flotte/pkg/types/response"
"github.com/gin-gonic/gin"
ffmpeg "github.com/u2takey/ffmpeg-go"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
func registerRoutes(router *gin.Engine) *gin.Engine {
@@ -41,5 +46,42 @@ func registerRoutes(router *gin.Engine) *gin.Engine {
})
})
// Start Transcoding
router.GET("/transcode", func(c *gin.Context) {
db, err := gorm.Open(sqlite.Open("flotte.db"), &gorm.Config{})
if err != nil {
fmt.Println("failed to connect database")
}
// Get file from tmp folder
moviePath := "./tmp/bbb_sunflower_1080p_60fps_normal.mp4"
// Get map node counter
var mapNodes []models.Service
db.Where("node_type = ?", "map").Find(&mapNodes)
// Cut Video in 10sek Segments
i := 0
iframes := 0
for i < 10 {
segmentPath := fmt.Sprintf("./tmp/seg_%d.mp4", i)
err := ffmpeg.Input(moviePath, ffmpeg.KwArgs{"ss": iframes}).
Output(segmentPath, ffmpeg.KwArgs{"t": 10}).
OverWriteOutput().
Run()
if err != nil {
fmt.Println(err)
}
i++
iframes = iframes + 10
}
// send n segments to n map-nodes
fmt.Println(mapNodes)
c.JSON(200, gin.H{"status": "start transcoding"})
})
return router
}