This commit is contained in:
hhu67 2026-08-05 14:39:15 +03:00
commit f84bef5ffa
7 changed files with 111 additions and 0 deletions

10
.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,10 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Ignored default folder with query files
/queries/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

9
.idea/convertbackend.iml Normal file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="GoModuleSettings" enabled="true" />
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

10
.idea/go.imports.xml Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GoImports">
<option name="excludedPackages">
<array>
<option value="golang.org/x/net/context" />
</array>
</option>
</component>
</project>

8
.idea/modules.xml Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/convertbackend.iml" filepath="$PROJECT_DIR$/.idea/convertbackend.iml" />
</modules>
</component>
</project>

71
convert.go Normal file
View file

@ -0,0 +1,71 @@
package main
import (
"bytes"
"context"
"fmt"
"io"
"log"
"net/http"
"os/exec"
"time"
)
func compressRAMHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Только POST метод", http.StatusMethodNotAllowed)
return
}
w.Header().Set("Content-Type", "video/mp4")
w.Header().Set("Transfer-Encoding", "chunked")
ctx, cancel := context.WithTimeout(r.Context(), 60*time.Second)
defer cancel()
args := []string{
"-y",
"-analyzeduration", "10M",
"-probesize", "10M",
"-i", "pipe:0",
"-c:v", "libx264",
"-preset", "veryfast",
"-crf", "28",
"-threads", "4",
"-movflags", "frag_keyframe+empty_moov",
"-f", "mp4",
"pipe:1",
}
cmd := exec.CommandContext(ctx, "ffmpeg", args...)
cmd.Stdin = r.Body
// Буфер для сбора ошибок FFmpeg
var stderrBuf bytes.Buffer
cmd.Stderr = &stderrBuf
stdoutPipe, err := cmd.StdoutPipe()
if err != nil {
http.Error(w, fmt.Sprintf("Ошибка pipe stdout: %v", err), http.StatusInternalServerError)
return
}
if err := cmd.Start(); err != nil {
http.Error(w, fmt.Sprintf("Ошибка запуска FFmpeg: %v", err), http.StatusInternalServerError)
return
}
_, _ = io.Copy(w, stdoutPipe)
if waitErr := cmd.Wait(); waitErr != nil {
log.Printf("FFmpeg завершился с ошибкой (%v):\n%s", waitErr, stderrBuf.String())
}
}
func main() {
http.HandleFunc("/compress", compressRAMHandler)
log.Println("RAM Converter запущен на :1554...")
log.Fatal(http.ListenAndServe("127.0.0.1:1554", nil))
}

3
go.mod Normal file
View file

@ -0,0 +1,3 @@
module convert
go 1.26.5

BIN
go_build_convert Executable file

Binary file not shown.