Go管理LiveChannel
本文介紹LiveChannel常見操作,例如創(chuàng)建LiveChannel、列舉LiveChannel及刪除LiveChannel等。
創(chuàng)建LiveChannel
通過RTMP協(xié)議上傳音視頻數(shù)據(jù)前,必須先調(diào)用該接口創(chuàng)建一個(gè)LiveChannel。調(diào)用PutLiveChannel接口會返回RTMP推流地址,以及對應(yīng)的播放地址。
您可以使用返回的地址進(jìn)行推流、播放,您還可以根據(jù)該LiveChannel的名稱來發(fā)起相關(guān)的操作,如查詢推流狀態(tài)、查詢推流記錄、禁止推流等。
以下代碼用于創(chuàng)建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() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
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"
// 當(dāng)Type為HLS時(shí),指定生成的m3u8文件的名稱。名稱必須以”.m3u8”結(jié)尾,長度范圍為6~128字節(jié)。
playlistName := "playlist.m3u8"
// 填寫保存高頻截圖的Bucket名稱。
destBucketName := "destexamplebucket"
// 填寫輕量消息隊(duì)列SMQ的Topic名稱,該Topic用于通知用戶高頻截圖操作結(jié)果。
notify := "exampletopic"
target := oss.LiveChannelTarget{
PlaylistName: playlistName,
// 指定轉(zhuǎn)儲的類型,目前僅支持HLS。
Type: "HLS",
// 當(dāng)Type為HLS時(shí),指定m3u8文件中包含ts文件的個(gè)數(shù)。
FragCount: 3,
// 指定每個(gè)ts文件的時(shí)長,單位為秒。
FragDuration: 5,
}
snapshot := oss.LiveChannelSnapshot{
// 用于高頻截圖操作的角色名稱,要求有DestBucket的寫入權(quán)限以及向NotifyTopic發(fā)送消息的權(quán)限。
RoleName: "examplerole",
// 高頻截圖的間隔長度,單位為秒,取值范圍為1~100。
Interval: 10,
DestBucket: destBucketName,
NotifyTopic: notify,
}
config := oss.LiveChannelConfiguration{
// 填寫LiveChannel的描述信息,最大長度不能超過128字節(jié)。
Description : "this is my channel",
// 指定LiveChannel的狀態(tài)。此處指定為enabled,表示啟用LiveChannel。如需禁用LiveChannel,請將該參數(shù)設(shè)置為disabled。
Status: "enabled",
Target: target,
Snapshot: &snapshot,
}
// 創(chuàng)建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() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
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)
}
設(shè)置LiveChannel狀態(tài)
以下代碼用于設(shè)置LiveChannel狀態(tài)。
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() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
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)兩種狀態(tài)。
// LiveChannel處于disabled狀態(tài)時(shí),OSS會禁止您向該LiveChannel進(jìn)行推流操作。如果您正在向該LiveChannel推流,那么推流的客戶端會被強(qiáng)制斷開(會有10s左右的延遲)。
err = bucket.PutLiveChannelStatus(channelName,"disabled")
if err != nil {
HandleError(err)
}
}
獲取LiveChannel鑒權(quán)地址
以下代碼用于獲取LiveChannel鑒權(quán)地址。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填寫B(tài)ucket名稱,例如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表示過期時(shí)間,單位為Unix時(shí)間戳。本示例以設(shè)置過期時(shí)間為1小時(shí)為例。
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狀態(tài)信息
以下代碼用于獲取指定LiveChannel的推流狀態(tài)信息。
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() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
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狀態(tài)信息。
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() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
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生成一個(gè)點(diǎn)播用的播放列表。OSS會查詢指定時(shí)間范圍內(nèi)由該LiveChannel推流生成的ts文件,并將其拼裝為一個(gè)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() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
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文件的終止時(shí)間,默認(rèn)與當(dāng)前時(shí)間一致。
endTime := time.Now().Add(time.Minute)
// 指定查詢ts文件的起始時(shí)間,默認(rèn)為當(dāng)前時(shí)間前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在指定時(shí)間段內(nèi)推流生成的播放列表。
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() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName"
bucket,err := client.Bucket(bucketName)
// 填寫LiveChannel名稱。
channelName := "mychannel"
// 指定查詢ts文件的終止時(shí)間,默認(rèn)與當(dāng)前時(shí)間一致。
endTime := time.Now().Add(time.Minute)
// 指定查詢ts文件的起始時(shí)間,默認(rèn)為當(dāng)前時(shí)間前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() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
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
當(dāng)有客戶端正在向LiveChannel推流時(shí),刪除請求會失敗。
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() {
/// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實(shí)例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實(shí)際情況填寫。
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)
}
}
相關(guān)文檔
關(guān)于LiveChannel的完整示例代碼,請參見GitHub示例。
關(guān)于創(chuàng)建LiveChannel的API接口說明,請參見PutLiveChannel。
關(guān)于列舉LiveChannel的API接口說明,請參見ListLiveChannel。
關(guān)于設(shè)置LiveChannel的API接口說明,請參見PutLiveChannelStatus。
關(guān)于獲取LiveChannel狀態(tài)的API接口說明,請參見GetLiveChannelStat。
關(guān)于獲取LiveChannel配置信息的API接口說明,請參見GetLiveChannelInfo。
關(guān)于生成LiveChannel播放列表的API接口說明,請參見PostVodPlaylist。
關(guān)于查看LiveChannel播放列表的API接口說明,請參見GetVodPlaylist。
關(guān)于獲取LiveChannel推流記錄的API接口說明,請參見GetLiveChannelHistory。
關(guān)于刪除LiveChannel的API接口說明,請參見DeleteLiveChannel。