上传视频
This commit is contained in:
17
README.md
17
README.md
@@ -13,6 +13,23 @@
|
||||
|
||||
// GET /img/{type}-{id}.{format}?width=320&height=320&fit=cover
|
||||
// 更优雅的实现, 使用查询参数的接口 (不幸的是CDN与OSS都不支持)
|
||||
|
||||
// endpoint: oss-cn-shanghai-internal.aliyuncs.com
|
||||
|
||||
// 获取查询参数
|
||||
let queryParam = "example query";
|
||||
|
||||
// 安全地编码查询参数
|
||||
let safeParam = encodeURIComponent(queryParam);
|
||||
|
||||
// 创建一个带有安全查询参数的URL
|
||||
let url = "http://example.com/tags?param=" + safeParam;
|
||||
|
||||
// 使用fetch API发送请求
|
||||
fetch(url)
|
||||
.then(response => response.json())
|
||||
.then(data => console.log(data))
|
||||
.catch(error => console.error('Error:', error));
|
||||
```
|
||||
|
||||
|
||||
|
@@ -614,6 +614,7 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("safeParam", safeParam)
|
||||
urls := models.GetVideoM3U8(safeParam)
|
||||
|
||||
// 将对象转换为有缩进的JSON输出
|
||||
|
159
models/video.go
159
models/video.go
@@ -1,104 +1,105 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
openapi "github.com/alibabacloud-go/darabonba-openapi/client"
|
||||
//util "github.com/alibabacloud-go/tea-utils/service"
|
||||
//console "github.com/alibabacloud-go/tea-console/client"
|
||||
env "github.com/alibabacloud-go/darabonba-env/client"
|
||||
vod20170321 "github.com/alibabacloud-go/vod-20170321/v2/client"
|
||||
"github.com/alibabacloud-go/tea/tea"
|
||||
|
||||
"log"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"regexp"
|
||||
|
||||
openapi "github.com/alibabacloud-go/darabonba-openapi/client"
|
||||
"github.com/alibabacloud-go/tea/tea"
|
||||
vod20170321 "github.com/alibabacloud-go/vod-20170321/v2/client"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
// 使用AK&SK初始化账号Client
|
||||
func InitVodClient (accessKeyId *string, accessKeySecret *string, regionId *string) (_result *vod20170321.Client, _err error) {
|
||||
config := &openapi.Config{}
|
||||
config.AccessKeyId = accessKeyId
|
||||
config.AccessKeySecret = accessKeySecret
|
||||
config.RegionId = regionId
|
||||
_result = &vod20170321.Client{}
|
||||
_result, _err = vod20170321.NewClient(config)
|
||||
return _result, _err
|
||||
}
|
||||
|
||||
func GetVideoM3U8(content string) (blob string) {
|
||||
if len(regexp.MustCompile(`image.gameuiux.cn`).FindStringSubmatch(content)) > 0 {
|
||||
key := regexp.MustCompile(`^https?://image.gameuiux.cn/`).ReplaceAllString(content, "")
|
||||
log.Println("GetVideoM3U8", key)
|
||||
// 连接点播服务的OSS
|
||||
client, _err := vod20170321.NewClient(&openapi.Config{
|
||||
AccessKeyId: tea.String(viper.GetString("video.accessID")),
|
||||
AccessKeySecret: tea.String(viper.GetString("video.accessKey")),
|
||||
RegionId: tea.String("cn-shanghai"),
|
||||
})
|
||||
if _err != nil {
|
||||
log.Println("Ea", _err.Error())
|
||||
return
|
||||
}
|
||||
// 通过标题查询视频ID
|
||||
response, _err := client.SearchMedia(&vod20170321.SearchMediaRequest{
|
||||
Match: tea.String(fmt.Sprintf("Title='%s'", key)),
|
||||
})
|
||||
if _err != nil {
|
||||
log.Println("Eb", _err.Error())
|
||||
return
|
||||
}
|
||||
if len(response.Body.MediaList) > 0 && *response.Body.MediaList[0].MediaType == "video" {
|
||||
// 通过ID查询视频播放地址
|
||||
VideoId := response.Body.MediaList[0].Video.VideoId
|
||||
log.Println("GetPlayInfo", response.Body.MediaList)
|
||||
result, err := client.GetPlayInfo(&vod20170321.GetPlayInfoRequest{VideoId: VideoId})
|
||||
if err != nil {
|
||||
log.Println("Ex", err.Error())
|
||||
return
|
||||
}
|
||||
log.Println("GetPlayInfo", result)
|
||||
// TODO: 返回播放地址列表
|
||||
return
|
||||
}
|
||||
|
||||
// 从OSS中读取视频
|
||||
// TODO: 保存到点播服务
|
||||
// TODO: 返回生成后的视频地址(如果已经在生成, 上锁防止重复请求)
|
||||
|
||||
log.Println("无结果, 从OSS加载视频")
|
||||
bucket := GetBucket("gameui-image2")
|
||||
body, err := bucket.GetObject(key)
|
||||
rest, err := bucket.GetObject(key)
|
||||
if err != nil {
|
||||
log.Println("读取视频失败", err)
|
||||
return
|
||||
}
|
||||
defer body.Close()
|
||||
defer rest.Close()
|
||||
|
||||
// 先打印出视频对象
|
||||
fmt.Println(body)
|
||||
|
||||
// 配置
|
||||
accessKeyID := viper.GetString("video.accessKeyID")
|
||||
accessKeySecret := viper.GetString("video.accessKey")
|
||||
//endpoint := viper.GetString("video.endpoint")
|
||||
regionId := "cn-shanghai"
|
||||
|
||||
// 连接点播服务的OSS
|
||||
client, _err := InitVodClient(env.GetEnv(tea.String(accessKeyID)), env.GetEnv(tea.String(accessKeySecret)), ®ionId)
|
||||
// 1.获取视频上传地址和凭证,并生成视频信息
|
||||
createUploadVideoResponse, _err := client.CreateUploadVideo(&vod20170321.CreateUploadVideoRequest{
|
||||
Title: tea.String(key),
|
||||
FileName: tea.String(key),
|
||||
})
|
||||
if _err != nil {
|
||||
return _err.Error()
|
||||
log.Println("Ee", _err.Error())
|
||||
return
|
||||
}
|
||||
// 解码base64
|
||||
upload := struct {
|
||||
Endpoint string `json:"Endpoint"`
|
||||
Bucket string `json:"Bucket"`
|
||||
FileName string `json:"FileName"`
|
||||
}{}
|
||||
data, _ := base64.StdEncoding.DecodeString(*createUploadVideoResponse.Body.UploadAddress)
|
||||
json.Unmarshal(data, &upload)
|
||||
if bucket := GetBucket(upload.Bucket); bucket != nil {
|
||||
if err := bucket.PutObject(upload.FileName, rest); err != nil {
|
||||
log.Println("上传视频失败", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println(client)
|
||||
fmt.Println("上传视频结束")
|
||||
|
||||
return "空"
|
||||
// fmt.Println("UploadAuth", *createUploadVideoResponse.Body.UploadAuth)
|
||||
// 4.媒体上传完成之后,可以获取媒体播放信息进行播放
|
||||
// 4.1 通过播放凭证播放
|
||||
getPlayInfoReponse, _err := client.GetPlayInfo(&vod20170321.GetPlayInfoRequest{
|
||||
VideoId: createUploadVideoResponse.Body.VideoId,
|
||||
})
|
||||
if _err != nil {
|
||||
log.Println("Ef", _err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("GetPlayInfo", getPlayInfoReponse.Body.PlayInfoList)
|
||||
|
||||
//// 1.获取视频上传地址和凭证,并生成视频信息
|
||||
//createUploadVideoRequest := &vod20170321.CreateUploadVideoRequest{
|
||||
// Title: args[1],
|
||||
// FileName: args[2],
|
||||
//}
|
||||
//createUploadVideoResponse, _err := client.CreateUploadVideo(createUploadVideoRequest)
|
||||
//if _err != nil {
|
||||
// return _err.Error()
|
||||
//}
|
||||
//console.Log(util.ToJSONString(tea.ToMap(createUploadVideoResponse)))
|
||||
//// 媒体id
|
||||
//uploadVideoId := createUploadVideoResponse.Body.VideoId
|
||||
//console.Log(uploadVideoId)
|
||||
//// 如果视频文件过大,上传超时后可以刷新视频凭证,然后继续上传
|
||||
//refreshUploadVideoRequest := &vod20170321.RefreshUploadVideoRequest{
|
||||
// VideoId: uploadVideoId,
|
||||
//}
|
||||
//refreshUploadVideoReponse, _err := client.RefreshUploadVideo(refreshUploadVideoRequest)
|
||||
//if _err != nil {
|
||||
// return _err
|
||||
//}
|
||||
//console.Log(util.ToJSONString(tea.ToMap(refreshUploadVideoReponse)))
|
||||
//// 2.oss视频文件上传,需要用户实现
|
||||
//// 3.上传过程中,获取媒体上传详情
|
||||
//getUploadDetailsRequest := &vod20170321.GetUploadDetailsRequest{
|
||||
// MediaIds: uploadVideoId,
|
||||
//}
|
||||
//getUploadDetailsReponse, _err := client.GetUploadDetails(getUploadDetailsRequest)
|
||||
//if _err != nil {
|
||||
// return _err
|
||||
//}
|
||||
//console.Log(util.ToJSONString(tea.ToMap(getUploadDetailsReponse)))
|
||||
//// 4.媒体上传完成之后,可以获取媒体播放信息进行播放
|
||||
//// 4.1 通过播放凭证播放
|
||||
//getPlayInfoRequest := &vod20170321.GetPlayInfoRequest{
|
||||
// VideoId: uploadVideoId,
|
||||
//}
|
||||
//getPlayInfoReponse, _err := client.GetPlayInfo(getPlayInfoRequest)
|
||||
//if _err != nil {
|
||||
// return _err
|
||||
//}
|
||||
//console.Log(util.ToJSONString(tea.ToMap(getPlayInfoReponse)))
|
||||
//// 4.2 通过播放地址播放
|
||||
//getVideoPlayAuthRequest := &vod20170321.GetVideoPlayAuthRequest{
|
||||
// VideoId: uploadVideoId,
|
||||
@@ -110,4 +111,4 @@ func GetVideoM3U8(content string) (blob string) {
|
||||
//console.Log(util.ToJSONString(tea.ToMap(getVideoPlayAuthReponse)))
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user