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

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

最終更新日:Feb 22, 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を作成する方法の例を示しています。

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