You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.5 KiB

5 years ago
package task
import (
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
vod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717"
"live/app/lib/config"
live2 "live/app/logic/live"
live3 "live/app/model/live"
"log"
"net/url"
"strconv"
)
type Live struct {
}
func (live *Live) Run() {
credential := common.NewCredential(
config.Config.Section("tencent").Key("secretId").String(),
config.Config.Section("tencent").Key("secretKey").String(),
)
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "vod.tencentcloudapi.com"
client, _ := vod.NewClient(credential, "", cpf)
request := vod.NewPullEventsRequest()
request1 := vod.NewConfirmEventsRequest()
for {
response, err := client.PullEvents(request)
if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok {
if sdkErr.GetCode() == "ResourceNotFound" {
continue
} else {
log.Println("回调错误err:", err)
continue
}
5 years ago
}
handle := []string{}
for _, event := range response.Response.EventSet {
handle = append(handle, *event.EventHandle)
switch *event.EventType {
case "NewFileUpload":
live.upSuc(event)
}
}
request1.EventHandles = common.StringPtrs(handle)
client.ConfirmEvents(request1)
}
}
// @Title 视频上传完成
func (live *Live) upSuc(event *vod.EventContent) {
if event.FileUploadEvent != nil {
switch *event.FileUploadEvent.MediaBasicInfo.SourceInfo.SourceType {
case "Record":
live.record(event)
}
}
}
// @Title 录播完成
func (live *Live) record(event *vod.EventContent) {
log.Println("视频录制完成")
query, _ := url.Parse(*event.FileUploadEvent.MediaBasicInfo.SourceInfo.SourceContext)
liveItemId, _ := strconv.ParseUint(query.Query().Get("liveItemId"), 10, 64)
liveItemModel := &live3.LiveItem{}
liveItemInfo := liveItemModel.FindById(uint(liveItemId))
if liveItemInfo.Id <= 0 {
log.Println("直播场次获取失败,err:", liveItemId)
return
}
liveItemModel.UpdateById(liveItemInfo.Id, map[string]interface{}{
"file_id": event.FileUploadEvent.FileId,
"video_url": event.FileUploadEvent.MediaBasicInfo.MediaUrl,
})
if liveItemInfo.Status == live3.LIVE_STATUS_ing {
// 尚未结束直播
if err := live2.LiveLogic.Stop(liveItemInfo.UserId, liveItemInfo.Id); err != nil {
log.Println("直播结束失败err:", err)
return
}
}
}