123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package v1
- import (
- b64 "encoding/base64"
- "fmt"
- "github.com/ChineseSubFinder/ChineseSubFinder/pkg"
- "github.com/ChineseSubFinder/ChineseSubFinder/pkg/decode"
- backend2 "github.com/ChineseSubFinder/ChineseSubFinder/pkg/types/backend"
- "github.com/gin-gonic/gin"
- "net/http"
- "net/url"
- "strconv"
- )
- // HlsPlaylist 获取 m3u8 列表
- func (cb *ControllerBase) HlsPlaylist(c *gin.Context) {
- var err error
- defer func() {
- // 统一的异常处理
- cb.ErrorProcess(c, "HlsPlaylist", err)
- }()
- videoFPathBase64 := c.Param("videofpathbase64")
- // base64 解码
- videoFPathUrlEncodeStr, err := b64.StdEncoding.DecodeString(videoFPathBase64)
- if err != nil {
- return
- }
- // url 解码
- videoFPath, err := url.QueryUnescape(string(videoFPathUrlEncodeStr))
- if err != nil {
- return
- }
- // 暂时不支持蓝光的预览
- if pkg.IsFile(videoFPath) == false {
- bok, _, _ := decode.IsFakeBDMVWorked(videoFPath)
- if bok == true {
- c.JSON(http.StatusOK, backend2.ReplyCommon{Message: "not support blu-ray preview"})
- return
- } else {
- c.JSON(http.StatusOK, backend2.ReplyCommon{Message: "video file not found"})
- return
- }
- }
- // segments/720/0/videofpathbase64
- template := fmt.Sprintf("/%s/preview/segments/{{.Resolution}}/{{.Segment}}/%v", cb.GetVersion(), videoFPathBase64)
- err = cb.hslCenter.WritePlaylist(template, videoFPath, c.Writer)
- if err != nil {
- return
- }
- }
- // HlsSegment 获取具体一个 ts 文件
- func (cb *ControllerBase) HlsSegment(c *gin.Context) {
- var err error
- defer func() {
- // 统一的异常处理
- cb.ErrorProcess(c, "HlsSegment", err)
- }()
- resolution := c.Param("resolution")
- segment := c.Param("segment")
- videoFPathBase64 := c.Param("videofpathbase64")
- // base64 解码
- videoFPathUrlEncodeStr, err := b64.StdEncoding.DecodeString(videoFPathBase64)
- if err != nil {
- return
- }
- // url 解码
- videoFPath, err := url.QueryUnescape(string(videoFPathUrlEncodeStr))
- if err != nil {
- return
- }
- segmentInt64, err := strconv.ParseInt(segment, 0, 64)
- if err != nil {
- return
- }
- resolutionInt64, err := strconv.ParseInt(resolution, 0, 64)
- if err != nil {
- return
- }
- err = cb.hslCenter.WriteSegment(videoFPath, segmentInt64, resolutionInt64, c.Writer)
- if err != nil {
- return
- }
- }
|