This commit is contained in:
2023-10-25 04:31:18 +08:00
parent 9af1e9d609
commit e8f0bc4ca0
2 changed files with 27 additions and 28 deletions

View File

@@ -4,8 +4,8 @@ import (
"context" "context"
"fmt" "fmt"
"log" "log"
"net/url"
"net/http" "net/http"
"net/url"
"runtime" "runtime"
"strings" "strings"
"time" "time"
@@ -603,7 +603,7 @@ func main() {
}) })
// 获取转换后的m3u8视频链接 // 获取转换后的m3u8视频链接
http.HandleFunc("/video/", func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/video", func(w http.ResponseWriter, r *http.Request) {
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志 defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
queryParam := r.URL.Query().Get("url") queryParam := r.URL.Query().Get("url")
@@ -615,18 +615,15 @@ func main() {
} }
fmt.Println("safeParam", safeParam) fmt.Println("safeParam", safeParam)
urls := models.GetVideoM3U8(safeParam) urls, err := models.GetVideoM3U8(safeParam)
// 将对象转换为有缩进的JSON输出
json, err := json.MarshalIndent(&struct{Urls string `json:"urls"`}{
Urls: urls,
}, "", " ")
if err != nil { if err != nil {
log.Println(err) log.Println("获取视频链接失败", err)
w.WriteHeader(http.StatusBadRequest)
return return
} }
// 输出JSON // 将对象转换为有缩进的JSON输出
json, _ := json.MarshalIndent(urls, "", " ")
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
w.Write(json) w.Write(json)
}) })

View File

@@ -3,6 +3,7 @@ package models
import ( import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"log" "log"
"regexp" "regexp"
@@ -13,7 +14,7 @@ import (
"github.com/spf13/viper" "github.com/spf13/viper"
) )
func GetVideoM3U8(content string) (blob string) { func GetVideoM3U8(content string) (playinfo *vod20170321.GetPlayInfoResponseBodyPlayInfoList, err error) {
if len(regexp.MustCompile(`image.gameuiux.cn`).FindStringSubmatch(content)) > 0 { if len(regexp.MustCompile(`image.gameuiux.cn`).FindStringSubmatch(content)) > 0 {
key := regexp.MustCompile(`^https?://image.gameuiux.cn/`).ReplaceAllString(content, "") key := regexp.MustCompile(`^https?://image.gameuiux.cn/`).ReplaceAllString(content, "")
log.Println("GetVideoM3U8", key) log.Println("GetVideoM3U8", key)
@@ -25,7 +26,7 @@ func GetVideoM3U8(content string) (blob string) {
}) })
if _err != nil { if _err != nil {
log.Println("Ea", _err.Error()) log.Println("Ea", _err.Error())
return return nil, _err
} }
// 通过标题查询视频ID // 通过标题查询视频ID
response, _err := client.SearchMedia(&vod20170321.SearchMediaRequest{ response, _err := client.SearchMedia(&vod20170321.SearchMediaRequest{
@@ -33,20 +34,20 @@ func GetVideoM3U8(content string) (blob string) {
}) })
if _err != nil { if _err != nil {
log.Println("Eb", _err.Error()) log.Println("Eb", _err.Error())
return return nil, _err
} }
if len(response.Body.MediaList) > 0 && *response.Body.MediaList[0].MediaType == "video" { if len(response.Body.MediaList) > 0 && *response.Body.MediaList[0].MediaType == "video" {
// 通过ID查询视频播放地址 // 通过ID查询视频播放地址
VideoId := response.Body.MediaList[0].Video.VideoId VideoId := response.Body.MediaList[0].Video.VideoId
log.Println("GetPlayInfo", response.Body.MediaList) log.Println("GetPlayInfo", response.Body.MediaList)
result, err := client.GetPlayInfo(&vod20170321.GetPlayInfoRequest{VideoId: VideoId}) result, _err := client.GetPlayInfo(&vod20170321.GetPlayInfoRequest{VideoId: VideoId})
if err != nil { if _err != nil {
log.Println("Ex", err.Error()) log.Println("Ex", _err.Error())
return return nil, _err
} }
log.Println("GetPlayInfo", result) log.Println("GetPlayInfo", result.Body.PlayInfoList)
// TODO: 返回播放地址列表 // TODO: 返回播放地址列表
return return result.Body.PlayInfoList, nil
} }
// TODO: 保存到点播服务 // TODO: 保存到点播服务
@@ -54,10 +55,10 @@ func GetVideoM3U8(content string) (blob string) {
log.Println("无结果, 从OSS加载视频") log.Println("无结果, 从OSS加载视频")
bucket := GetBucket("gameui-image2") bucket := GetBucket("gameui-image2")
rest, err := bucket.GetObject(key) rest, _err := bucket.GetObject(key)
if err != nil { if _err != nil {
log.Println("读取视频失败", err) log.Println("读取视频失败", _err.Error())
return return nil, _err
} }
defer rest.Close() defer rest.Close()
@@ -68,7 +69,7 @@ func GetVideoM3U8(content string) (blob string) {
}) })
if _err != nil { if _err != nil {
log.Println("Ee", _err.Error()) log.Println("Ee", _err.Error())
return return nil, _err
} }
// 解码base64 // 解码base64
upload := struct { upload := struct {
@@ -79,9 +80,9 @@ func GetVideoM3U8(content string) (blob string) {
data, _ := base64.StdEncoding.DecodeString(*createUploadVideoResponse.Body.UploadAddress) data, _ := base64.StdEncoding.DecodeString(*createUploadVideoResponse.Body.UploadAddress)
json.Unmarshal(data, &upload) json.Unmarshal(data, &upload)
if bucket := GetBucket(upload.Bucket); bucket != nil { if bucket := GetBucket(upload.Bucket); bucket != nil {
if err := bucket.PutObject(upload.FileName, rest); err != nil { if err = bucket.PutObject(upload.FileName, rest); err != nil {
log.Println("上传视频失败", err) log.Println("上传视频失败", err)
return return nil, err
} }
} }
@@ -95,10 +96,11 @@ func GetVideoM3U8(content string) (blob string) {
}) })
if _err != nil { if _err != nil {
log.Println("Ef", _err.Error()) log.Println("Ef", _err.Error())
return return nil, _err
} }
fmt.Println("GetPlayInfo", getPlayInfoReponse.Body.PlayInfoList) fmt.Println("GetPlayInfo", getPlayInfoReponse.Body.PlayInfoList)
return getPlayInfoReponse.Body.PlayInfoList, nil
//// 4.2 通过播放地址播放 //// 4.2 通过播放地址播放
//getVideoPlayAuthRequest := &vod20170321.GetVideoPlayAuthRequest{ //getVideoPlayAuthRequest := &vod20170321.GetVideoPlayAuthRequest{
@@ -110,5 +112,5 @@ func GetVideoM3U8(content string) (blob string) {
//} //}
//console.Log(util.ToJSONString(tea.ToMap(getVideoPlayAuthReponse))) //console.Log(util.ToJSONString(tea.ToMap(getVideoPlayAuthReponse)))
} }
return return nil, errors.New("无效的视频地址")
} }