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

Object Storage Service:OSS SDK for Pythonを使用したLiveChannelsの管理

最終更新日:Nov 14, 2024

このトピックでは、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

  • OBSスタジオ

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