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.
52 lines
1.6 KiB
52 lines
1.6 KiB
package live
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
|
|
aliyunlive "github.com/alibabacloud-go/live-20161101/client"
|
|
runtime "github.com/alibabacloud-go/tea-utils/v2/service"
|
|
)
|
|
|
|
type aliyunLiveClient struct {
|
|
client *aliyunlive.Client
|
|
pushDomain string
|
|
appName string
|
|
}
|
|
|
|
func newAliyunLiveClient(cfg Config) (*aliyunLiveClient, error) {
|
|
apiConfig := &openapi.Config{}
|
|
apiConfig.SetAccessKeyId(cfg.AccessKeyID).
|
|
SetAccessKeySecret(cfg.AccessKeySecret).
|
|
SetRegionId(cfg.RegionID)
|
|
if cfg.APIEndpoint != "" {
|
|
apiConfig.SetEndpoint(cfg.APIEndpoint)
|
|
}
|
|
client, err := aliyunlive.NewClient(apiConfig)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("create aliyun live client: %w", err)
|
|
}
|
|
return &aliyunLiveClient{client: client, pushDomain: cfg.PushDomain, appName: cfg.AppName}, nil
|
|
}
|
|
|
|
func (c *aliyunLiveClient) queryOnline(streamName string) (OnlineStatus, error) {
|
|
request := (&aliyunlive.DescribeLiveStreamsOnlineListRequest{}).
|
|
SetAppName(c.appName).
|
|
SetDomainName(c.pushDomain).
|
|
SetStreamName(streamName).
|
|
SetPageNum(1).
|
|
SetPageSize(100)
|
|
response, err := c.client.DescribeLiveStreamsOnlineListWithOptions(request, &runtime.RuntimeOptions{})
|
|
if err != nil {
|
|
return OnlineStatus{}, fmt.Errorf("describe aliyun live stream: %w", err)
|
|
}
|
|
if response == nil || response.Body == nil || response.Body.OnlineInfo == nil {
|
|
return OnlineStatus{}, nil
|
|
}
|
|
for _, item := range response.Body.OnlineInfo.LiveStreamOnlineInfo {
|
|
if item != nil && item.StreamName != nil && *item.StreamName == streamName {
|
|
return OnlineStatus{Online: true}, nil
|
|
}
|
|
}
|
|
return OnlineStatus{}, nil
|
|
}
|
|
|