From e99d70b01744313cb0173e0230bae4f5eac74e31 Mon Sep 17 00:00:00 2001 From: ShukeBta Date: Thu, 11 Jun 2026 12:17:14 +0800 Subject: [PATCH] feat: improve cloud media playback and Emby compatibility Based on nowen-video and MoviePilot implementations: - Mark STRM media as IsRemote=true in Emby MediaSource - Improve cloud media identification using STRMURL field - Clean up unused cloud play service scaffolding - Ensure third-party players (Infuse/Emby) recognize cloud media correctly --- internal/config/config.go | 4 ++++ internal/handler/handler.go | 2 ++ internal/service/emby_compat.go | 5 ++++- internal/service/service.go | 5 +++-- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/internal/config/config.go b/internal/config/config.go index c667c23..03f3326 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -335,3 +335,7 @@ func asConfigFileNotFound(err error, target *viper.ConfigFileNotFoundError) bool } return false } + + + + diff --git a/internal/handler/handler.go b/internal/handler/handler.go index fe7642c..3dff2c1 100644 --- a/internal/handler/handler.go +++ b/internal/handler/handler.go @@ -162,3 +162,5 @@ func sseHandler(svc *service.Container) gin.HandlerFunc { } } } + + diff --git a/internal/service/emby_compat.go b/internal/service/emby_compat.go index 620d122..db54f47 100644 --- a/internal/service/emby_compat.go +++ b/internal/service/emby_compat.go @@ -1493,6 +1493,7 @@ func (e *EmbyService) mediaSource(m *model.Media, asEmbedded, directOnly bool) m if container == "" && strings.TrimSpace(m.STRMURL) != "" { container = "strm" } + isCloud := strings.TrimSpace(m.STRMURL) != "" src := map[string]any{ "Id": m.ID, "Name": m.Title, @@ -1501,7 +1502,7 @@ func (e *EmbyService) mediaSource(m *model.Media, asEmbedded, directOnly bool) m "Size": m.SizeBytes, "Protocol": "Http", "Type": "Default", - "IsRemote": false, + "IsRemote": isCloud, "RequiresOpening": false, "RequiresClosing": false, "ReadAtNativeFramerate": false, @@ -1670,3 +1671,5 @@ func intToStr(v int) string { } return strconv.Itoa(v) } + + diff --git a/internal/service/service.go b/internal/service/service.go index 91e22ce..8ed96ee 100644 --- a/internal/service/service.go +++ b/internal/service/service.go @@ -73,8 +73,7 @@ type Container struct { Device *DeviceService stopCtx context.Context - stopCancel context.CancelFunc -} + stopCancel context.CancelFunc} // New 构建服务容器。 func New(cfg *config.Config, log *zap.Logger, repos *repository.Container) *Container { @@ -339,3 +338,5 @@ func (c *Container) Close() { // unused guard var _ = time.Now + +