本文介绍LiveChannel常见操作,例如创建LiveChannel、列举LiveChannel及删除LiveChannel等。
创建LiveChannel
通过RTMP协议上传音视频数据前,必须先调用该接口创建一个LiveChannel。调用PutLiveChannel接口会返回RTMP推流地址,以及对应的播放地址。
您可以使用返回的地址进行推流、播放,您还可以根据该LiveChannel的名称来发起相关的操作,如查询推流状态、查询推流记录、禁止推流等。
以下代码用于创建LiveChannel:
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填写用于存储LiveChannel的Bucket名称。
bucketName := "srcexamplebucket"
bucket,err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// 填写LiveChannel名称,LiveChannel名称不能包含正斜线(/)。
channelName := "mychannel"
// 当Type为HLS时,指定生成的m3u8文件的名称。名称必须以”.m3u8”结尾,长度范围为6~128字节。
playlistName := "playlist.m3u8"
// 填写保存高频截图的Bucket名称。
destBucketName := "destexamplebucket"
// 填写轻量消息队列SMQ的Topic名称,该Topic用于通知用户高频截图操作结果。
notify := "exampletopic"
target := oss.LiveChannelTarget{
PlaylistName: playlistName,
// 指定转储的类型,目前仅支持HLS。
Type: "HLS",
// 当Type为HLS时,指定m3u8文件中包含ts文件的个数。
FragCount: 3,
// 指定每个ts文件的时长,单位为秒。
FragDuration: 5,
}
snapshot := oss.LiveChannelSnapshot{
// 用于高频截图操作的角色名称,要求有DestBucket的写入权限以及向NotifyTopic发送消息的权限。
RoleName: "examplerole",
// 高频截图的间隔长度,单位为秒,取值范围为1~100。
Interval: 10,
DestBucket: destBucketName,
NotifyTopic: notify,
}
config := oss.LiveChannelConfiguration{
// 填写LiveChannel的描述信息,最大长度不能超过128字节。
Description : "this is my channel",
// 指定LiveChannel的状态。此处指定为enabled,表示启用LiveChannel。如需禁用LiveChannel,请将该参数设置为disabled。
Status: "enabled",
Target: target,
Snapshot: &snapshot,
}
// 创建LiveChannel。
data, err := bucket.CreateLiveChannel(channelName, config)
if err != nil {
HandleError(err)
}
fmt.Println(data)
}
列举LiveChannel
以下代码用于列举指定的LiveChannel。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填写存储空间名称。
bucketName := "yourBucketName"
bucket,err := client.Bucket(bucketName)
// 指定列举以“test”为前缀的所有LiveChannel。
prefix := "test"
if err != nil {
HandleError(err)
}
// 列举LiveChannel。
result, err := bucket.ListLiveChannel(oss.Prefix(prefix))
if err != nil {
HandleError(err)
}
fmt.Println(result)
}
设置LiveChannel状态
以下代码用于设置LiveChannel状态。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填写存储空间名称。
bucketName := "yourBucketName"
bucket,err := client.Bucket(bucketName)
// 填写LiveChannel名称。
channelName := "mychannel"
if err != nil {
HandleError(err)
}
// LiveChannel分为启用(enabled)和禁用(disabled)两种状态。
// LiveChannel处于disabled状态时,OSS会禁止您向该LiveChannel进行推流操作。如果您正在向该LiveChannel推流,那么推流的客户端会被强制断开(会有10s左右的延迟)。
err = bucket.PutLiveChannelStatus(channelName,"disabled")
if err != nil {
HandleError(err)
}
}
获取LiveChannel鉴权地址
以下代码用于获取LiveChannel鉴权地址。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写LiveChannel名称。
channelName := "test-sign-rtmp-url"
// 填写playlist名称。
playlistName := "playlist.m3u8"
// expiration表示过期时间,单位为Unix时间戳。本示例以设置过期时间为1小时为例。
expiration := time.Now().Unix() + 3600
result, err := bucket.SignRtmpURL(channelName,playlistName,expiration)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Sign Rtmp url:"+result)
}
获取LiveChannel状态信息
以下代码用于获取指定LiveChannel的推流状态信息。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填写存储空间名称。
bucketName := "yourBucketName"
bucket,err := client.Bucket(bucketName)
// 填写LiveChannel名称。
channelName := "mychannel"
if err != nil {
HandleError(err)
}
// 获取LiveChannel状态信息。
result,err := bucket.GetLiveChannelStat(channelName)
if err != nil {
HandleError(err)
}
fmt.Println(result)
}
获取LiveChannel配置信息
以下代码用于获取指定LiveChannel的配置信息。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填写存储空间名称。
bucketName := "yourBucketName"
bucket,err := client.Bucket(bucketName)
// 填写LiveChannel名称。
channelName := "mychannel"
if err != nil {
HandleError(err)
}
// 获取LiveChannel配置信息。
result,err := bucket.GetLiveChannelInfo(channelName)
if err != nil {
HandleError(err)
}
fmt.Println(result)
}
生成LiveChannel播放列表
PostVodPlaylist接口用于为指定的LiveChannel生成一个点播用的播放列表。OSS会查询指定时间范围内由该LiveChannel推流生成的ts文件,并将其拼装为一个m3u8播放列表。
以下代码用于生成LiveChannel播放列表。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填写存储空间名称。
bucketName := "yourBucketName"
bucket,err := client.Bucket(bucketName)
// 填写LiveChannel名称。
channelName := "mychannel"
playlistName := "playlist.m3u8"
// 指定查询ts文件的终止时间,默认与当前时间一致。
endTime := time.Now().Add(time.Minute)
// 指定查询ts文件的起始时间,默认为当前时间前60分钟。
startTime := endTime.Add(-60 * time.Minute)
if err != nil {
HandleError(err)
}
// 生成LiveChannel播放列表。
err = bucket.PostVodPlaylist(channelName,playlistName,startTime,endTime)
if err != nil {
HandleError(err)
}
}
查看LiveChannel播放列表
以下代码用于查看指定LiveChannel在指定时间段内推流生成的播放列表。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填写存储空间名称。
bucketName := "yourBucketName"
bucket,err := client.Bucket(bucketName)
// 填写LiveChannel名称。
channelName := "mychannel"
// 指定查询ts文件的终止时间,默认与当前时间一致。
endTime := time.Now().Add(time.Minute)
// 指定查询ts文件的起始时间,默认为当前时间前60分钟。
startTime := endTime.Add(-60 * time.Minute)
if err != nil {
HandleError(err)
}
// 查看LiveChannel播放列表。
result,err := bucket.GetVodPlaylist(channelName,startTime,endTime)
if err != nil {
HandleError(err)
}
fmt.Println(result)
}
获取LiveChannel推流记录
使用GetLiveChannelHistory接口最多会返回指定LiveChannel最近的10次推流记录。
以下代码用于获取LiveChannel推流记录。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填写存储空间名称。
bucketName := "yourBucketName"
bucket,err := client.Bucket(bucketName)
// 填写LiveChannel名称。
channelName := "mychannel"
if err != nil {
HandleError(err)
}
// 获取LiveChannel推流记录。
result,err := bucket.GetLiveChannelHistory(channelName)
if err != nil {
HandleError(err)
}
fmt.Println(result)
}
删除LiveChannel
当有客户端正在向LiveChannel推流时,删除请求会失败。
DeleteLiveChannel接口只会删除LiveChannel本身,不会删除推流生成的文件。
以下代码用于删除指定的LiveChannel。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填写存储空间名称。
bucketName := "yourBucketName"
bucket,err := client.Bucket(bucketName)
// 填写LiveChannel名称。
channelName := "mychannel"
if err != nil {
HandleError(err)
}
// 删除LiveChannel。
err := bucket.DeleteLiveChannel(channelName)
if err != nil {
HandleError(err)
}
}
相关文档
关于LiveChannel的完整示例代码,请参见GitHub示例。
关于创建LiveChannel的API接口说明,请参见PutLiveChannel。
关于列举LiveChannel的API接口说明,请参见ListLiveChannel。
关于设置LiveChannel的API接口说明,请参见PutLiveChannelStatus。
关于获取LiveChannel状态的API接口说明,请参见GetLiveChannelStat。
关于获取LiveChannel配置信息的API接口说明,请参见GetLiveChannelInfo。
关于生成LiveChannel播放列表的API接口说明,请参见PostVodPlaylist。
关于查看LiveChannel播放列表的API接口说明,请参见GetVodPlaylist。
关于获取LiveChannel推流记录的API接口说明,请参见GetLiveChannelHistory。
关于删除LiveChannel的API接口说明,请参见DeleteLiveChannel。