Skip to content

Commit

Permalink
Fix: alist ali ios cant play #42
Browse files Browse the repository at this point in the history
  • Loading branch information
zijiren233 committed Jan 30, 2024
1 parent f982e22 commit 74faba1
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 15 deletions.
18 changes: 12 additions & 6 deletions internal/cache/alist.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,13 @@ func NewAlistMovieCache(movie *model.Movie) *AlistMovieCache {
}

type AlistMovieCacheData struct {
URL string
AliM3U8ListFile []byte
AliSubtitles []*AliSubtitle
URL string
Ali *AlistAliCache
}

type AlistAliCache struct {
M3U8ListFile []byte
Subtitles []*AliSubtitle
}

type AliSubtitle struct {
Expand Down Expand Up @@ -131,7 +135,7 @@ func genAliM3U8ListFile(urls []*alist.FsOtherResp_VideoPreviewPlayInfo_LiveTrans
if v.Status != "finished" {
return nil
}
buf.WriteString(fmt.Sprintf("#EXT-X-STREAM-INF:RESOLUTION=%dx%d,NAME=\"%d\"\n", v.TemplateWidth, v.TemplateHeight, v.TemplateWidth))
buf.WriteString(fmt.Sprintf("#EXT-X-STREAM-INF:BANDWIDTH=%d,RESOLUTION=%dx%d,NAME=\"%d\"\n", v.TemplateWidth*v.TemplateHeight, v.TemplateWidth, v.TemplateHeight, v.TemplateWidth))
buf.WriteString(v.Url + "\n")
}
return buf.Bytes()
Expand Down Expand Up @@ -187,8 +191,10 @@ func NewAlistMovieCacheInitFunc(movie *model.Movie) func(ctx context.Context, ar
if err != nil {
return nil, err
}
cache.AliM3U8ListFile = genAliM3U8ListFile(fo.VideoPreviewPlayInfo.LiveTranscodingTaskList)
cache.AliSubtitles = newAliSubtitlesCacheInitFunc(fo.VideoPreviewPlayInfo.LiveTranscodingSubtitleTaskList)
cache.Ali = &AlistAliCache{
M3U8ListFile: genAliM3U8ListFile(fo.VideoPreviewPlayInfo.LiveTranscodingTaskList),
Subtitles: newAliSubtitlesCacheInitFunc(fo.VideoPreviewPlayInfo.LiveTranscodingSubtitleTaskList),
}
}
return cache, nil
}
Expand Down
4 changes: 2 additions & 2 deletions internal/op/movie.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func (m *Movie) ExpireId() uint64 {
default:
return uint64(crc32.ChecksumIEEE([]byte(m.Movie.ID)))
case m.Movie.Base.VendorInfo.Vendor == model.VendorAlist &&
len(m.AlistCache().Raw().AliM3U8ListFile) != 0:
m.AlistCache().Raw().Ali != nil:
return uint64(m.AlistCache().Last())
}
}
Expand All @@ -46,7 +46,7 @@ func (m *Movie) CheckExpired(expireId uint64) bool {
default:
return expireId != m.ExpireId()
case m.Movie.Base.VendorInfo.Vendor == model.VendorAlist &&
len(m.AlistCache().Raw().AliM3U8ListFile) != 0:
m.AlistCache().Raw().Ali != nil:
logrus.Info(expireId)
logrus.Info(time.Now().UnixNano())
return time.Now().UnixNano()-int64(expireId) > m.AlistCache().MaxAge()
Expand Down
14 changes: 7 additions & 7 deletions server/handlers/movie.go
Original file line number Diff line number Diff line change
Expand Up @@ -870,11 +870,11 @@ func proxyVendorMovie(ctx *gin.Context, movie *op.Movie) {
ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorResp(err))
return
}
if len(alistC.AliM3U8ListFile) != 0 {
if alistC.Ali != nil {
t := ctx.Query("t")
switch t {
case "":
ctx.Data(http.StatusOK, "audio/mpegurl", alistC.AliM3U8ListFile)
ctx.Data(http.StatusOK, "audio/mpegurl", alistC.Ali.M3U8ListFile)
return
case "subtitle":
idS := ctx.Query("id")
Expand All @@ -887,11 +887,11 @@ func proxyVendorMovie(ctx *gin.Context, movie *op.Movie) {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
}
if id >= len(alistC.AliSubtitles) {
if id >= len(alistC.Ali.Subtitles) {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("id out of range"))
return
}
data, err := alistC.AliSubtitles[id].Cache.Get(ctx)
data, err := alistC.Ali.Subtitles[id].Cache.Get(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorResp(err))
return
Expand Down Expand Up @@ -1043,7 +1043,7 @@ func genVendorMovie(ctx context.Context, user *op.User, opMovie *op.Movie) (*dbM
return nil, err
}

if len(data.AliM3U8ListFile) != 0 {
if len(data.Ali.M3U8ListFile) != 0 {
rawPath, err := url.JoinPath("/api/movie/proxy", movie.RoomID, movie.ID)
if err != nil {
return nil, err
Expand All @@ -1054,9 +1054,9 @@ func genVendorMovie(ctx context.Context, user *op.User, opMovie *op.Movie) (*dbM
movie.Base.Url = u.String()
movie.Base.Type = "m3u8"

for i, s := range data.AliSubtitles {
for i, s := range data.Ali.Subtitles {
if movie.Base.Subtitles == nil {
movie.Base.Subtitles = make(map[string]*dbModel.Subtitle, len(data.AliSubtitles))
movie.Base.Subtitles = make(map[string]*dbModel.Subtitle, len(data.Ali.Subtitles))
}
movie.Base.Subtitles[s.Raw.Language] = &dbModel.Subtitle{
URL: fmt.Sprintf("/api/movie/proxy/%s/%s?t=subtitle&id=%d", movie.RoomID, movie.ID, i),
Expand Down

0 comments on commit 74faba1

Please sign in to comment.