59 lines
1.7 KiB
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)
|
|
}
|