Files
djk/internal/app/ui_emby_media.go

59 lines
1.7 KiB
Go

package app
import (
"net/http"
"strings"
)
func (app *UIApp) handleEmbyStream(writer http.ResponseWriter, request *http.Request) {
if !app.mediaResources().snapshot().Enabled {
app.handleEmbyLegacyStream(writer, request)
return
}
id, chapter, ok := app.authorizeEmby(writer, request)
if !ok {
return
}
if request.Method == http.MethodHead {
writer.Header().Set("Content-Type", "application/octet-stream")
return
}
session := app.acquireEmbyPlayback(writer, request, id, chapter, "", false)
if session == nil {
return
}
defer app.releaseEmbyPlayback(session)
if session.native != nil {
app.serveEmbyPlaylist(writer, request, session)
return
}
writer.Header().Set("Location", session.media.plan.URL)
writer.Header().Set("Cache-Control", "private, no-store")
writer.WriteHeader(http.StatusFound)
}
func (app *UIApp) handleEmbyMediaAsset(writer http.ResponseWriter, request *http.Request) {
id, chapter, ok := app.authorizeEmby(writer, request)
if !ok {
return
}
parts := strings.Split(strings.TrimPrefix(request.URL.Path, "/api/emby/media/"), "/")
if len(parts) != 2 || parts[0] == "" || parts[1] == "" {
http.NotFound(writer, request)
return
}
session := app.acquireEmbyPlayback(writer, request, id, chapter, parts[0], false)
if session == nil {
return
}
defer app.releaseEmbyPlayback(session)
media := session.media
if media == nil {
app.writeEmbyPlaybackError(writer, request, http.StatusGone, "播放格式已变化,请重新播放")
return
}
active := &playbackRunContext{id: session.id, run: session.run, session: session, ctx: media.ctx}
writer = &playbackActivityWriter{ResponseWriter: writer, app: app, run: active}
app.serveMediaSession(writer, request, media)
}