すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for Goを使用したLiveChannelsの管理

最終更新日:Sep 30, 2024

このトピックでは、LiveChannelsの作成、一覧表示、削除など、LiveChannelsで実行できる一般的な操作について説明します。

LiveChannelを作成する

リアルタイムメッセージングプロトコル (RTMP) を使用してオーディオおよびビデオデータをアップロードする前に、PutLiveChannel操作を呼び出してLiveChannelを作成する必要があります。 PutLiveChannelリクエストへの応答には、LiveChannelにストリームを取り込むために使用されるURLと、取り込まれたストリームを再生するために使用されるURLが含まれます。

重要

返されたURLを使用して、ストリームを取り込み、再生できます。 ストリーム取り込みステータスの照会、ストリーム取り込みレコードの照会、ストリーム取り込みの無効化など、返された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() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    // Specify the name of the bucket that is used to store the LiveChannel. 
    bucketName := "srcexamplebucket"
    bucket,err := client.Bucket(bucketName)

    if err != nil {
        HandleError(err)
    }

    // Specify the name of the LiveChannel that you want to create. The name cannot contain forward slashes (/). 
    channelName := "mychannel"
    // If you set Type to HLS, you must specify the name of the generated m3u8 file. The name must be 6 to 128 bytes in length and end with .m3u8. 
    playlistName := "playlist.m3u8"
    // Specify the name of the bucket that stores the results of high-frequency snapshot operations. 
    destBucketName := "destexamplebucket"
    // Specify the name of the SMQ topic that is used to notify users of the results of high-frequency screenshot operations. 
    notify := "exampletopic"
    target := oss.LiveChannelTarget{
        PlaylistName: playlistName,
        // Specify the format in which the LiveChannel stores the uploaded data. Only the HLS format is supported. 
        Type:         "HLS",
        // If you set Type to HLS, you must specify the number of TS files that are included in the m3u8 file. 
        FragCount:   3,
        // Specify the duration of each TS file. Unit: seconds. 
        FragDuration:   5,
    }
   
    snapshot := oss.LiveChannelSnapshot{
        // Specify the name of the role that is used to perform high-frequency snapshot operations. The role must have the write permissions on DestBucket and the permission to send messages to NotifyTopic. 
        RoleName:    "examplerole",
        // Specify the interval of high-frequency snapshot operations. Unit: seconds. Valid values: 1 to 100. 
        Interval:    10,        
        DestBucket:  destBucketName,
        NotifyTopic: notify,
    }
    config := oss.LiveChannelConfiguration{
        // Specify the description of the LiveChannel. The description can be up to 128 bytes in length. 
        Description : "this is my channel",
        // Specify the status of the LiveChannel. In this example, the Status parameter is set to enabled, which indicates that the LiveChannel is enabled. If you want to disable the LiveChannel, set the Status parameter to disabled. 
        Status:      "enabled",
        Target:      target,
        Snapshot: &snapshot,
    }

    // Create the LiveChannel. 
   data, err := bucket.CreateLiveChannel(channelName, config)
   if err != nil {
       HandleError(err)
   }
   fmt.Println(data)
}

LiveChannelsのリスト

次のコードは、LiveChannelsを一覧表示する方法の例です。

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() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    // Specify the name of the bucket. 
    bucketName := "yourBucketName"
    bucket,err := client.Bucket(bucketName)
    // Specify that LiveChannels whose names contain the test prefix are listed. 
    prefix := "test"

    if err != nil {
        HandleError(err)
    }

    // List the LiveChannels. 
    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() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    // Specify the name of the bucket. 
    bucketName := "yourBucketName"
    bucket,err := client.Bucket(bucketName)
    // Specify the name of the LiveChannel. 
    channelName := "mychannel"
   
    if err != nil {
         HandleError(err)
    }

    // A LiveChannel can be in one of the following states: enabled or disabled. 
    // If a LiveChannel is in the disabled state, you cannot ingest streams to the LiveChannel. If you ingest a stream to a LiveChannel that is in the disabled state, your client is disconnected from the LiveChannel after approximately 10 seconds. 
    err = bucket.PutLiveChannelStatus(channelName,"disabled")
    if err != nil {
        HandleError(err)
     }
}

LiveChannelの署名付きURLの照会

次のコードは、LiveChannelの署名付きURLを照会する方法の例を示しています。

package main

import (
    "fmt"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)

func main() {

    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Specify the name of the bucket. Example: examplebucket. 
    bucket, err := client.Bucket("examplebucket")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // Specify the name of the LiveChannel. 
    channelName := "test-sign-rtmp-url"
    // Specify the name of the playlist. 
    playlistName := "playlist.m3u8"
    // The expiration parameter indicates the validity period of the signed URL and is a timestamp that follows the UNIX time format. In this example, the validity period is set to 1 hour. 
    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() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    // Specify the name of the bucket. 
    bucketName := "yourBucketName"
    bucket,err := client.Bucket(bucketName)
    // Specify the name of the LiveChannel. 
    channelName := "mychannel"

    if err != nil {
        HandleError(err)
    }

    // Query the stream ingest status of the 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() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    // Specify the name of the bucket. 
    bucketName := "yourBucketName"
    bucket,err := client.Bucket(bucketName)
    // Specify the name of the LiveChannel. 
    channelName := "mychannel"

    if err != nil {
        HandleError(err)
    }

    // Query the configurations of the LiveChannel. 
    result,err := bucket.GetLiveChannelInfo(channelName)
    if err != nil {
        HandleError(err)
    }
    fmt.Println(result)
}

LiveChannelのプレイリストを生成する

PostVodPlaylist操作を呼び出して、ビデオオンデマンド (VOD) に使用される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() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    // Specify the name of the bucket. 
    bucketName := "yourBucketName"
    bucket,err := client.Bucket(bucketName)
    // Specify the name of the LiveChannel. 
    channelName := "mychannel"
    playlistName := "playlist.m3u8"
    // Specify the end time of the time range during which the TS files that you want to query are generated. By default, the end time is the same as the current time. 
    endTime := time.Now().Add(time.Minute)
    // Specify the start time of the time range during which the TS files that you want to query are generated. By default, the start time is 60 minutes earlier than the current time. 
    startTime := endTime.Add(-60 * time.Minute)

    if err != nil {
        HandleError(err)
    }

    // Generate a playlist for the 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() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    // Specify the name of the bucket. 
    bucketName := "yourBucketName"
    bucket,err := client.Bucket(bucketName)
    // Specify the name of the LiveChannel. 
    channelName := "mychannel"
    
    // Specify the end time of the time range during which the TS files that you want to query are generated. By default, the end time is the same as the current time. 
    endTime := time.Now().Add(time.Minute)
    // Specify the start time of the time range during which the TS files that you want to query are generated. By default, the start time is 60 minutes earlier than the current time. 
    startTime := endTime.Add(-60 * time.Minute)

    if err != nil {
        HandleError(err)
    }

    // Query the playlist of the 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() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    // Specify the name of the bucket. 
    bucketName := "yourBucketName"
    bucket,err := client.Bucket(bucketName)
    // Specify the name of the LiveChannel. 
    channelName := "mychannel"

    if err != nil {
        HandleError(err)
    }

    // Query the stream ingest records of the LiveChannel. 
    result,err := bucket.GetLiveChannelHistory(channelName)
    if err != nil {
        HandleError(err)
    }
    fmt.Println(result)
}

LiveChannelを削除する

重要
  • クライアントがストリームを取り込んでいるLiveChannelを削除するDeleteLiveChannelリクエストを送信すると、リクエストは失敗します。

  • DeleteLiveChannel操作は、LiveChannelのみを削除し、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() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    // Specify the name of the bucket. 
    bucketName := "yourBucketName"
    bucket,err := client.Bucket(bucketName)
    // Specify the name of the LiveChannel. 
    channelName := "mychannel"

    if err != nil {
        HandleError(err)
    }

    // Delete the LiveChannel. 
    err := bucket.DeleteLiveChannel(channelName)
    if err != nil {
        HandleError(err)
    }
 }

関連ドキュメント

  • LiveChannelsの完全なサンプルコードの詳細については、『GitHub』をご参照ください。

  • LiveChannelを作成するために呼び出すことができるAPI操作の詳細については、「PutLiveChannel」をご参照ください。

  • LiveChannelsを一覧表示するために呼び出すAPI操作の詳細については、「ListLiveChannel」をご参照ください。

  • LiveChannelのステータスを設定するために呼び出すことができるAPI操作の詳細については、「PutLiveChannelStatus」をご参照ください。

  • LiveChannelのストリーム取り込みステータスを照会するために呼び出すことができるAPI操作の詳細については、「GetLiveChannelStat」をご参照ください。

  • LiveChannelの構成を照会するために呼び出すことができるAPI操作の詳細については、「GetLiveChannelInfo」をご参照ください。

  • LiveChannelのプレイリストを生成するために呼び出すAPI操作の詳細については、「PostVodPlaylist」をご参照ください。

  • LiveChannelのプレイリストを照会するために呼び出すAPI操作の詳細については、「GetVodPlaylist」をご参照ください。

  • LiveChannelのストリーム取り込みレコードを照会するために呼び出すことができるAPI操作の詳細については、「GetLiveChannelHistory」をご参照ください。

  • LiveChannelを削除するために呼び出すことができるAPI操作の詳細については、「DeleteLiveChannel」をご参照ください。