mirror of
https://github.com/xfrr/goffmpeg.git
synced 2025-11-02 20:14:01 +08:00
error handlers
This commit is contained in:
@@ -14,7 +14,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"log"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Transcoder struct {
|
type Transcoder struct {
|
||||||
@@ -140,8 +139,10 @@ func (t *Transcoder) Initialize(inputPath string, outputPath string, configurati
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transcoder) Run() (<-chan bool) {
|
func (t *Transcoder) Run() (<-chan bool, error) {
|
||||||
done := make(chan bool)
|
done := make(chan bool)
|
||||||
|
var err error
|
||||||
|
|
||||||
command := t.GetCommand()
|
command := t.GetCommand()
|
||||||
|
|
||||||
proc := exec.Command("/bin/sh", "-c", command)
|
proc := exec.Command("/bin/sh", "-c", command)
|
||||||
@@ -149,41 +150,38 @@ func (t *Transcoder) Run() (<-chan bool) {
|
|||||||
t.SetProccess(proc)
|
t.SetProccess(proc)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
perror := proc.Start()
|
err := proc.Start()
|
||||||
if perror != nil {
|
if err != nil {
|
||||||
log.Fatal(perror)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
proc.Wait()
|
proc.Wait()
|
||||||
|
|
||||||
done <- true
|
done <- true
|
||||||
|
close(done)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return done
|
return done, err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: ONLY WORKS FOR VIDEO FILES
|
// TODO: ONLY WORKS FOR VIDEO FILES
|
||||||
func (t Transcoder) Output() (chan models.Progress) {
|
func (t Transcoder) Output() (<-chan models.Progress, error) {
|
||||||
out := make(chan models.Progress)
|
out := make(chan models.Progress)
|
||||||
|
var err error
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
defer close(out)
|
||||||
|
|
||||||
stderr, serr := t.Process().StderrPipe()
|
stderr, stderror := t.Process().StderrPipe()
|
||||||
if serr != nil {
|
if err != nil {
|
||||||
log.Fatal(serr)
|
err = stderror
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
scanner := bufio.NewScanner(stderr)
|
scanner := bufio.NewScanner(stderr)
|
||||||
|
|
||||||
split := func(data []byte, atEOF bool) (advance int, token []byte, err error) {
|
split := func(data []byte, atEOF bool) (advance int, token []byte, spliterror error) {
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
return 0, nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if atEOF && len(data) == 0 {
|
if atEOF && len(data) == 0 {
|
||||||
return 0, nil, nil
|
return 0, nil, nil
|
||||||
@@ -244,12 +242,10 @@ func (t Transcoder) Output() (chan models.Progress) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defer close(out)
|
if scerror := scanner.Err(); err != nil {
|
||||||
|
err = scerror
|
||||||
if err := scanner.Err(); err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return out
|
return out, err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user