このトピックでは、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 プレイリストは、ストリームファイルがアップロードされた後にのみ生成できます。