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

Object Storage Service:LiveChannel の管理 (Python SDK V1)

最終更新日:Nov 30, 2025

このトピックでは、Python ソフトウェア開発キット (SDK) を使用した LiveChannel の作成、一覧表示、削除など、一般的な LiveChannel 操作について説明します。

前提条件

  • Python 3.6

    説明

    このトピックの例は Python 3.6 用に作成されていますが、Python 2.6、2.7、3.3、3.4、および 3.5 とも互換性があります。

  • aliyun-oss-python-sdk 2.9.0

  • OBS Studio アップストリーミングツール

  • IDE

LiveChannel の作成

RTMP プロトコルを使用してオーディオおよびビデオデータをアップロードする前に、この操作を呼び出して LiveChannel を作成する必要があります。PutLiveChannel 操作は、RTMP アップストリーミング URL と対応する再生 URL を返します。

説明

返された URL を使用して、アップストリーミングと再生ができます。また、LiveChannel 名を使用して、アップストリーミングステータスのクエリ、アップストリーミングレコードの取得、アップストリーミングの無効化などの関連操作を実行することもできます。

同じ名前の LiveChannel がすでに存在する場合、新しい LiveChannel は前のものを上書きします。新しい LiveChannel の設定とステータスは、デフォルト値にリセットされます。

次のコードは、LiveChannel を作成する方法を示しています。

import os
import oss2

access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '**')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '***')
bucket_name = os.getenv('OSS_TEST_BUCKET', '********')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '***')

# Bucket インスタンスを作成します。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

# ライブチャンネルを作成して設定します。
# チャンネル名は test_rtmp_live です。生成されるライブストリームの M3U8 ファイル名は test.m3u8 です。このマニフェストには 3 つの TS ファイルが含まれ、各 TS ファイルのデュレーションは 5 秒です。これは推奨値です。実際のデュレーションはキーフレームによって異なります。
channel_name = "test_rtmp_live"
playlist_name = "test.m3u8"

create_result = bucket.create_live_channel(
        channel_name,
        oss2.models.LiveChannelInfo(
            status = 'enabled',
            description = 'A test live channel',
            target = oss2.models.LiveChannelInfoTarget(
                playlist_name = playlist_name,
                frag_count = 3,
                frag_duration = 5)))

LiveChannel の一覧表示と削除

次のコードは、LiveChannel を一覧表示して削除する方法を示しています。

説明

複数の LiveChannel が存在する場合、この操作はプレフィックスに一致する最新の LiveChannel のみを削除します。特定のストリームを削除するには、prefix パラメーターをストリームのフルネームに設定します。この操作は、削除対象を含む、プレフィックスに一致するすべての LiveChannel を一覧表示します。削除が成功しても値は返されません。プレフィックスに一致するストリームがない場合、呼び出しはエラーを返します。

import os
import oss2

access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '**')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '***')
bucket_name = os.getenv('OSS_TEST_BUCKET', '********')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '***')

# Bucket インスタンスを作成します。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

# ルールに一致する LiveChannel を一覧表示します。
# バケット内のすべての対象ライブチャンネルを一覧表示します。
# param: prefix (型: str) 一覧表示するライブチャンネル名のプレフィックスを指定します。指定しない場合、すべてのライブチャンネルが一覧表示されます。
# return: class:`ListLiveChannelResult <oss2.models.ListLiveChannelResult>`
for info in oss2.LiveChannelIterator(bucket, prefix="test"):
    print(info.name)

# LiveChannel を削除します。
bucket.delete_live_channel(info.name)

LiveChannel のステータス設定

次のコードは、LiveChannel のステータスを設定する方法を示しています。コードの実行後にエラーメッセージが返されない場合、ステータスは正常に設定されています。

import os
import oss2

access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '**')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '***')
bucket_name = os.getenv('OSS_TEST_BUCKET', '********')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '***')

# Bucket インスタンスを作成します。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

# ライブチャンネルを有効または無効にします。
bucket.put_live_channel_status(channel_name, 'enabled')
bucket.put_live_channel_status(channel_name, 'disabled')

RTMP アップストリーミング URL と署名の取得 (V1 署名のみ)

次のコードは、RTMP アップストリーミング URL と署名を取得する方法を示しています。

import os
import oss2

access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '**')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '***')
bucket_name = os.getenv('OSS_TEST_BUCKET', '********')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '***')

# Bucket インスタンスを作成します。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

# アップストリーミング URL と再生 URL を取得します。
# ライブチャンネルを作成すると、アップストリーミング用の publish_url (RTMP アップストリーミング URL) と再生用の play_url (ストリームから生成された M3U8 ファイルの URL) を取得します。
# URL と署名を取得する前に、LiveChannel を作成し、create_result を取得する必要があります。詳細については、LiveChannel の作成例をご参照ください。
publish_url = create_result.publish_url
play_url = create_result.play_url
print("Ingest URL:", publish_url)
print("Playback URL:", play_url)

# アップストリーミング URL と再生 URL を取得した後、OSS へのストリームのアップストリーミングと再生ができます。バケットの ACL が公開読み書きでない場合、アップストリーミング URL に署名する必要があります。バケットの ACL が公開読み書きの場合、publish_url を直接アップストリーミングに使用できます。
# expires パラメーターは、秒単位の相対時間を指定します。これは、アップストリーミング URL が期限切れになるまでの秒数を示します。
# すべてのパラメーターが署名に含まれます。
# 署名付き URL を取得した後、アップストリーミングツールを使用してストリーミングを開始できます。OSS との接続が確立されると、URL の有効期限が切れてもストリームは中断されません。OSS は、新しいアップストリーミング接続が確立されるときにのみ、expires パラメーターの有効性をチェックします。
signed_url = bucket.sign_rtmp_url(channel_name, playlist_name, expires=3600)
print(signed_url)

LiveChannel のステータス情報の取得

次のコードは、指定された LiveChannel のアップストリーミングステータスを取得する方法を示しています。

import os
import oss2

access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '**')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '***')
bucket_name = os.getenv('OSS_TEST_BUCKET', '********')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '***')

# Bucket インスタンスを作成します。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

# 現在のストリームのステータス情報を表示します。
get_status = bucket.get_live_channel_stat(channel_name)
print("Connection Time:", get_status.connected_time)
print("IP of the Ingest Client:", get_status.remote_addr)
print("Ingest Status:", get_status.status)

プレイリストの生成と表示

PostVodPlaylist 操作は、指定された LiveChannel のビデオオンデマンド (VOD) プレイリストを生成します。OSS は、指定された期間内に LiveChannel によって生成された TS ファイルをクエリし、それらを M3U8 プレイリストに結合します。

次のコードは、プレイリストを生成して表示する方法を示しています。

import os
import oss2
import time

access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '**')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '***')
bucket_name = os.getenv('OSS_TEST_BUCKET', '********')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '***')

# Bucket インスタンスを作成します
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

end_time = int(time.time())
start_time = end_time - 3600
generate_playlist = "my_vod_list.m3u8"
# VOD プレイリストを生成します。
# ライブストリームの TS ファイルから VOD プレイリストを生成するには、post_vod_playlist メソッドを使用します。
# この例では、開始時刻を現在時刻の 3600 秒前、終了時刻を現在時刻に設定します。これにより、過去 1 時間にアップストリーミングされたストリームのプレイリストが生成されます。
# この操作が正常に呼び出されると、「my_vod_list.m3u8」という名前のプレイリストファイルが OSS に生成されます。
bucket.post_vod_playlist(
                channel_name,
                playlist_name,
                start_time = start_time,
                end_time = end_time)

# 特定の期間のプレイリストの内容を表示するには、get_vod_playlist を使用します。
result = bucket.get_vod_playlist(channel_name, start_time=start_time, end_time=end_time)
print("playlist:", result.playlist)

LiveChannel の構成情報の取得

次のコードは、指定された LiveChannel の構成を取得する方法を示しています。

import os
import oss2

access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '**')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '***')
bucket_name = os.getenv('OSS_TEST_BUCKET', '********')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '***')

# Bucket インスタンスを作成します。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

# LiveChannel の構成情報を取得します。
get_result = bucket.get_live_channel(channel_name)
print("-------------------")
print("Stream Ingest Configuration")
print(get_result.description)
print(get_result.status)
print(get_result.target.type)
print(get_result.target.frag_count)
print(get_result.target.frag_duration)
print(get_result.target.playlist_name)
print("-------------------")

LiveChannel のアップストリーミングレコードの取得

GetLiveChannelHistory 操作は、指定された LiveChannel の最新のアップストリーミングレコードを最大 10 件返します。次のコードは、LiveChannel のアップストリーミングレコードを取得する方法を示しています。

import os
import oss2

access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '**')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '***')
bucket_name = os.getenv('OSS_TEST_BUCKET', '********')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '***')

# Bucket インスタンスを作成します。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

# チャンネルの過去のアップストリーミングレコードを表示します。
history_result = bucket.get_live_channel_history(channel_name)
print("Number of historical ingest records:",len(history_result.records))

関連ドキュメント

詳細については、「LiveChannel の操作」、「live_channel.py」、および「api.py」をご参照ください。

よくある質問

  • アップストリーミングステータス、クライアント IP アドレス、接続時間などの情報を取得できないのはなぜですか?

    get_live_channel_stat を使用してアップストリーミングステータス情報を取得するには、対応するチャンネル (channel_name) が Live 状態である必要があります。これは、クライアントがアップストリーミング URL に接続し、アクティブにストリームをアップストリーミングしていることを意味します。

  • .get_live_channel_history を使用して、過去のアップストリーミングの開始時刻、終了時刻、リモートアドレスを取得できますか?

    はい、できます。詳細については、「GetLiveChannelHistory」をご参照ください。

  • list_live_channel を通じて取得したチャンネル情報のデータの型は何ですか?

    文字列です。詳細については、「ListLiveChannel」をご参照ください。

  • post_vod_playlist 関数の end_time パラメーターに必要なフォーマットは何ですか?

    整数です。詳細については、「PostVodPlaylist」をご参照ください。

  • 「'Code': 'InvalidArgument', 'Message': 'No ts file found in specified time span.'」というエラーが表示されます。

    VOD プレイリストは、ストリームファイルがアップロードされた後にのみ生成できます。