このトピックでは、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が作成する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', '***')
# Create a bucket.
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# Create and configure a LiveChannel.
# Set the name of the channel to test_rtmp_live. Set the M3U8 file generated by live streaming to test.m3u8. The index file includes three TS files, and the duration of each TS file is 5 seconds. The value of 5 seconds in this example is the recommended value. The actual duration varies based on the key frame of the video file.
channel_name = "test_rtmp_live"
playlist_name = "test.m3u8"
create_result = bucket.create_live_channel(
channel_name,
oss2.models.LiveChannelInfo(
status = 'enabled',
description = 'LiveChannel used for the test',
target = oss2.models.LiveChannelInfoTarget(
playlist_name = playlist_name,
frag_count = 3,
frag_duration = 5)))
LiveChannelsのリストと削除
次のサンプルコードでは、LiveChannelsを一覧表示および削除する方法の例を示します。
バケットに複数のLiveChannelsがあり、その名前に指定されたプレフィックスが含まれている場合、リストおよび削除操作を実行すると、最後に作成されたLiveChannelsのみが削除されます。 特定のLiveChannelを削除する場合は、プレフィックスをLiveChannelのフルネームに設定することを推奨します。 設計上、LiveChannelのリストはLiveChannelの削除前に行われます。 リストと削除操作を実行すると、名前に指定されたプレフィックスが含まれるすべてのLiveChannels (削除するものも含む) が返されます。 削除が成功した場合、削除の戻り値は返されません。 指定されたプレフィックスが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', '***')
# Create a bucket.
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# List the LiveChannels that meet the requirements.
# List all LiveChannels that meet the requirements in the bucket.
# Parameter: prefix is of type str and specifies the prefix in the names of LiveChannels to list. If you do not specify this parameter, all LiveChannels in the bucket are listed.
# return: class:`ListLiveChannelResult <oss2.models.ListLiveChannelResult>`
for info in oss2.LiveChannelIterator(bucket, prefix="test"):
print(info.name)
# Delete the 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', '***')
# Create a bucket.
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# Enable or disable a LiveChannel.
bucket.put_live_channel_status(channel_name, 'enabled')
bucket.put_live_channel_status(channel_name, 'disabled')
RTMP取り込みURLと署名のクエリ (署名アルゴリズムV1のみがサポートされています)
次のサンプルコードは、Real-Time Messaging Protocol (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', '***')
# Create a bucket.
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# Query the ingest URL and streaming URL.
# After you create a LiveChannel, query play_url that is used to ingest the stream and publish_url that is used to watch the stream. play_url is the RTMP ingest URL. If the access control list (ACL) of your bucket is not public-read-write, you must include a signature in the URL.
# Create a LiveChannel and obtain create_result before you obtain the URLs and include a signature. For more information, see the preceding LiveChannel creation example.
publish_url = create_result.publish_url
play_url = create_result.play_url
print("Ingest URL:",publish_url)
print("Streaming URL:",play_url)
# After you query the ingest URL and streaming URL, you can ingest the stream to OSS and watch the stream. If the bucket ACL is not public-read-write, you need to sign the URL. If the bucket ACL is public-read-write, you can directly use publish_url to ingest the stream.
# The value of expires in the example indicates the period of time in seconds before the stream that you want to ingest expires.
# All the parameters are involved in the signature.
# After you query signed_url, you can use the stream ingest tool to ingest streams to OSS. OSS checks the value of expires only when a stream connection is requested. A stream that is connected to OSS is not interrupted even if the URL expires during the stream ingest process.
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', '***')
# Create a bucket.
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# Query the status of the current stream.
get_status = bucket.get_live_channel_stat(channel_name)
print("Connection time:",get_status.connected_time)
print("IP address of the stream ingest client:",get_status.remote_addr)
print("Stream 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', '***')
# Create a 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"
# Generate a VOD playlist.
# If you want to use the TS segments generated by stream ingest to generate a VOD playlist, you can use the post_vod_playlist function.
# In this example, the start time is the current time minus 3,600 seconds, and the end time is the current time. This time setting specifies that a playlist is generated for the stream of the previous hour.
# After this operation is called, a playlist named my_vod_list.m3u8 is generated in OSS.
bucket.post_vod_playlist(
channel_name,
playlist_name,
start_time = start_time,
end_time = end_time)
# If you want to view the playlist content within a specific period of time, you can use 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', '***')
# Create a bucket.
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# Query the configurations of a 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', '***')
# Create a bucket.
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# Query the stream ingest records of a LiveChannel.
history_result = bucket.get_live_channel_history(channel_name)
print("Number of stream ingest records:",len(history_result.records))
関連ドキュメント
LiveChannelsの詳細については、「概要」、「live_channel.py」、および「api.py」をご参照ください。
よくある質問
get_live_channel_stat関数がストリーム取り込みステータス、クライアントのIPアドレス、および接続時間を返さないのはなぜですか。
ステータスを照会するLiveChannelがLive状態ではありません。 get_live_channel_stat関数は、クライアントからストリームを取り込むために使用されているLiveChannelでのみ呼び出すことができます。
get_live_channel_history関数を使用して、ストリーム取り込みレコードの開始時刻と終了時刻、およびストリーム取り込みクライアントのIPアドレスを照会できますか?
はい、購入できます。 詳細については、「GetLiveChannelHistory」をご参照ください。
list_live_channelが返すLiveChannel情報のデータ型は何ですか?
list_live_channelによって返されるLiveChannel情報は、文字列型です。 詳細については、「GetLiveChannelHistory」をご参照ください。
post_vod_playlist関数呼び出しのend_timeパラメーターの値の有効なデータ型は何ですか?
post_vod_playlist関数呼び出しのend_timeパラメーターの値は、整数型である必要があります。 詳細については、「PostVodPlaylist」をご参照ください。
['Code': 'InvalidArgument', 'Message': 'No ts file found in specified time span.'] エラーメッセージが返されるのはなぜですか?
VODプレイリストは、ストリーム取り込みファイルがアップロードされた後にのみ生成できます。