本トピックでは、LiveChannel の作成、リスト化、削除など、LiveChannel に対する一般的な操作について説明します。
LiveChannel の作成
リアルタイムメッセージングプロトコル (RTMP) を介して音声および動画データをアップロードする前に、PutLiveChannel 操作を呼び出して LiveChannel を作成する必要があります。この操作により、RTMP アップストリーミング 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() {
// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
// LiveChannel を格納するバケットの名前を指定します。
bucketName := "srcexamplebucket"
bucket,err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// LiveChannel 名を指定します。名前にスラッシュ (/) を含めることはできません。
channelName := "mychannel"
// Type が HLS に設定されている場合は、生成される .m3u8 ファイルの名前を指定します。名前は .m3u8 で終わり、長さは 6~128 バイトである必要があります。
playlistName := "playlist.m3u8"
// 高周波スナップショットを格納するバケットの名前を指定します。
destBucketName := "destexamplebucket"
// 軽量メッセージキューの 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 を無効にするには、このパラメーターを 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 インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
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 インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
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 は有効または無効にできます。
// LiveChannel が無効になっている場合、OSS はこの LiveChannel へのアップストリーミングリクエストを拒否します。クライアントがこの LiveChannel にストリームをアップストリーミングしている場合、クライアントは切断されます。これには約 10 秒かかる場合があります。
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() {
// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケット名を指定します (例: examplebucket)。
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// LiveChannel 名を指定します。
channelName := "test-sign-rtmp-url"
// プレイリスト名を指定します。
playlistName := "playlist.m3u8"
// 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("Signed 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 インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
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 インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
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 のビデオオンデマンド (VOD) プレイリストを生成します。OSS は、指定された時間範囲内に LiveChannel へのアップストリーミングから生成された .ts ファイルをクエリします。その後、OSS はそれらを .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 インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
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 インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
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 インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
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 インスタンスを作成します。
// バケットに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。
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 サンプル」をご参照ください。
PutLiveChannel API 操作の詳細については、「PutLiveChannel」をご参照ください。
ListLiveChannel API 操作の詳細については、「ListLiveChannel」をご参照ください。
PutLiveChannelStatus API 操作の詳細については、「PutLiveChannelStatus」をご参照ください。
GetLiveChannelStat API 操作の詳細については、「GetLiveChannelStat」をご参照ください。
GetLiveChannelInfo API 操作の詳細については、「GetLiveChannelInfo」をご参照ください。
PostVodPlaylist API 操作の詳細については、「PostVodPlaylist」をご参照ください。
GetVodPlaylist API 操作の詳細については、「GetVodPlaylist」をご参照ください。
GetLiveChannelHistory API 操作の詳細については、「GetLiveChannelHistory」をご参照ください。
DeleteLiveChannel API 操作の詳細については、「DeleteLiveChannel」をご参照ください。