mirror of
https://github.com/navidrome/navidrome.git
synced 2025-06-01 08:01:15 +03:00
refactor: rename ffmpeg to transcoder
This commit is contained in:
parent
33ede13eef
commit
0370f0a3ea
@ -11,7 +11,7 @@ import (
|
|||||||
|
|
||||||
"github.com/deluan/navidrome/conf"
|
"github.com/deluan/navidrome/conf"
|
||||||
"github.com/deluan/navidrome/consts"
|
"github.com/deluan/navidrome/consts"
|
||||||
"github.com/deluan/navidrome/engine/ffmpeg"
|
"github.com/deluan/navidrome/engine/transcoder"
|
||||||
"github.com/deluan/navidrome/log"
|
"github.com/deluan/navidrome/log"
|
||||||
"github.com/deluan/navidrome/model"
|
"github.com/deluan/navidrome/model"
|
||||||
"github.com/deluan/navidrome/utils"
|
"github.com/deluan/navidrome/utils"
|
||||||
@ -22,13 +22,13 @@ type MediaStreamer interface {
|
|||||||
NewStream(ctx context.Context, id string, maxBitRate int, format string) (*Stream, error)
|
NewStream(ctx context.Context, id string, maxBitRate int, format string) (*Stream, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMediaStreamer(ds model.DataStore, ffm ffmpeg.FFmpeg, cache fscache.Cache) MediaStreamer {
|
func NewMediaStreamer(ds model.DataStore, ffm transcoder.Transcoder, cache fscache.Cache) MediaStreamer {
|
||||||
return &mediaStreamer{ds: ds, ffm: ffm, cache: cache}
|
return &mediaStreamer{ds: ds, ffm: ffm, cache: cache}
|
||||||
}
|
}
|
||||||
|
|
||||||
type mediaStreamer struct {
|
type mediaStreamer struct {
|
||||||
ds model.DataStore
|
ds model.DataStore
|
||||||
ffm ffmpeg.FFmpeg
|
ffm transcoder.Transcoder
|
||||||
cache fscache.Cache
|
cache fscache.Cache
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ func (ms *mediaStreamer) NewStream(ctx context.Context, id string, maxBitRate in
|
|||||||
// If this is a brand new transcoding request, not in the cache, start transcoding
|
// If this is a brand new transcoding request, not in the cache, start transcoding
|
||||||
if w != nil {
|
if w != nil {
|
||||||
log.Trace(ctx, "Cache miss. Starting new transcoding session", "id", mf.ID)
|
log.Trace(ctx, "Cache miss. Starting new transcoding session", "id", mf.ID)
|
||||||
out, err := ms.ffm.StartTranscoding(ctx, mf.Path, bitRate, format)
|
out, err := ms.ffm.Start(ctx, mf.Path, bitRate, format)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(ctx, "Error starting transcoder", "id", mf.ID, err)
|
log.Error(ctx, "Error starting transcoder", "id", mf.ID, err)
|
||||||
return nil, os.ErrInvalid
|
return nil, os.ErrInvalid
|
||||||
|
@ -78,7 +78,7 @@ type fakeFFmpeg struct {
|
|||||||
closed bool
|
closed bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ff *fakeFFmpeg) StartTranscoding(ctx context.Context, path string, maxBitRate int, format string) (f io.ReadCloser, err error) {
|
func (ff *fakeFFmpeg) Start(ctx context.Context, path string, maxBitRate int, format string) (f io.ReadCloser, err error) {
|
||||||
ff.r = strings.NewReader(ff.Data)
|
ff.r = strings.NewReader(ff.Data)
|
||||||
return ff, nil
|
return ff, nil
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ffmpeg
|
package transcoder
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@ -12,30 +12,30 @@ import (
|
|||||||
"github.com/deluan/navidrome/log"
|
"github.com/deluan/navidrome/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type FFmpeg interface {
|
type Transcoder interface {
|
||||||
StartTranscoding(ctx context.Context, path string, maxBitRate int, format string) (f io.ReadCloser, err error)
|
Start(ctx context.Context, path string, maxBitRate int, format string) (f io.ReadCloser, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() FFmpeg {
|
func New() Transcoder {
|
||||||
return &ffmpeg{}
|
return &ffmpeg{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ffmpeg struct{}
|
type ffmpeg struct{}
|
||||||
|
|
||||||
func (ff *ffmpeg) StartTranscoding(ctx context.Context, path string, maxBitRate int, format string) (f io.ReadCloser, err error) {
|
func (ff *ffmpeg) Start(ctx context.Context, path string, maxBitRate int, format string) (f io.ReadCloser, err error) {
|
||||||
cmdLine, args := createTranscodeCommand(path, maxBitRate, format)
|
arg0, args := createTranscodeCommand(path, maxBitRate, format)
|
||||||
|
|
||||||
log.Trace(ctx, "Executing ffmpeg command", "arg0", cmdLine, "args", args)
|
log.Trace(ctx, "Executing ffmpeg command", "cmd", arg0, "args", args)
|
||||||
cmd := exec.Command(cmdLine, args...)
|
cmd := exec.Command(arg0, args...)
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
if f, err = cmd.StdoutPipe(); err != nil {
|
if f, err = cmd.StdoutPipe(); err != nil {
|
||||||
return f, err
|
return
|
||||||
}
|
}
|
||||||
if err = cmd.Start(); err != nil {
|
if err = cmd.Start(); err != nil {
|
||||||
return f, err
|
return
|
||||||
}
|
}
|
||||||
go cmd.Wait() // prevent zombies
|
go cmd.Wait() // prevent zombies
|
||||||
return f, err
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTranscodeCommand(path string, maxBitRate int, format string) (string, []string) {
|
func createTranscodeCommand(path string, maxBitRate int, format string) (string, []string) {
|
@ -1,4 +1,4 @@
|
|||||||
package ffmpeg
|
package transcoder
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
@ -10,11 +10,11 @@ import (
|
|||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFFmpeg(t *testing.T) {
|
func TestTranscoder(t *testing.T) {
|
||||||
tests.Init(t, false)
|
tests.Init(t, false)
|
||||||
log.SetLevel(log.LevelCritical)
|
log.SetLevel(log.LevelCritical)
|
||||||
RegisterFailHandler(Fail)
|
RegisterFailHandler(Fail)
|
||||||
RunSpecs(t, "FFmpeg Suite")
|
RunSpecs(t, "Transcoder Suite")
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ = Describe("createTranscodeCommand", func() {
|
var _ = Describe("createTranscodeCommand", func() {
|
@ -1,7 +1,7 @@
|
|||||||
package engine
|
package engine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/deluan/navidrome/engine/ffmpeg"
|
"github.com/deluan/navidrome/engine/transcoder"
|
||||||
"github.com/google/wire"
|
"github.com/google/wire"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,6 +16,6 @@ var Set = wire.NewSet(
|
|||||||
NewNowPlayingRepository,
|
NewNowPlayingRepository,
|
||||||
NewUsers,
|
NewUsers,
|
||||||
NewMediaStreamer,
|
NewMediaStreamer,
|
||||||
ffmpeg.New,
|
transcoder.New,
|
||||||
NewTranscodingCache,
|
NewTranscodingCache,
|
||||||
)
|
)
|
||||||
|
@ -7,7 +7,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/deluan/navidrome/engine"
|
"github.com/deluan/navidrome/engine"
|
||||||
"github.com/deluan/navidrome/engine/ffmpeg"
|
"github.com/deluan/navidrome/engine/transcoder"
|
||||||
"github.com/deluan/navidrome/persistence"
|
"github.com/deluan/navidrome/persistence"
|
||||||
"github.com/deluan/navidrome/scanner"
|
"github.com/deluan/navidrome/scanner"
|
||||||
"github.com/deluan/navidrome/server"
|
"github.com/deluan/navidrome/server"
|
||||||
@ -42,12 +42,12 @@ func CreateSubsonicAPIRouter() (*subsonic.Router, error) {
|
|||||||
ratings := engine.NewRatings(dataStore)
|
ratings := engine.NewRatings(dataStore)
|
||||||
scrobbler := engine.NewScrobbler(dataStore, nowPlayingRepository)
|
scrobbler := engine.NewScrobbler(dataStore, nowPlayingRepository)
|
||||||
search := engine.NewSearch(dataStore)
|
search := engine.NewSearch(dataStore)
|
||||||
fFmpeg := ffmpeg.New()
|
transcoderTranscoder := transcoder.New()
|
||||||
cache, err := engine.NewTranscodingCache()
|
cache, err := engine.NewTranscodingCache()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
mediaStreamer := engine.NewMediaStreamer(dataStore, fFmpeg, cache)
|
mediaStreamer := engine.NewMediaStreamer(dataStore, transcoderTranscoder, cache)
|
||||||
router := subsonic.New(browser, cover, listGenerator, users, playlists, ratings, scrobbler, search, mediaStreamer)
|
router := subsonic.New(browser, cover, listGenerator, users, playlists, ratings, scrobbler, search, mediaStreamer)
|
||||||
return router, nil
|
return router, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user