全部產品
Search
文件中心

Object Storage Service:Go管理LiveChannel

更新時間:Sep 15, 2024

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

相關文檔