本文介紹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。