https://a.storyblok.com/f/270183/1368x665/30a0c8dafd/26jul_vonage-video-api-python-sdk_blog_r2.png

PythonとVonageを使ったライブキャプション、モデレーション、および録画

最終更新日 July 9, 2026

所要時間:2 分

このブログポストの最後には、Vonage Video API の Python SDK をより深く理解し、機能豊富なブラウザベースのビデオ会議体験を構築するための足場として使用できるサンプルコードも紹介します。

はじめに

2020年のパンデミックは、標準的なコミュニケーションツールとしてのビデオ会議の普及を加速させた。今日、ウェブベースのビデオ会議は、企業、教育者、消費者の日常生活の一部となっている。開発者は ビデオAPIおよび Python SDKを使用して、モデレーション、トランスクリプション、および録画機能を備えた安全なリアルタイムのビデオ会議アプリケーションを構築することができます。

時が経つにつれ、テクノロジーは大きく進化し、それに求められるものも大きくなってきた。かつては最先端と思われたソリューションも、今では基本機能として期待されている。最新のビデオ会議プラットフォームは、高品質のオーディオとビデオ、信頼性の高い接続性、低遅延通信を提供することが期待されています。

このブログ記事では、Vonage Video API の Python SDK について説明します。 Vonage Video API の Python SDK について説明します。の Python SDK について説明し、ビデオ会議アプリケーションにモデレーションとアーカイブ機能を組み込む方法を示します。各機能は付属のサンプルアプリケーションで実演されています。Video API をまったく知らない場合は、このチュートリアルから始めるとよいでしょう。 チュートリアルをご覧ください。.コード自体に進みたい場合は、リポジトリの リポジトリの README.

具体的には、このブログ記事で取り上げている:

  • ライブ・キャプション

  • 参加者のミュート

  • 参加者の削除

  • レコーディング・セッション

  • 録画セッションの閲覧

A stylized image illustrating all the features the Vonage Video API offers.Integrate live interactive video directly into your web, mobile, and desktop applications with the Vonage global video platform.

Flaskとトンネリングを理解する

このブログ記事のサンプル・アプリケーションは、Vonage以外の技術コンセプトやツールに依存しており、ソフトウェア開発の他の分野で役立つ可能性があります。

Python Flaskアプリとは?

このブログ記事のサンプルアプリケーションでは フラスコPython用の軽量かつ強力なWebフレームワークです。フレームワークとして、開発者はWebアプリケーションを素早く立ち上げることができます。このチュートリアルでは、その使いやすさとミニマルなアプローチからFlaskを選びました。他の Python Web 開発フレームワークとは異なり、シンプルなビデオ会議ソリューションを作成するのに必要なものだけを提供してくれます。

トンネリングとは何か?

サンプルアプリはローカルで実行されるため、公共のインターネットからはアクセスできません。ローカルアプリケーションがパブリックにアクセスできない場合、リモートの参加者はビデオセッションに接続できません。そこでトンネリングの出番です。トンネリングは、一時的または静的な公開URLを通じて、ローカルサーバーを公開インターネットに公開します。 ngrokは、このサービスを提供するソフトウェアプラットフォームです。ngrokの詳細については、当社の ブログ記事をご覧ください。

Video API コアコンセプト

エンドユーザーは、シームレスで中断のない、完璧なビデオ通話を期待しています。しかし、このレベルの信頼性を実現するには、水面下でかなりの複雑さが伴います。

リアルタイムのビデオ通信には、いくつかの技術的な課題がある。発信者は多様なハードウェアを介して接続し、多様な接続インフラで動作し、複数の地域にまたがる。さらに、スマートフォンがWi-Fi接続からモバイルデータに移行したり、企業のセキュリティ・プロトコルが特定のUDP(User Datagram Protocol)トラフィックを制限したり、古いコンピュータが処理のボトルネックになったりするなど、アクティブなセッション中にネットワークの状態が変動することもあります。

Vonage Video APIにより、開発者は高品質のリアルタイムビデオ、インスタントメッセージング、画面共有、および関連機能をWebおよびモバイルアプリケーションに統合することができます。この機能を提供するために、Video APIは以下を活用しています。 WebRTCを基盤としています。Video API を使用する際には、以下のコンセプトが重要です:

  • セッション:セッションとは、コネクションとストリームの論理的なグループである。同じセッション内の接続はメッセージを交換できる。セッションは、参加者が通信を行う仮想的な部屋として機能する。

  • 接続:セッションに参加し、メッセージを送受信できるエンドポイント。コネクションは、接続されていてメッセージを受信できるか、切断されていてメッセージを受信できないかのどちらかである。

  • ストリーム:メディアストリームは2つのコネクション間を流れる。これは、交換されるメディアを含む実際のバイトを指す。メディアは、オーディオのみ、またはオーディオとビデオで構成できます。スクリーンシェアやカスタムストリームを作成することもできます。

  • トークン:Video API プラットフォームは認証にトークンを使用するので、プラットフォーム上でユーザーを作成することを心配する必要はありません。このアプリの例では、トークンを使用してビデオセッションの参加者をその場で作成します。

  • 出版社:クライアントがメディア・ストリームを公開すること。

  • 購読者:メディアストリームを受信するクライアント。

  • シグナリング:これは、セッションに接続されたクライアント間でテキストやデータをメッセージとして送信することを指します。これらのメッセージにより、開発者は基本的なテキストチャットを構築したり、あるクライアントから別のクライアントに指示を送ったり、その他の価値ある体験を作り出すことができます。

これらの重要な用語や概念についてさらに深く知りたい方は、以下をご覧ください。 Video API用語集を参照するか Video API ドキュメント.また、YouTube の Video API の紹介もご覧ください:

Client-Side SDKとServer-Side SDKの違いは何ですか?

動画 Video API プラットフォームは、リアルタイムの高品質なインタラクティブビデオ、メッセージング、画面共有などを Web やモバイルアプリに組み込むことを可能にします。このプラットフォームには、ウェブ、モバイル、デスクトップ用のクライアント・ライブラリと、サーバー側のSDKが含まれています。

SDKとは?

SDKとは、"software development kit"(ソフトウェア開発キット)の略です。SDKは、開発者が特定のプラットフォームや技術を簡単に実装できるように設計されたツールのインストール可能なパッケージです。Video API用Python SDKは、APIを言語特有のパターンや構造に変換するため、Python開発者がVonageをアプリケーションに統合することを容易にします。

クライアントサイドSDKもサーバーサイドSDKも、この種のツールを提供している。違いは、アプリケーションのアーキテクチャのどこに配置されるかにあります。クライアントサイドSDKは、開発者がユーザーインターフェイス、インタラクティブな体験、リアルタイムのコミュニケーション機能を構築するのに役立ちます。このため、クライアントサイドSDKは通常、JavaScriptとそのフレームワーク、ライブラリ、およびモバイルとデスクトップのオペレーティングシステム向けに書かれています。

逆に、サーバーサイドSDKはバックエンド開発のためのツールを提供する。これは、リクエストの処理、データの処理、ビジネスロジックの追加、セキュリティ、認証を担当するアプリケーションの部分です。その名の通り、サーバーサイドSDKは、開発者がサーバー(通常はクラウド)にデプロイされるソフトウェアを書くのを支援するもので、そのため一般的にPython、Java、Node.js、またはPHP向けに書かれている。

以下の表は、クライアントサイドSDKとサーバーサイドSDKの違いをまとめたものです:

クライアント側

サーバーサイド

場所

アプリケーション・アーキテクチャ

  • ユーザーのブラウザまたはデバイス(モバイルアプリ)で動作

  • UIインタラクション、フロントエンド・ロジック、ローカル・データ管理を行う。

  • クライアントマシンで直接実行

  • バックエンドサーバーで実行

  • ビジネスロジック、データベース操作、APIリクエストの処理

  • サーバー間またはサーバーのリクエスト処理中に実行される

セキュリティと認証

  • 高い被曝リスク

  • クライアントコードに埋め込まれた認証情報を検査できる

  • 機密の鍵や秘密は決して保存してはならない

  • パブリックAPIコールや認証を必要としない操作に最適

  • クライアント側での認証チェックはバイパスされる可能性があるため、バックエンドでの検証は不可欠である。

  • デフォルトでより安全

  • 認証情報とAPIキーはサーバーサイドに保存され、ユーザーに公開されることはありません。

  • 機密性の高い業務(決済処理、認証)を安全に実施できる。

  • 認証チェックは、バイパスできないサーバーサイドで行われる。

プログラミング言語

  • JavaScriptとそのフレームワークとライブラリ

  • アンドロイド、iOS

  • Python、Java、Node.js、PHP、Ruby

このブログ記事では Video API 用 Python SDK について説明します。.これはサーバサイドの SDK で、セッションの作成と管理、トークンの生成、アーカイブを行うことができます。クライアントサイドとサーバーサイドの Video API の相互作用については ドキュメンテーション.

Python SDKでビデオ会議アプリを作る

このブログ記事で紹介するサンプル・アプリケーションは、バックエンドにPythonとFlask、フロントエンドにJavaScriptを使用して、ビデオ・セッションの作成と調整を行います。このアプリケーションは以下の機能をサポートしています:

  • ビデオセッションの作成

  • 発表者がストリームを公開できるようにする

  • プレゼンターを可能にする

    • ライブ・キャプションを有効にする

    • 参加者のミュートまたは削除

    • セッション・アーカイブの開始

コードを立ち上げて実行したい場合は、READMEにあるの README に従ってください。.セッションの作成と参加者間のリアルタイムチャットの有効化については、次のブログ記事を参照してください。 ビデオ会議アプリケーションを構築する。.

ライブキャプションを有効にする

ライブキャプションは、アプリケーションのユーザーエクスペリエンスとユーザーエンゲージメントを向上させます。キャプションは、アプリケーションのアクセシビリティスコアを向上させます。一部の地域のアクセシビリティ規制では、キャプションのサポートが必要な場合があります。キャプションは、騒がしい環境や制御されていない環境での理解力を向上させ、全体的なユーザー体験を改善します。

あなたは ライブキャプションAPIを使用すると、音声ストリームを書き起こし、アプリケーション用にリアルタイムのキャプションを生成できます。Video Live Captions API は、トランスクリプションサービスを使用して、セッションの参加者にリアルタイムのキャプションを提供します。

ご注意ください:Live Captions は使用ベースの製品です。利用料金は、トランスクリプション・サービスに送信された参加者のオーディオ・ストリーム(またはストリームID)の数に基づいて課金されます。詳細については Live Captions API 価格設定ページ.

ライブ・キャプションを使用するには、セッションを メディア・ルーター」オプションキャプションを有効にするには、参加者は "Moderator "ロールのトークンが必要です。 が必要です。.

Python SDKでは、これらのオプションは SessionOptionsTokenOptionsオブジェクトで処理されます:

session_options = SessionOptions(media_mode=MediaMode.ROUTED)
video_session = vonage_client.video.create_session(options=session_options)
if presenter:
    token_options = TokenOptions(session_id=session_id, role=TokenRole.MODERATOR)
else:
    token_options = TokenOptions(session_id=session_id, role=TokenRole.PUBLISHER)
    
token = vonage_client.video.generate_client_token(token_options).decode("utf-8")

コード例では コード例では presentersを持つトークンを生成することで、キャプションを有効にする機能を付与している。 MODERATORを持つトークンを生成することで、キャプションを有効にする機能を付与しています。

トークン、トークンの役割、各役割の能力についての詳細は ドキュメントを参照してください。.

以下のエンドポイントは、バックエンドと通信し、Live Captions APIにリクエストを送信するために使用するものです。キャプションを開始するエンドポイントは、セッションIDとトークンを使って CaptionsOptionオブジェクトを作成し start_options関数に渡されます。関数は CaptionsDataオブジェクトを返します。

@app.route("/captions/start", methods=["POST"])
def start_captions():
    """Endpoint to start captions"""
    data = request.get_json()
    print(f"Start captions request data: ==> {data}")
    session_id = data.get("sessionId")
    token_id = data.get("token")

    if not session.get("is_presenter"):
        return jsonify({"error": "Unauthorized"}), 403

    if not session_id or not token_id:
        return jsonify({"error": "sessionId or token is missing"}), 400

    options = CaptionsOptions(
        session_id=session_id,
        token=token_id,
    )

    captions: CaptionsData = vonage_client.video.start_captions(options)

    return jsonify({"caption_id": captions.captions_id})

キャプションIDはフロントエンドに渡され、UIに書き起こされた音声を表示するために使用されます。アプリケーションの例では、キャプションは Video の下に表示されます。キャプションが表示されるまでに時間がかかる場合があります。

A screenshot of the captions as they appear in the UI.

Live Captions APIの詳細、およびフロントエンド実装のサンプルコードについては、次のドキュメントを参照してください。 ドキュメンテーション.

セッションのモデレーション参加者のミュートと削除

モデレーターは、全体的な会議体験を向上させるために、参加者の音声やセッションへのアクセスをコントロールする必要があるかもしれません。たとえば、参加者がマイクのミュートを忘れて、セッション中に意図しない音声の乱れが発生したり、極端なモデレーションでは、参加者をセッションから強制的に排除する必要があるかもしれません。 モデレータのロール権限を持つ参加者は、Video API を使ってこれらの両方の機能にアクセスできます。

参加者のミュート

サンプル・アプリケーションでは、APIを呼び出すミューティング・エンドポイントを定義します。APIはセッションIDとストリームIDを必要とする。

@app.route("/mute-stream", methods=["POST"])
def mute_stream():
    data = request.json
    session_id = data.get("sessionId")
    stream_id = data.get("streamId")

    vonage_client.video.mute_stream(session_id, stream_id)
    return jsonify({"message": f"Stream {stream_id} muted successfully."}), 200

さらに、モデレーターのロールを持つ参加者は、以下をミュートすることができます。 すべてのセッションのすべてのストリームをミュートし 無効にするを無効にすることができます。これらの関数を実装するのはこのブログ記事の範囲外ですが、コード例は 参加者のミューティング.

ミューティング・エンドポイントを扱う際には、いくつかのポイントを覚えておくことが重要です:

  • のAPIはない。 ミュートを解除するはありません。これは、一般的なビデオセッションの使用例では、参加者がミュートを解除するためです。 参加者自身を解除するからです。

  • 使用方法 mute_all_streamsを使うと、現在のすべてのストリームと セッションで公開されたすべてのストリームをミュートする。.この関数は、以下のストリームIDのリストも受け付けます。 のリストも受け付ける。のリストも受け付ける。

  • 以下のいずれかの結果、ストリームがミュートされた場合。 mute_streamまたは mute_all_streamsのどちらかの結果、ストリームがミュートされると Publisherオブジェクトは muteForcedイベントをディスパッチします。

  • を実行すると disable_mute_all_streamsを実行すると 新しい公開ストリーム- 既存のストリームはミュートのままです。

A screenshot showing a list of muted participants.

参加者の削除

参加者を削除するには disconnect_clientAPIを呼び出すことで参加者を削除できます。アプリケーションの例では、このAPIを呼び出す /remove-participantエンドポイントを定義しています。APIが成功するためには、セッションIDと接続IDが必要です。

@app.route("/remove-participant", methods=["POST"])
def remove_participant():
    data = request.json
    session_id = data.get("sessionId")
    connection_id = data.get("connection_id")

    vonage_client.video.disconnect_client(session_id, connection_id)
    return (
        jsonify({"message": f"Participant {connection_id} removed successfully."}),
        200,
    )

セッションのアーカイブ

ビデオセッションを録画して、後で見たり処理したりしたい場合があるかもしれません。SDKの archiveSDKのメソッドには以下の機能があります:

  • アーカイブ録画の開始

  • アーカイブ録画の停止

  • アーカイブ録画のリストアップ

  • アーカイブ記録情報の検索

  • アーカイブの削除

このブログ記事と付属のサンプルアプリケーションでは、アーカイブ録画の開始、停止、取得に焦点を当てます。

アーカイブメソッドを使用するには、ルーティングメディアモードでセッションを作成する必要があります。アーカイブを作成できるのは、少なくとも1つのクライアントが接続されているセッションのみです。

サンプル・アプリケーションでは、以下のエンドポイントを定義します。 CreateArchiveRequestオブジェクトを作成し、それを start_archive関数に渡します:

@app.route("/archive/start", methods=["POST"])
def start_archive():
    """Endpoint to start archiving"""
    data = request.get_json()
    session_id = data.get("sessionId")

    if not session_id:
        return jsonify({"error": "sessionId is required"}), 400
    if not session.get("is_presenter"):
        return jsonify({"error": "Unauthorized"}), 403

    archive_options = CreateArchiveRequest(session_id=session_id)
    archive: Archive = vonage_client.video.start_archive(archive_options)

    archive_id = archive.id

    return jsonify({"archive_id": archive_id, "status": archive.status})

結果として得られるアーカイブIDを使って、アーカイブの録画を停止するためのエンドポイントを定義することができる:

@app.route("/archive/<archive_id>/stop", methods=["POST"])
def stop_archive(archive_id):
    """Endpoint to stop archiving"""

    if not archive_id:
        return jsonify({"error": "archiveId is required"}), 400

    archive: Archive = vonage_client.video.stop_archive(archive_id)
    return jsonify({"archive_id": archive.id, "status": archive.status})

A screenshot showing the recording options.

アーカイブの録画を停止すると、Vonage ビデオプラットフォームは MP4 ファイル、または個別のストリームアーカイブの場合は ZIP ファイルを作成します。アーカイブの準備ができると、ステータスが availableに変わり get_archiveメソッドはアーカイブの URL を返します。このメソッドは、サンプル・アプリケーションのフロントエンドでポーリングと組み合わせて使用し、アーカイブへのリンクをレンダリングするエンドポイントを定義します。

@app.get("/archive/<archive_id>/status")
def archive_status(archive_id):
    """Endpoint to check status of archive"""
    try:
        archive = vonage_client.video.get_archive(archive_id)
        return jsonify(
            {
                "status": archive.status,
                "url": archive.url,
            }
        )
    except Exception as e:
        return jsonify({"error": str(e)}), 500

このコード例では、Video API を使ったアーカイブ録画の基本的な使い方を説明します。Video アーカイブで可能なことの詳細については ドキュメント.

まとめ

Vonage Video API Python SDKは、高度なモデレーションとアーカイブ機能を備えたリアルタイム・ビデオ・アプリケーションの構築を容易にします。このアプリケーションの例では、セッションの作成、参加者の権限の管理、ライブキャプションの有効化、参加者のモデレーション、後で再生するためのビデオセッションの録画方法について説明します。

これらの機能は、特にアクセシビリティ、モデレーション制御、セッションの永続性を必要とするアプリケーションにおいて、最新のビデオ会議体験に不可欠です。Python SDK を Flask および Video API プラットフォームと組み合わせることで、開発者は信頼性の高いリアルタイム通信ワークフローを迅速にプロトタイプ化し、導入することができます。

シンプルな Flask バックエンドと JavaScript を使用したフロントエンドを組み合わせることで、ビデオ会議アプリのテンプレートが完成します。この基盤を拡張して、モデレーションコントロール、録画、画面共有、UI/UXの強化など、ユースケースに合ったより高度な機能を追加することができます。より迅速な反復のために Video API プレイグラウンドを使えば、ブラウザ上で簡単にさまざまな機能を試すことができます!

その他の資料

ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。

最新の開発者向けニュース、ヒント、イベント情報をお届けします。

シェア:

https://a.storyblok.com/f/270183/400x400/2c4345217d/liz-acosta.jpeg
Liz Acostaデベロッパー・アドボケイト

Liz AcostaはVonageのDeveloper Advocateです。映画学生からマーケター、エンジニア、デベロッパー・アドボケイトという彼女のキャリア・パスは型破りに見えるかもしれないが、デベロッパー・リレーションズにとってはごく一般的なものだ!ピザ、植物、パグ、Pythonが大好き。