*LiveKit*WebRTCでリアルタイム動画配信


Gリポートの開発を担当している趙です。

前回は無料で使えるliveKitを構築をしてみました。

*LiveKit*無料でビデオ通話ができるサーバーを構築

引き続き今回、このサーバーを利用して動画配信をしたいと思います。*ただし映像だけ

利用するSDK

前回ご紹介したように、LiveKitには豊富なSDKが用意されており、

さまざまな言語での実装がサポートされています。

動画配信の方法としてよく使われるのはFFmpegですが、

今後は動画をフレームごとに処理しながら配信する可能性も考慮し、今回はPythonライブラリを利用して実装します。

動画配信のサンプルとして publish_hue.py が用意されており、それをベースに改造します。

サンプルコードの概要

ビデオの色相(Hue)を周期的に変化させることで、色が変わるビデオストリームを作成して、指定したルームに配信します。

main関数とdraw_color_cycle関数に注目したいです。

main関数の役割

  • トークンの生成と接続: LiveKitサーバーへの接続に必要なトークンを生成し、サーバーに接続します。
  • ビデオトラックの公開: 新しいビデオソースとトラックを作成し、ルームに公開します。
  • ビデオストリームの更新: 色が変わるビデオストリームを非同期で描画するタスクを開始します。

draw_color_cycle関数は以下のように機能します

  • ビデオフレームの準備: ビデオフレームを格納するバッファを準備し、numpy配列を使ってアクセスします。
  • 色の変化: 色相(hue)を周期的に変化させ、HSVからRGBに変換し、ビデオフレームに設定します。
  • フレームのキャプチャ: 変更されたビデオフレームをビデオソースにキャプチャします。
  • フレームレートの管理: フレームレートに合わせて処理を調整し、ループを継続します。

ここでやりたいことは、draw_color_cycleをまねて、色相の代わりに動画フレームをキャプチャすること

コード改造

  • まずは動画のフレームをキャプチャすることから

Pythonに馴染みのある方ならよく目にするOpenCV(cv2)を使ってフレーム抽出します。

*テスト用動画はこちら

https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_1MB.mp4 (コーディック:h264)
 

video_capture.read()が成功した場合、frameに動画のフレームデータが保存されるが、

フレームそのままでは配信できないため、rtc.VideoFrameに変換することが必要で、

まずはframeの形式を調べます。

結果RGB frameでした、アルファチャンネルを追加してフレーム変換

あとはできたnew_frameをキャプチャするだけ

動作チェック

前回構築したLiveKitサーバーに配信してみました!

 

 

エコモットでは、WebRTCをはじめとするさまざまな技術を活用し、

IoTに関連した様々な案件に取り組んでいます。

私たちと一緒にモノづくりに挑戦していただける方を募集中です。