Skip to content

SkyWay Python SDK

SkyWay Python SDK は、Python で作成されたアプリケーションから SkyWay を利用するための SDK です。本 SDK を利用することで、Python のアプリケーションでリアルタイムに映像・音声データを受信し、任意のデータ送信を行うことができます。

提供状況

Python SDK は現在 β 版として提供しています。

対応している通信方式

P2P での publish / subscribe にのみ対応しています。SFU には現在対応していません。

対応環境

以下の環境で動作することを確認しています。

  • OS: Linux(Ubuntu 24.04), macOS, Windows
  • Python: 3.10 以上

対応コーデック

以下のコーデックについて、動作することを確認しています。

  • 映像の受信
    • H264
    • VP8
  • 音声の受信
    • Opus

インストール方法

pip コマンドを用いて、PyPI からインストールできます。

pip install skyway-room

概要

SkyWayを利用するためには、通信を開始するまでに以下のステップを踏む必要があります。

  1. SkyWay Auth Token を取得する

    SkyWay Auth Token は SkyWay を利用するために必要な JWT 形式のトークンです。仕様に基づいて自身で作成する必要があります。詳しくは SkyWay Auth Token を参照してください。

  2. Room を作成する

    通話を行うグループの単位を Room と呼びます。Room を作成するには Room の作成権限を持った SkyWay Auth Token が必要です。

  3. RoomMember として Room に Join する

    Room に参加しているエンドユーザーを Member と呼びます。Python SDK では Room に Join することで LocalRoomMember を取得します。

  4. Stream を Publish および Subscribe する

    Member が Stream を Publish すると Room 上に Publication というリソースが生成されます。Member が Publication を Subscribe すると Subscription というリソースが生成され、Subscription の Stream にアクセスして映像・音声を受信できます。

基本的な利用例はGitHubリポジトリの examples/quickstart を参照してください。

用語解説

Python SDK で扱う主要な用語を説明します。

Room

通話を行うグループの単位であり、共通の Room に参加した Member 同士で通信を行います。

Room は一意な識別子である ID と、オプショナルな Name を持ちます。ID は Room 作成時に自動的に払い出され、Name はユーザが Room を作成する際に任意で指定できます。同一アプリケーション内で同じ Name の Room を複数作成することはできません。

Member

Room に参加しているエンドユーザーのことを Member と呼びます。

Python SDK では、自身の Member は LocalRoomMember として表現され、Stream の Publish・Subscribe を行うためのメソッドを提供します。他の参加者は RoomMember として参照できます。

Stream

Room 上で送受信できるメディアのことを Stream と呼びます。Python SDK では以下の 3 種類の Stream を利用できます。

  • AudioStream
    • エンドユーザーのマイク音声など
    • Python SDK では 受信のみ 対応しています
  • VideoStream
    • エンドユーザーのカメラ映像や画面共有映像など
    • Python SDK では 受信のみ 対応しています
  • DataStream
    • 文字列やバイナリデータなどの任意のデータ
    • Python SDK では 送信のみ 対応しています

AudioStream と VideoStream は、受信時に RemoteMediaStream として扱われます。track プロパティを介して aiortcMediaStreamTrack にアクセスできます。

DataStream は、送信時に LocalDataStream として扱われます。

Publication

Member が Stream を Room に公開することを Publish と呼びます。Stream を Publish すると Room 上に Stream に対応する Publication というリソースが作成されます。

Subscription

Member が Room 上の Publication を受信することを Subscribe と呼びます。Subscribe をすると Room 上に Subscription というリソースが作成されます。

Publication を Subscribe した Member は、Subscription を通じて Stream にアクセスし映像や音声を受信できます。

SkyWay Auth Token

SkyWay Auth Token は、SkyWay を利用するために必要な JWT(JSON Web Token)形式のトークンです。エンドユーザーごとに権限を細かく設定することができます。

不正な権限での操作を防ぐために、シークレットキーは機密情報として管理する必要があります。本番環境用のアプリケーションでは、エンドユーザーには SkyWay Auth Token のみを払い出し、シークレットキーはアプリケーションサーバー側で管理することを強く推奨します。

SkyWay Auth Token の詳細については、SkyWay Auth Token のドキュメントを参照してください。

基本機能

各機能の詳細は API リファレンスを参照してください。

SkyWayContext

アプリケーションの初期化と認証を行うエントリポイントです。SkyWay Auth Token を渡してセットアップします。

from skyway.room import SkyWayContext

context = SkyWayContext()
await context.setup(token)

利用終了時には dispose() を呼んでリソースを解放します。

詳細は Context を参照してください。

Room

Room の作成・取得を行います。SkyWayContext から取得します。

room = await context.find_or_create_room("room-name")

Room の情報にはインスタンスのプロパティからアクセスでき、参加中の Member や Publication の一覧を取得できます。

詳細は Room を参照してください。

LocalRoomMember / RoomMember

Room に Join することで LocalRoomMember を取得できます。LocalRoomMember から Stream の Publish や Subscribe を行います。

member = await room.join()

詳細は Member を参照してください。

Publication と Subscription

LocalRoomMember.publish() によって DataStream を Publish し、LocalRoomMember.subscribe() によって他の Member の Publication を Subscribe します。

stream = LocalDataStream()
publication = await member.publish(stream)
subscription = await member.subscribe(publication_id)

詳細は PublicationSubscription を参照してください。

Stream

送信用の LocalDataStream や、受信用の RemoteMediaStream などを扱います。RemoteMediaStreamtrack プロパティを通じて、受信した映像・音声データを取り出すことができます。

詳細は Stream を参照してください。

イベント

Room で発生するイベントは @room.on(...) デコレータで購読できます。

@room.on("stream_published")
def on_stream_published(event: StreamPublishedEvent) -> None:
    ...

デコレータを使わず、room.on(...) メソッドにハンドラーを直接渡して登録することもできます。

def on_stream_published(event: StreamPublishedEvent) -> None:
    ...

room.on("stream_published", on_stream_published)

利用可能なイベントの一覧は Event を参照してください。