sora_sdk モジュール

sora_sdk

概要

sora_sdk ライブラリは Sora C++ SDK をラップしたライブラリです。 Sora のシグナリングなどを意識する必要はありません。

音声と映像の扱い

Sora Python SDK では音声や映像をデバイスから取得したり、画面に描画する機能を提供していません。 その部分は OpenCV や sounddevice などのライブラリを別途利用する必要があります。

NDArray 型と LikeArray 型の注意

Sora Python SDK では音声や映像のデータを取り扱う際に NumPy の NDArray 型を利用します。

ただし nanobind の制約により、 pyi では NDArray 型が ArrayLike 型になっています。

参考

libwebrtc ログ指定

libwebrtc のログ出力を指定できます。

enable_libwebrtc_log

以下のように Sora クライアントを生成する前に libwebrtc のログレベルを指定してください。

import sora_sdk

if __name__ == '__main__':
   sora_sdk.enable_libwebrtc_log(sora_sdk.SoraLoggingSeverity.VERBOSE)

利用できるコーデック一覧の取得

SoraVideoCodecCapability オブジェクト

SoraVideoCodecCapability
to_json()

JSON 形式の文字列を返します。

engines
Codec
Engine
Parameters

Sora オブジェクト

Sora(video_codec_preference: SoraVideoCodecPreference | None = None, openh264: str | None = None)

Sora SDK の主要なクラスです。このクラスを使用して Sora への接続や、音声と映像のソースを作成します。

param video_codec_preference:

SoraVideoCodecPreference を指定します。何も指定しない場合は None で全てのコーデックは SoraVideoCodecImplementation.INTERNAL を利用します。

type:

SoraVideoCodecPreference | None

param openh264:

OpenH264 のパスを指定します。

type:

str | None

create_audio_source(channels, sample_rate)

Sora に音声を送るための SoraAudioSource を作成します。

py:

class:SoraAudioSource は送信する際に、ここで指定したチャネル数とサンプリングレートに入力されたデータを変換した上で送信します。

create_video_source()

Sora に映像を送るための SoraVideoSource を作成します。

create_connection(signaling_urls, role, channel_id, \)

client_id=None, bundle_id=None, metadata=None, \ signaling_notify_metadata=None, audio_source=None, video_source=None \ audio=True, video=True, audio_codec_type=None, video_codec_type=None, \ audio_bit_rate=None, video_bit_rate=None, video_vp9_params=None, \ video_av1_params=None, video_h264_params=None, simulcast=None, \ spotlight=None, spotlight_number=None, simulcast_rid=None, simulcast_request_rid=None, \ spotlight_focus_rid=None, spotlight_unfocus_rid=None, \ forwarding_filter=None, forwarding_filters=None, data_channels=None, \ data_channel_signaling=None, ignore_disconnect_websocket=None, \ data_channel_signaling_timeout=None, disconnect_wait_timeout=None, \ websocket_close_timeout=None, websocket_connection_timeout=None, \ audio_streaming_language_code=None, insecure=None, \ client_cert=None, client_key=None, proxy_url=None, \ proxy_username=None, proxy_password=None, proxy_agent=None)

param List[str] signaling_urls:

シグナリング URLのリスト

param str role:

ロール

param str channel_id:

チャネル ID

param Optional[str] client_id:

クライアント ID

param Optional[str] bundle_id:

バンドル ID

param Optional[object] metadata:

認証メタデータ

param Optional[object] signaling_notify_metadata:

シグナリング通知メタデータ

param Optional[sora_sdk.SoraTrackInterface] audio_source:

音声ソース

param Optional[sora_sdk.SoraTrackInterface] video_source:

映像ソース

param Optional[sora_sdk.SoraAudioFrameTransformer] audio_frame_transformer:

音声フレーム変換器

param Optional[sora_sdk.SoraVideoFrameTransformer] video_frame_transformer:

映像フレーム変換器

param Optional[bool] audio:

音声

param Optional[bool] video:

映像

param Optional[str] audio_codec_type:

音声コーデックタイプ

param Optional[str] video_codec_type:

映像コーデックタイプ

param Optional[int] audio_bit_rate:

音声ビットレート

param Optional[int] video_bit_rate:

映像ビットレート

param Optional[object] audio_opus_params:

音声 Opus 設定指定

param Optional[object] video_vp9_params:

映像 VP9 設定指定

param Optional[object] video_av1_params:

映像 AV1 設定指定

param Optional[object] video_h264_params:

映像 H.264 設定指定

param Optional[object] video_h265_params:

映像 H.265 設定指定

param Optional[bool] simulcast:

サイマルキャスト

param Optional[bool] spotlight:

スポットライト

param Optional[int] spotlight_number:

スポットライトナンバー

param Optional[str] simulcast_rid:

サイマルキャスト RID

param Optional[str] simulcast_request_rid:

サイマルキャスト RID リクエスト

param Optional[str] spotlight_focus_rid:

スポットライトフォーカス RID

param Optional[str] spotlight_unfocus_rid:

スポットライトアンフォーカス RID

param Optional[object] forwarding_filter:

転送フィルター

param Optional[list[object]] forwarding_filters:

転送フィルターのリスト

param Optional[object] data_channels:

データチャネル

param Optional[bool] data_channel_signaling:

データチャネルシグナリング

param Optional[bool] ignore_disconnect_websocket:

ウェブソケット切断無視

param Optional[int] data_channel_signaling_timeout:

データチャネルシグナリングタイムアウト

param Optional[int] disconnect_wait_timeout:

切断待ちタイムアウト

param Optional[int] websocket_close_timeout:

ウェブソケットクローズタイムアウト

param Optional[int] websocket_connection_timeout:

ウェブソケット接続タイムアウト

param Optional[str] audio_streaming_language_code:

音声ストリーミング言語コード

param Optional[bool] insecure:

サーバー証明書のチェックを無視する

param Optional[bytes] client_cert:

クライアント証明書

param Optional[bytes] client_key:

クライアント証明書シークレットキー

param Optional[bytes] ca_cert:

サーバー証明書のチェックを行う CA 証明書

param Optional[str] proxy_url:

Proxy URL

param Optional[str] proxy_username:

Proxy ユーザ名

param Optional[str] proxy_password:

Proxy パスワード

param Optional[str] proxy_agent:

Proxy エージェント

param Optional[SoraDegradationPreference] degradation_preference:

デグラデーション優先度

rtype:

sora_sdk.SoraConnection

Sora と接続するための SoraConnection を作成します。

接続して切断する最小コード

ただ繫いで、切断するだけのコードです。

import time

from sora_sdk import Sora

if __name__ == "__main__":
    # Sora インスタンスを生成
    sora = Sora()
    # Sora に接続する
    conn = sora.create_connection(
        signaling_urls=["wss://example.com/signaling"],
        role="sendonly",
        channel_id="sora",
    )
    conn.connect()

    # 接続するまで待つ
    time.sleep(3)

    # connect() を呼んだら disconnect を呼ぶ
    conn.disconnect()

mTLS を利用する際の最小コード

mTLS を利用する際の証明書は open('cert.pem', 'rb').read() のように読み込んだバイナリを渡してください。

import time

from sora_sdk import Sora

if __name__ == "__main__":
    # Sora インスタンスを生成
    sora = Sora()
    # Sora に接続する
    conn = sora.create_connection(
        signaling_urls=["wss://example.com/signaling"],
        role="sendonly",
        channel_id="sora",
        # クライアント証明書を読み込む
        client_cert=open("cert.pem", "rb").read(),
        # クライアント証明書シークレットキーを読み込む
        client_key=open("cert-key.pem", "rb").read(),
        # CA 証明書を読み込む
        ca_cert=open("ca.pem", "rb").read(),
    )
    conn.connect()

    # 接続するまで待つ
    time.sleep(3)

    # Sora から切断する
    conn.disconnect()

metadata にアクセストークンを指定する最小コード

Sora Cloud や Sora Labo を利用する際に metadata にアクセストークンを指定してください。

import time

from sora_sdk import Sora

if __name__ == "__main__":
    # Sora インスタンスを生成
    sora = Sora()
    # Sora に接続する
    conn = sora.create_connection(
        signaling_urls=["wss://example.com/signaling"],
        role="sendonly",
        channel_id="sora",
        # dict をそのまま指定してください
        metadata={"access_token": "access_token"},
    )
    conn.connect()

    # 接続するまで待つ
    time.sleep(3)

    # Sora から切断する
    conn.disconnect()

video_codec_preference を指定する最小コード

映像コーデックのエンコード/デコードを細かく指定する場合は Sora.video_codec_preference を指定してください。

import time

from sora_sdk import (
    Sora,
    SoraVideoCodecImplementation,
    SoraVideoCodecPreference,
    SoraVideoCodecType,
)

if __name__ == "__main__":
    # Sora インスタンスを生成
    sora = Sora(
        # ビデオコーデックプリファレンスを指定する
        video_codec_preference=SoraVideoCodecPreference(
            codecs=[
                # H.264 のみを利用する
                SoraVideoCodecPreference.Codec(
                    type=SoraVideoCodecType.H264,
                    # H.264 のエンコーダーに OpenH264 を指定する
                    encoder=SoraVideoCodecImplementation.CISCO_OPENH264,
                    # sendonly なのでデコーダーは指定しない
                ),
            ],
        ),
        openh264="/path/to/libopenh264-2.6.0-linux64.7.so",
    )
    # Sora に接続する
    conn = sora.create_connection(
        signaling_urls=["wss://example.com/signaling"],
        role="sendonly",
        channel_id="sora",
    )
    conn.connect()

    # 接続するまで待つ
    time.sleep(3)

    # Sora から切断する
    conn.disconnect()

SoraConnection オブジェクト

SoraConnection

Sora との接続を制御する機能を提供します。

py:

meth:Sora.create_connection から生成します。

connect()

Sora に接続します。

disconnect()

Sora から切断します。

get_stats()

クライアントの WebRTC 統計情報を取得します。 形式は Identifiers for WebRTC's Statistics API に準拠しています。

import json
import time

from sora_sdk import Sora

if __name__ == "__main__":
    sora = Sora()
    conn = sora.create_connection(
        signaling_urls=["wss://sora.example.com/signaling"],
        role="sendrecv",
        channel_id="sora",
    )

    conn.connect()
    # 接続確立まで少し待つ
    time.sleep(5)

    # 取得する統計情報は文字列
    raw_stats = conn.get_stats()
    # 文字列から JSON オブジェクトにする
    stats = json.loads(raw_stats)
    print(stats)

    conn.disconnect()
on_disconnect(error_code, message)

コネクション切断時のコールバックです。 SoraSignalingErrorCode で表されるエラーコードとメッセージを引数に取ります。

import time

from sora_sdk import Sora, SoraSignalingErrorCode


def on_disconnect(error_code: SoraSignalingErrorCode, message: str):
    print(f"error_code: {error_code}, message: {message}")


if __name__ == "__main__":
    sora = Sora()
    conn = sora.create_connection(
        signaling_urls=["wss://sora.example.com/signaling"],
        role="sendrecv",
        channel_id="sora",
    )
    # 切断コールバックを登録する
    conn.on_disconnect = on_disconnect

    conn.connect()

    time.sleep(5)

    # connect() を呼んだら disconnect を呼ぶ
    conn.disconnect()
send_data_channel(label, data)

Sora にデータチャンネルを介してデータを送信します。

on_data_channel(label)

データチャネルが追加された際に呼び出されるコールバックです。 追加されたデータチャネルのラベルを引数に取ります。

on_message(label, data)

データチャネルでメッセージ通知を受信した際に呼び出されるコールバックです。 受信したデータチャネルのラベルとデータを引数に取ります。

import time

from sora_sdk import Sora, SoraConnection


# データチャネルが利用可能になったら呼ばれる
def on_data_channel(label: str):
    print(f"label: {label}")


# データチャネルのメッセージを受信すると呼ばれる
def on_message(label: str, data: bytes):
    print(f"label: {label}, data: {data.decode()}")


if __name__ == "__main__":
    sora: Sora = Sora()
    conn: SoraConnection = sora.create_connection(
        signaling_urls=["wss://sora.example.com/signaling"],
        role="sendrecv",
        channel_id="sora",
        data_channel_signaling=True,
        data_channels=[{"label": "#spam", "direction": "recvonly"}],
    )
    # データチャネルコールバックを登録する
    conn.on_data_channel = on_data_channel

    # データチャネルメッセージコールバックを登録する
    conn.on_message = on_message

    conn.connect()

    time.sleep(5)

    # connect() を呼んだら disconnect を呼ぶ
    conn.disconnect()
on_notify(message)

シグナリング通知を受信した際に呼び出されるコールバックです。 受信したメッセージを引数に取ります。

import json
import time
from typing import Any

from sora_sdk import Sora


def on_notify(raw_message: str):
    # JSON デコード
    message: dict[str, Any] = json.loads(raw_message)
    if message["type"] == "connection.created":
        print(f"connection.created: {message}")


if __name__ == "__main__":
    sora = Sora()
    conn = sora.create_connection(
        signaling_urls=["wss://sora.example.com/signaling"],
        role="sendrecv",
        channel_id="sora",
    )
    # シグナリング通知コールバックを登録する
    conn.on_notify = on_notify

    conn.connect()

    time.sleep(5)

    # connect() を呼んだら disconnect を呼ぶ
    conn.disconnect()
on_push(message)

シグナリングプッシュを受信した際に呼び出されるコールバックです。 受信したメッセージを引数に取ります。

on_set_offer

Sora から受け取った Offer を設定した際に呼び出されるコールバックです。 受信した Offer を引数に取ります。

on_track(track)

Track が追加された際に呼び出されるコールバックです。追加された Track の SoraMediaTrack を引数に取ります。

コールバックで受け取った後に SoraTrackInterface.kind から video か audio かを判別し、適切な Sink に渡すことで受信した映像、音声データを受け取ることができます。

on_switched(message)

シグナリングが DataChannel に切り替わったタイミングで呼ばれるコールバックです。受信したメッセージを引数に取ります。 主にログ出力などに利用する事を想定しており、戻り値を返すことはできません。

on_signaling_message(type, direction, message)

シグナリングメッセージを送受信した際に呼ばれるコールバックです。 主にログ出力などに利用する事を想定しており、戻り値を返すことはできません。

  • "type": "connect"
  • "type": "redirect"
  • "type": "offer"
  • "type": "answer"
  • "type": "candidate"
  • "type": "re-offer"
  • "type": "re-answer"
  • "type": "disconnect"
  • "type": "close"

"type": "close" は Sora 2024.2.0 から利用可能なメッセージです。

"type": "switched"SoraConnection.on_switched を利用してください。

"type": "ping""type": "pong" は取得できません。

import json
import time

from sora_sdk import Sora, SoraSignalingDirection, SoraSignalingType


def on_signaling_message(
    type: SoraSignalingType, direction: SoraSignalingDirection, raw_message: str
):
    json_message = json.loads(raw_message)
    print(f"type: {type.value}, direction: {direction.value}, message: {json_message}")


if __name__ == "__main__":
    sora = Sora()
    conn = sora.create_connection(
        signaling_urls=["wss://sora.example.com/signaling"],
        role="sendrecv",
        channel_id="sora",
    )
    # シグナリングコールバックを登録する
    conn.on_signaling_message = on_signaling_message

    conn.connect()

    time.sleep(5)

    # connect() を呼んだら disconnect を呼ぶ
    conn.disconnect()
on_ws_close(code, reason)

WebSocket 切断時のコールバックです。 SDK 側で閉じた場合は reason には "SELF-CLOSED" が入ります。 主にログ出力などに利用する事を想定しており、戻り値を返すことはできません。

import time

from sora_sdk import Sora


def on_ws_close(code: int, reason: str):
    print(f"WebSocket closed: code={code}, reason={reason}")


if __name__ == "__main__":
    sora = Sora()
    conn = sora.create_connection(
        signaling_urls=["wss://sora.example.com/signaling"],
        role="sendrecv",
        channel_id="sora",
    )
    # WebSocket クローズコールバックを登録する
    conn.on_ws_close = on_ws_close

    conn.connect()

    time.sleep(5)

    # connect() を呼んだら disconnect を呼ぶ
    conn.disconnect()

SoraAudioSource オブジェクト

SoraAudioSource

Sora に Python で生成した音声データを送る機能を提供します。このクラスは SoraTrackInterface を継承しています。

py:

meth:Sora.create_audio_source から生成します。

on_data(ndarray)

Sora に送る音声データを渡します。

タイムスタンプが引数にないオーバーロードです。タイムスタンプは先に受け取ったデータと連続になっていると想定してサンプル数から自動生成します。

on_data(data, samples_per_channel)

Sora に送る音声データを渡します。

タイムスタンプが引数にないオーバーロードです。タイムスタンプは先に受け取ったデータと連続になっていると想定してサンプル数から自動生成します。

SoraAudioSink オブジェクト

SoraAudioSink(track, output_frequency=-1, output_channels=0)

AudioTrack から音声データを取り出す機能を提供します。

受け取った音声はコンストラクタで設定したサンプリングレートとチャンネル数に変換し、内部のバッファに溜め込まれるため、任意のタイミングで音声を取り出すことができます。

read(frames=0, timeout=1)

受信済みのデータをバッファから読み出します。

on_data

音声データを AudioTrack から受け取った際に呼び出されるコールバックです。音声データが格納された ndarray で チャンネルごとのサンプル数 x チャンネル数 になっている音声データを引数にとります。

このコールバック関数内では重い処理は行わないでください。

このコールバックは廃止予定です。

on_format(sample_rate, number_of_channels)

AudioTrack から受け取った音声データのサンプリングレートもしくはチャンネル数が変化した場合に呼び出されるコールバックです。新しいサンプリングレートとチャンネル数を引数にとります。

このコールバック関数内では重い処理は行わないでください。

このコールバックは廃止予定です。

from sora_sdk import SoraAudioSink

audio_sink = None


def on_track(track):
    # 音声トラックの場合
    if track.kind == "audio":
        # 音声トラックのため込み場所を指定
        _audio_sink = SoraAudioSink(
            track=track,
            # 音声出力デバイスが利用可能な値を指定してください
            output_frequency=16000,
            # 音声出力デバイスが利用可能な値を指定してください
            output_channels=1,
        )

音声を取り出す場合は SoraAudioSink.read() を利用してください。

# frames はバッファサイズです
success, data = audio_sink.read(frames)
if success:
else:

SoraVideoSource オブジェクト

SoraVideoSource

Sora に Python で生成した映像のフレームデータを送る機能を提供します。このクラスは SoraTrackInterface を継承しています。

py:

meth:Sora.create_video_source から生成します。

on_captured(ndarray)

この関数が呼び出された時点のタイムスタンプでフレームを送信します。

映像になるように一定のタイミングで呼び出さない場合、受信側でコマ送りになります。

SoraTrackInterface オブジェクト

SoraTrackInterface

AudioTrack もしくは VideoTrack を表すために使用されます。

py:

attr:SoraConnection.on_track コールバックで引数として渡されます。

set_enabled(enable)

トラックの有効/無効を設定します。

enabled

トラックが有効かどうかを示すブール値。

id

トラックの ID を示す文字列。

kind

トラックの種類を示す文字列。 video もしくは audio が入っています。 AudioTrack か VideoTrack かを判別することができます。

state

トラックの状態。

SoraAudioFrame オブジェクト

SoraAudioFrame

libwebrtc 内の音声処理単位である 10ms の音声データが格納されています。 picklable です。

data()
samples_per_channel

チャンネルあたりのサンプル数。

num_channels

チャンネル数 (モノラルの場合は 1、ステレオの場合は 2)。

sample_rate_hz

サンプリングレート。

absolute_capture_timestamp_ms

キャプチャした際のタイムスタンプ。ない場合は None。

SoraAudioStreamSink オブジェクト

SoraAudioStreamSink(track, output_frequency=-1, output_channels=0)

AudioTrack の音声データを受け取って 逐次 Python に渡す on_frame コールバックを提供します。

出力には on_frame にコールバック関数を指定する必要があります。

on_frame

音声データを AudioTrack から受け取った際に呼び出されるコールバック。音声データが格納された SoraAudioFrame オブジェクトを引数に取ります。

from sora_sdk import SoraAudioStreamSink

audio_stream_sink = None


def on_frame(frame):
    pass


def on_track(track):
    # 音声トラックの場合
    if track.kind == "audio":
        # トラックの音声データの受け口として SoraAudioStreamSink を生成
        audio_stream_sink = SoraAudioStreamSink(
            track=track,
            # 24kHz にリサンプリングするように指定
            output_frequency=24000,
            # モノラルにミキシングするように指定
            output_channels=1,
        )
        # 音声データが来た際のコールバックを指定
        audio_stream_sink.on_frame = on_frame

SoraMediaTrack オブジェクト

py:

attr:SoraConnection.on_track コールバックで引数として渡されます。

SoraMediaTrack

Sora から受け取った AudioTrack もしくは VideoTrack を扱うために提供されます。このクラスは SoraTrackInterface を継承しています。

stream_id

この Track の Stream ID を返します。

set_frame_transformer(transformer)

フレームを変換する SoraFrameTransformer オブジェクトを設定します。

SoraVAD オブジェクト

SoraVAD
analyze(frame)

frame 内の音声データが 24 kHz 以外の時は 24 kHz にリサンプリングを、2 チャンネル以上の時は 1 チャンネルにミキシングをそれぞれ変換した上で VAD を行います。VAD しか使わない場合は SoraAudioStreamSink で事前に変換しておくことをお勧めします。

SoraAudioStreamSink と組み合わせて以下のように使います。

from sora_sdk import SoraAudioStreamSink, SoraVAD

audio_stream_sink = None
vad = SoraVAD()


def on_frame(frame):
    # frame が音声である確率を求める
    voice_probability = vad.analyze(frame)
    if voice_probability > 0.95:  # 0.95 は libwebrtc の判定値
        print(f"Voice! voice_probability={voice_probability}")
    else:
        print("Not a voice!")


def on_track(track):
    if track.kind == "audio":
        audio_stream_sink = SoraAudioStreamSink(
            track=track,
            # VAD はサンプリングレートが 24 kHz 以外の時 24kHz にリサンプリングするので、 24kHz にしておく。
            output_frequency=24000,
            # VAD はチャネル数が 2 以上の時 1 チャンネルにミキシングするので、 1 チャンネルにしておく。
            output_channels=1,
        )
        audio_stream_sink.on_frame = on_frame

SoraVideoFrame オブジェクト

SoraVideoFrame
data()

OpenCV の cv2.imshow にそのまま渡すと表示されるように成型されています。

SoraVideoSink オブジェクト

SoraVideoSink(track)

VideoTrack からフレームデータを受け取って、 逐次 Python に渡す on_frame コールバックを提供します。

出力には on_frame にコールバック関数を指定する必要があります。

on_frame

フレームデータを VideoTrack から受け取った際に呼び出されるコールバックです。フレームデータが格納された SoraVideoFrame オブジェクトを引数に取ります。

このコールバック関数内では重い処理は行わないでください。 サンプルを参考に queue を利用するなどの対応を推奨します。

この関数はメインスレッドから呼び出されないため、関数内で OpenCV の cv2.imshow を実行しても macOS の場合は表示されません。

from sora_sdk import SoraVideoSink

video_sink = None


def on_frame(frame):
    pass


def on_track(track):
    # 映像トラックの場合
    if track.kind == "video":
        # 映像トラックのため込み場所を指定
        video_sink = SoraVideoSink(track=track)
        # 映像フレームコールバックを指定
        video_sink.on_frame = on_frame

OpenCV

Sora Python SDK サンプルでは OpenCV を利用して映像を出力しています。

SoraVideoCodecType オブジェクト

バージョン 2025.1.0 で追加。

SoraVideoCodecType

映像コーデックの種類を表す列挙型です。

VP8

VP8 コーデック

VP9

VP9 コーデック

AV1

AV1 コーデック

H264

H.264 コーデック

H265

H.265 コーデック

SoraVideoCodecPreference オブジェクト

バージョン 2025.1.0 で追加。

SoraVideoCodecPreference(codecs: Sequence[SoraVideoCodecPreference.Codec] = [])

映像コーデックのエンコード/デコードを細かく指定するためのオブジェクトです。 未指定の場合は全てのコーデックで SoraVideoCodecImplementation.INTERNAL を利用します。

Codec(type, encoder=None, decoder=None)

コーデックの種類とエンコード/デコードに利用する実装を指定します。 encoder や decoder を指定しない場合は None が指定され、利用できなくなります。

from sora_sdk import (
    Sora,
    SoraVideoCodecImplementation,
    SoraVideoCodecPreference,
    SoraVideoCodecType,
)

Sora(
    # ビデオコーデックプリファレンスを指定する
    video_codec_preference=SoraVideoCodecPreference(
        codecs=[
            # VP9 は libwebrtc 組込のソフトウェアコーデック libvpx を利用する
            SoraVideoCodecPreference.Codec(
                type=SoraVideoCodecType.VP9,
                encoder=SoraVideoCodecImplementation.INTERNAL,
                decoder=SoraVideoCodecImplementation.INTERNAL,
            ),
            # AV1 は NVIDIA Video Codec を利用する
            SoraVideoCodecPreference.Codec(
                type=SoraVideoCodecType.AV1,
                encoder=SoraVideoCodecImplementation.NVIDIA_VIDEO_CODEC_SDK,
                decoder=SoraVideoCodecImplementation.NVIDIA_VIDEO_CODEC_SDK,
            ),
            # H.264 は Cisco OpenH264 を利用する
            SoraVideoCodecPreference.Codec(
                type=SoraVideoCodecType.H264,
                encoder=SoraVideoCodecImplementation.CISCO_OPENH264,
                decoder=SoraVideoCodecImplementation.CISCO_OPENH264,
            ),
            # H.265 は Intel VPL を利用する
            SoraVideoCodecPreference.Codec(
                type=SoraVideoCodecType.H265,
                encoder=SoraVideoCodecImplementation.INTEL_VPL,
                decoder=SoraVideoCodecImplementation.INTEL_VPL,
            ),
        ]
    ),
    openh264="/path/to/libopenh264-2.5.0-linux64.7.so",
)

SoraVideoCodecImplementation オブジェクト

バージョン 2025.1.0 で追加。

SoraVideoCodecImplementation

映像コーデックの実装を表す列挙型です。

INTERNAL

INTERNAL は Sora Python SDK がベースにしている libwebrtc に含まれるデコーダーやエンコーダーを利用します。 端末のハードウェアアクセラレーターが利用できる場合、自動的に利用します。

macOS で INTERNAL を指定し、コーデックに H.264 や H.265 を指定した場合は Apple Video Toolbox を利用します。

CISCO_OPENH264

Cisco OpenH264 を利用します。OpenH264 を利用する場合は openh264 に OpenH264 のパスを指定してください。

INTEL_VPL

Intel VPL によるハードウェアアクセラレーターを利用します。 利用できるコーデックは AV1 / H.264 / H.265 です。

NVIDIA_VIDEO_CODEC_SDK

NVIDIA Video Codec によるハードウェアアクセラレーターを利用します。 利用できるコーデックは VP9 / H.264 / H.265 です。

SoraTransformableFrame オブジェクト

バージョン 2025.1.0 で追加。

SoraTransformableFrame
direction
mime_type
payload_type
ssrc
rtp_timestamp

SoraTransformableAudioFrame オブジェクト

バージョン 2025.1.0 で追加。

SoraTransformableAudioFrame
get_data()

映像データを取得します。

set_data(data)

映像データを設定します。

absolute_capture_timestamp

Abs-Capture-Time RTP 拡張の値が含まれます。

audio_level

Audio-Level RTP 拡張の値が含まれます。

contributing_sources

RTP CSRC のリストが含まれます。

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedaudioframemetadata-sequencenumber

receive_time
sequence_number

RTP シーケンス番号が含まれます。受信する音声パケットにのみ含まれます。

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedaudioframemetadata-sequencenumber

type
direction
mine_type

音声の MIME タイプが含まれます。多くの場合 audio/opus です。

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedaudioframemetadata-mimetype

payload_type

RTP ペイロードタイプが含まれます。

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedaudioframemetadata-payloadtype

ssrc

RTP SSRC が含まれます。

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedaudioframemetadata-sequencenumber

rtp_timestamp

RTP タイムスタンプが含まれます。

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedaudioframemetadata-rtptimestamp

SoraTransformableVideoFrame オブジェクト

バージョン 2025.1.0 で追加。

SoraTransformableVideoFrame
get_data()

映像データを取得します。

set_data(data)

映像データを設定します。

contributing_sources

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-contributingsources

frame_dependencies

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-dependencies

frame_id

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-frameid

is_key_frame

キーフレームかどうかが含まれます。

spatial_index

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-spatialindex

temporal_index

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-temporalindex

height

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-height

width

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-width

direction
mine_type

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-mimetype

payload_type

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-rtptimestamp

ssrc

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-rtptimestamp

rtp_timestamp

https://www.w3.org/TR/webrtc-encoded-transform/#dom-rtcencodedvideoframemetadata-rtptimestamp

SoraFrameTransformer オブジェクト

バージョン 2025.1.0 で追加。

SoraFrameTransformer
on_transform
enqueue(frame)
start_short_circuiting()

SoraAudioFrameTransformer オブジェクト

バージョン 2025.1.0 で追加。

SoraAudioFrameTransformer
on_transform
enqueue(frame)
start_short_circuiting()

SoraVideoFrameTransformer オブジェクト

バージョン 2025.1.0 で追加。

SoraVideoFrameTransformer
on_transform
enqueue(frame)
start_short_circuiting()

SoraSignalingType オブジェクト

SoraSignalingType
WEBSOCKET

WebSocket を利用することを示す定数です。

DATACHANNEL

DataChannel を利用することを示す定数です。

SoraDegradationPreference オブジェクト

バージョン 2025.1.0 で追加。

SoraDegradationPreference
MAINTAIN_FRAMERATE

フレームレートを優先することを示す定数です。

MAINTAIN_RESOLUTION

解像度を優先することを示す定数です。

BALANCED

フレームレートと解像度のバランスを優先することを示す定数です。

DISABLED

デグラデーションを無効化することを示す定数です。

SoraSignalingDirection オブジェクト

SoraSignalingDirection
SENT

送信したメッセージを示す定数です。

RECEIVED

受信したメッセージを示す定数です。

SoraSignalingErrorCode オブジェクト

SoraSignalingErrorCode
CLOSE_FAILED

接続のクローズに失敗したことを示すエラーコードです。

CLOSE_SUCCEEDED

接続のクローズが成功したことを示すエラーコードです。

ICE_FAILED

ICE の処理に失敗したことを示すエラーコードです。

INTERNAL_ERROR

内部エラーが発生したことを示すエラーコードです。

INVALID_PARAMETER

無効なパラメータが指定されたことを示すエラーコードです。

PEER_CONNECTION_STATE_FAILED

ピア接続の状態が異常なことを示すエラーコードです。

WEBSOCKET_HANDSHAKE_FAILED

WebSocket のハンドシェイクに失敗したことを示すエラーコードです。

WEBSOCKET_ONCLOSE

WebSocket の接続が閉じられたことを示すエラーコードです。

WEBSOCKET_ONERROR

WebSocket でエラーが発生したことを示すエラーコードです。

SoraLoggingSeverity オブジェクト

SoraLoggingSeverity
VERBOSE

最も詳細なログレベルを示す定数です。

INFO

情報レベルのログを示す定数です。

WARNING

警告レベルのログを示す定数です。

ERROR

エラーレベルのログを示す定数です。

NONE

ログ出力を無効化するための定数です。