hls.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package v1
  2. import (
  3. b64 "encoding/base64"
  4. "fmt"
  5. "github.com/gin-gonic/gin"
  6. "strconv"
  7. )
  8. // HlsPlaylist 获取 m3u8 列表
  9. func (cb *ControllerBase) HlsPlaylist(c *gin.Context) {
  10. var err error
  11. defer func() {
  12. // 统一的异常处理
  13. cb.ErrorProcess(c, "HlsPlaylist", err)
  14. }()
  15. videoFPathBase64 := c.Param("videofpathbase64")
  16. videoFPath, err := b64.StdEncoding.DecodeString(videoFPathBase64)
  17. if err != nil {
  18. return
  19. }
  20. // segments/720/0/videofpathbase64
  21. template := fmt.Sprintf("/%s/preview/segments/{{.Resolution}}/{{.Segment}}/%v", cb.GetVersion(), videoFPathBase64)
  22. err = cb.hslCenter.WritePlaylist(template, string(videoFPath), c.Writer)
  23. if err != nil {
  24. return
  25. }
  26. }
  27. // HlsSegment 获取具体一个 ts 文件
  28. func (cb *ControllerBase) HlsSegment(c *gin.Context) {
  29. var err error
  30. defer func() {
  31. // 统一的异常处理
  32. cb.ErrorProcess(c, "HlsSegment", err)
  33. }()
  34. resolution := c.Param("resolution")
  35. segment := c.Param("segment")
  36. videoFPathBase64 := c.Param("videofpathbase64")
  37. videoFPath, err := b64.StdEncoding.DecodeString(videoFPathBase64)
  38. if err != nil {
  39. return
  40. }
  41. segmentInt64, err := strconv.ParseInt(segment, 0, 64)
  42. if err != nil {
  43. return
  44. }
  45. resolutionInt64, err := strconv.ParseInt(resolution, 0, 64)
  46. if err != nil {
  47. return
  48. }
  49. err = cb.hslCenter.WriteSegment(string(videoFPath), segmentInt64, resolutionInt64, c.Writer)
  50. if err != nil {
  51. return
  52. }
  53. }