88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
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 {
|
|
// Get Status
|
|
router.GET("/ping", func(c *gin.Context) {
|
|
c.JSON(200, gin.H{
|
|
"message": "pong",
|
|
})
|
|
})
|
|
|
|
// Add Service
|
|
router.POST("/service", func(c *gin.Context) {
|
|
defer c.Request.Body.Close()
|
|
var req request.ServiceRegister
|
|
err := json.NewDecoder(c.Request.Body).Decode(&req)
|
|
|
|
if err != nil {
|
|
c.JSON(400, gin.H{
|
|
"message": err.Error(),
|
|
})
|
|
}
|
|
|
|
err = registerSerivce(req)
|
|
if err != nil {
|
|
c.JSON(500, gin.H{
|
|
"message": err.Error(),
|
|
})
|
|
}
|
|
|
|
c.JSON(200, respone.ServiceRegister{
|
|
ServiceName: req.Name,
|
|
Status: "registered",
|
|
})
|
|
})
|
|
|
|
// 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
|
|
}
|