このトピックでは、Python用Object Storage Service (OSS) SDKを使用してLiveChannelsで実行できる一般的な操作について説明します。 たとえば、LiveChannelsを作成、一覧表示、および削除できます。
環境の準備
Python 3.6
説明このトピックの例は、Python 3.6に基づいて提供されています。 この例は、Pythonの2.6、2.7、3.3、3.4、および3.5にも適用できます。
aliyun-oss-python-sdk 2.9.0
IDE
LiveChannelを作成する
リアルタイムメッセージングプロトコル (RTMP) を使用してオーディオおよびビデオデータをアップロードする前に、PutLiveChannel操作を呼び出してLiveChannelを作成する必要があります。 PutLiveChannelリクエストへの応答には、LiveChannelにストリームを取り込むために使用されるURLと、取り込まれたストリームを再生するために使用されるURLが含まれます。
返されたURLを使用して、ストリームを取り込み、再生できます。 ストリーム取り込みステータスの照会、ストリーム取り込みレコードの照会、ストリーム取り込みの無効化など、返されたLiveChannel名に基づいて操作を実行することもできます。
次のサンプルコードは、LiveChannelを作成する方法の例を示しています。
osのインポート
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 = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# LiveChannelを作成して設定します。
# チャンネルの名前をtest_rtmp_liveに設定します。 ライブストリーミングで生成されたm3u8ファイルをtest.m3u8に設定します。 インデックスファイルは3つのTSファイルを含み、各TSファイルの持続時間は5秒である。 この例の5秒の値が推奨値です。 実際の期間は、ビデオファイルのキーフレームに基づいて異なります。
channel_name = "test_rtmp_live"
playlist_name = "test.m3u8"
create_result = bucket.create_live_channel (
channel_name,
oss2.models.LiveChannelInfo (
status = 'enabled',
description = 'テストに使用されるLiveChannel' 、
target = oss2.models。LiveChannelInfoTarget (
playlist_name = playlist_name,
frag_count = 3、
frag_duration = 5)
LiveChannelsのリストと削除
次のサンプルコードでは、LiveChannelsを一覧表示および削除する方法の例を示します。
osのインポート
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 = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# 要件を満たすLiveChannelsをリストします。
# バケット内の要件を満たすすべてのLiveChannelsを一覧表示します。
# param: prefix (type: str) は、一覧表示するLiveChannelsの名前に含まれるプレフィックスを指定します。 このパラメーターを指定しないと、すべてのLiveChannelsが表示されます。
# return: class:'ListLiveChannelResult <oss2.models.ListLiveChannelResult>'
oss2.LiveChannelIterator (バケット、プレフィックス="test") の情報について:
prin t(info.name)
# LiveChannelを削除します。
bucket.de lete_live_channel(info.name)
LiveChannelのステータスを設定する
次のサンプルコードは、LiveChannelのステータスを設定する方法の例を示しています。
osのインポート
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 = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# LiveChannelを有効または無効にします。
bucket.put_live_channel_status(channel_name, 'enabled')
bucket.put_live_channel_status(channel_name, 'disabled')
RTMPの取り込みURLと署名のクエリ
次のサンプルコードは、RTMPの取り込みURLと署名をクエリする方法の例を示しています。
osのインポート
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 = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# 取り込みURLとストリーミングURLを照会します。
# LiveChannelを作成したら、ストリームの取り込みに使用されるplay_urlとストリームの視聴に使用されるpublish_urlを照会します。play_urlはRTMP取り込みURLです。 バケットのアクセス制御リスト (ACL) がpublic-read-writeでない場合は、URLに署名を含める必要があります。 次のコードは例を提供します。 publish_urlは、ストリーム取り込みによって生成されるM3U8ファイルのURLです。
# create_live_channel() を使用してcreate_resultを照会します。
publish_url = create_result.publish_url
play_url = create_result.play_url
print("インジェストURL:",publish_url)
print("ストリーミングURL:",play_url)
# 取り込みURLとストリーミングURLを照会した後、ストリームをOSSに取り込み、ストリームを視聴できます。 バケットACLがpublic-read-writeでない場合は、URLに署名する必要があります。 バケットACLがpublic-read-writeの場合、publish_urlを使用してストリームを取り込むことができます。
# この例のexpiresの値は、取り込みたいストリームの有効期限までの期間を秒単位で示します。
# すべてのパラメーターは署名に含まれます。
# signed_urlを照会した後、ストリーム取り込みツールを使用してストリームをOSSに取り込むことができます。 OSSは、ストリームがOSSに接続されている場合にのみ、expiresの値をチェックします。 OSSに接続されているストリームは、ストリームの期間が期限切れで指定された値を超えても中断されません。
signed_url = bucket.sign_rtmp_url(channel_name, playlist_name, expires=3600)
プリント (signed_url)
LiveChannelのストリーム取り込みステータスの照会
次のサンプルコードは、LiveChannelのストリーム取り込みステータスを照会する方法の例を示しています。
osのインポート
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 = 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アドレス: 」、get_status.remote_addr)
print("Stream ingest status:",get_status.status )
プレイリストの生成と表示
PostVodPlaylistを呼び出して、特定のLiveChannelのVODプレイリストを生成できます。 OSSは、特定の期間内に指定されたLiveChannelに取り込まれたストリームによって生成されたTSセグメントを照会し、セグメントをM3U8プレイリストに収束させます。
次のサンプルコードは、プレイリストを生成して表示する方法の例を示しています。
osのインポート
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 = 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メソッドを使用できます。
# この例では、開始時刻は現在時刻から3,600秒を引いたもので、終了時刻は現在時刻です。 これは、1時間前のストリームに対してプレイリストが生成されたことを示す。
# この操作が呼び出されると、OSSにmy_vod_list.m3u8という名前のプレイリストが生成されます。
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の設定を照会する方法の例を示しています。
osのインポート
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 = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# LiveChannelの設定を照会します。
get_result = bucket.get_live_channel(channel_name)
プリント ("-------------------")
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)
プリント (get_result.target.playlist_name)
プリント ("-------------------")
LiveChannelのストリーム取り込みレコードの照会
GetLiveChannelHistory操作を呼び出して、LiveChannelの最新のストリーム取り込みレコードを最大10個まで照会できます。 次のサンプルコードは、LiveChannelのストリーム取り込みレコードを照会する方法の例を示しています。
osのインポート
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 = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# LiveChannelのストリーム取り込みレコードを照会します。
history_result = bucket.get_live_channel_history(channel_name)
print("Stream ingest records:",len(history_result.records))
参考資料
LiveChannelsの詳細については、「概要」、「live_channel.py」、および「api.py」をご参照ください。
よくある質問
ストリームの取り込みステータス、クライアントIPアドレス、接続時間などの情報を照会できないのはなぜですか。
get_live_channel_stat操作を呼び出してストリームの取り込みステータスを照会する前に、対応するLiveChannel (channel_name) がLive状態であることを確認してください。 ライブ状態は、クライアントが接続された取り込みURLにストリームを取り込むことを指定します。
get_live_channel_history操作を呼び出して、履歴ストリーム取り込みの開始時刻と終了時刻、およびリモートアドレスを照会できますか?
はい。 詳細については、「GetLiveChannelHistory」をご参照ください。
list_live_channel操作を呼び出した後に返されるLiveChannel情報の種類は何ですか?
文字列です。 詳細については、「GetLiveChannelHistory」をご参照ください。
VODプレイリストを生成するpost_vod_playlist関数のend_timeパラメーターの形式は?
整数。 詳細については、「PostVodPlaylist」をご参照ください。
['Code': 'InvalidArgument', 'Message': 'No ts file found in specified time span.'] エラーメッセージが返されるのはなぜですか?
VODプレイリストは、ストリーム取り込みファイルがアップロードされた後にのみ生成できます。