emby

package
v1.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 8, 2024 License: GPL-3.0 Imports: 29 Imported by: 0

Documentation

Index

Constants

View Source
const (
	QueryApiKeyName    = "api_key"
	QueryTokenName     = "X-Emby-Token"
	HeaderAuthName     = "Authorization"
	HeaderFullAuthName = "X-Emby-Authorization"
)
View Source
const (

	// ItemsCacheSpace 专门存放 items 信息的缓存空间
	ItemsCacheSpace = "UserItems"

	// ResortMinNum 至少请求多少个 item 时才会走重排序逻辑
	ResortMinNum = 300
)
View Source
const (

	// PlaybackCacheSpace PlaybackInfo 的缓存空间 key
	PlaybackCacheSpace = "PlaybackInfo"

	// MasterM3U8UrlTemplate 转码 m3u8 地址模板
	MasterM3U8UrlTemplate = `` /* 764-byte string literal not displayed */

	// PlaybackCommonPayload 请求 PlaybackInfo 的通用请求体
	PlaybackCommonPayload = `` /* 4055-byte string literal not displayed */
)
View Source
const AuthUri = "/emby/Auth/Keys"

AuthUri 鉴权地址

通过此 uri, 可以判断出客户端传递的 api_key 是否是被 emby 服务器认可的

View Source
const MediaSourceIdSegment = "[[_]]"

MediaSourceIdSegment 自定义 MediaSourceId 的分隔符

View Source
const UnauthorizedResp = "Access token is invalid or expired."

Variables

View Source
var (

	// ValidCacheItemsTypeRegex 校验 Items 的 Type 参数, 通过正则才覆盖 PlaybackInfo 缓存
	ValidCacheItemsTypeRegex = regexp.MustCompile(`(?i)(movie|episode)`)

	// UnvalidCacheItemsUARegex 特定客户端的 Items 请求, 不覆盖 PlaybackInfo 缓存
	UnvalidCacheItemsUARegex = regexp.MustCompile(`(?i)(infuse)`)
)
View Source
var NoRedirectClients = map[string]struct{}{
	"Emby for iOS":     {},
	"Emby for macOS":   {},
	"Emby for Android": {},
}

NoRedirectClients 不使用重定向的客户端

Functions

func AddDefaultApiKey

func AddDefaultApiKey(c *gin.Context)

AddDefaultApiKey 为请求加上 api_key

如果检测到已经包含了 api_key 或者 X-Emby-Token 则取消操作

如果已经成功加上了 api_key, 则移除请求头的 Authorization 属性

func ApiKeyChecker

func ApiKeyChecker() gin.HandlerFunc

ApiKeyChecker 对指定的 api 进行鉴权

该中间件会将客户端传递的 api_key 发送给 emby 服务器, 如果 emby 返回 401 异常 说明这个 api_key 是客户端伪造的, 阻断客户端的请求

func Fetch

func Fetch(uri, method string, header http.Header, body map[string]interface{}) (model.HttpRes[*jsons.Item], http.Header)

Fetch 请求 emby api 接口, 使用 map 请求体

如果 uri 中不包含 token, 自动从配置中取 token 进行拼接

func HandleImages added in v1.0.8

func HandleImages(c *gin.Context)

HandleImages 处理图片请求

修改图片质量参数为配置值

func LoadCacheItems

func LoadCacheItems(c *gin.Context)

LoadCacheItems 拦截并代理 items 接口

如果 PlaybackInfo 缓存空间有相应的缓存 则将缓存中的 MediaSources 信息覆盖到响应中

防止转码资源信息丢失

func ProxyOrigin

func ProxyOrigin(c *gin.Context)

ProxyOrigin 将请求代理到源服务器

func ProxySocket

func ProxySocket() func(*gin.Context)

func ProxySubtitles

func ProxySubtitles(c *gin.Context)

ProxySubtitles 字幕代理, 过期时间设置为 30 天

func RandomItemsWithLimit

func RandomItemsWithLimit(c *gin.Context)

RandomItemsWithLimit 代理原始的随机列表接口

func RawFetch

func RawFetch(uri, method string, header http.Header, body io.ReadCloser) (model.HttpRes[*jsons.Item], http.Header)

RawFetch 请求 emby api 接口, 使用流式请求体

如果 uri 中不包含 token, 自动从配置中取 token 进行拼接

func Redirect2AlistLink(c *gin.Context)

Redirect2AlistLink 重定向资源到 alist 网盘直链

func Redirect2Transcode

func Redirect2Transcode(c *gin.Context)

Redirect2Transcode 将 master 请求重定向到本地 ts 代理

func RedirectOrigin

func RedirectOrigin(c *gin.Context)

RedirectOrigin 将 GET 请求 308 重定向到源服务器 其他请求走本地代理

func ResortEpisodes

func ResortEpisodes(c *gin.Context)

ResortEpisodes 代理剧集列表请求

如果开启了 emby.episodes-unplay-prior 配置, 则会将未播剧集排在前面位置

func ResortRandomItems

func ResortRandomItems(c *gin.Context)

ResortRandomItems 对随机的 items 列表进行重排序

func TestProxyUri

func TestProxyUri(c *gin.Context) bool

TestProxyUri 用于测试的代理, 主要是为了查看实际请求的详细信息, 方便测试

func TransferPlaybackInfo

func TransferPlaybackInfo(c *gin.Context)

TransferPlaybackInfo 代理 PlaybackInfo 接口, 防止客户端转码

Types

type ApiKeyType

type ApiKeyType string

ApiKeyType 标记 emby 支持的不同种 api_key 传递方式

const (
	Query  ApiKeyType = "query"  // query 参数中的 api_key
	Header ApiKeyType = "header" // 请求头中的 Authorization
)

type ItemInfo

type ItemInfo struct {
	Id              string // item id
	MsInfo          MsInfo // MediaSourceId 解析信息
	ApiKey          string // emby 接口密钥
	PlaybackInfoUri string // item 信息查询接口 uri, 通过源服务器查询
}

ItemInfo emby 资源 item 解析信息

type MsInfo

type MsInfo struct {
	Empty            bool   // 传递的 id 是否是个空值
	Transcode        bool   // 是否请求转码的资源
	OriginId         string // 原始 MediaSourceId
	RawId            string // 未经过解析的原始请求 Id
	TemplateId       string // alist 中转码资源的模板 id
	Format           string // 转码资源的格式, 比如:1920x1080
	SourceNamePrefix string // 转码资源名称前缀
	AlistPath        string // 资源在 alist 中的地址
}

MsInfo MediaSourceId 解析信息

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL