Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

FIWARE Real-Time Media Stream processing using Kurento

162 views

Published on

WebRTC を介したビデオ・ストリームの分析と拡張に使用されるメディア・サーバ "FIWARE Kurento" の紹介スライドです。

Published in: Software
  • Be the first to comment

  • Be the first to like this

FIWARE Real-Time Media Stream processing using Kurento

  1. 1. Real-Time Media Stream processing using Kurento Juan Navarro Moreno Kurento Software Developer jnavarro@naevatec.com github.com/j1elo www.kurento.org (Translated into Japanese by Kazuhito Suda k@fisuda.jp)
  2. 2. https://apple.openvidu.io/files/kurento.pdf Meta 写真を撮る必要はありません!
  3. 3. https://apple.openvidu.io/files/kurento.pdf 概要 – Kurento とは  ストリーミング・アプリケーションの作成を簡単にするサーバー  オーディオ/ビデオメディアのストリームの処理に重点を置いています  WebRTC 通信をサポートします  シンプルなワークフロー : 入力→処理→出力 Kurento はオープンソース・プロジェクトです。 GitHub でホストされています: https://github.com/Kurento
  4. 4. https://apple.openvidu.io/files/kurento.pdf 概要 – なぜ Kurento なのか?  送信者と受信者の間の互換性の問題を取り除きます  ストリームを操作または再配布します  ストリームから情報を抽出します 入力ストリーム Kurento Media Server 出力ストリーム プロダクト固有のデータ 例: FIWARE data-store
  5. 5. https://apple.openvidu.io/files/kurento.pdf 概要 – なぜ Kurento なのか? 例:  互換性のないビデオコーデック の抽象化  メディアのマルチ・ポイント 配信  メディアの処理と保存
  6. 6. https://apple.openvidu.io/files/kurento.pdf 概要 – なぜ Kurento なのか?
  7. 7. https://apple.openvidu.io/files/kurento.pdf 概要 – Kurento はどのように機能しますか? 2つの主要コンポーネントを持つサーバー :  エンドポイント : データが入出力される場所  フィルタ : データが処理または変換される構成可能なモジュール メディア・スト リーム Src Sink メディア・スト リーム 入力 エンドポイント 出力 エンドポイント
  8. 8. https://apple.openvidu.io/files/kurento.pdf 概要 – Kurento はどのように機能しますか? エンドポイントとフィルタはリンクされ、ミックス・アンド・マッチ (mix-and- matched) して、パイプラインを形成します。 Input Endpoint Src Sink Output Endpoint Src Sink Src Sink Src Sink
  9. 9. https://apple.openvidu.io/files/kurento.pdf 概要 – Kurento はどのように機能しますか? サーバは RPC API で制御されます  クライアント・アプリケーションは、この API を通じてエンドポイントとフィル タを操作します  Java, Node.js, ブラウザ内の JavaScript 用の既製のクライアント SDK 実世界アプリケーションのコンポーネント :  Kurento Media Server  クライアント・アプリケーションも通常はサーバー  ユーザ・インターフェイス一般的なケースは Web ページです
  10. 10. https://apple.openvidu.io/files/kurento.pdf 概要 – Kurento はどのように機能しますか?
  11. 11. 技術情報
  12. 12. https://apple.openvidu.io/files/kurento.pdf コンポーネントの概要 Kurento Media Server (“KMS”)  コア : 基本機能と RPC API  エレメント : ストリームの入力と出力 に使用されるエンドポイント  フィルタ : すべてのストリーム処理モ ジュールの実装
  13. 13. https://apple.openvidu.io/files/kurento.pdf KMS エレメント (KMS Elements) プロトコルとコーデック メディア・リポジトリ WebRtcEndpoint RtpEndpoint HttpEndpoint PlayerEndpoint RecorderEndpoint
  14. 14. https://apple.openvidu.io/files/kurento.pdf KMS エレメント (KMS Elements) 異なるニーズためのさまざなエンドポイント :  WebRtcEndpoint – WebRTC 標準の完全サポート  現在 Chrome および Firefox と互換性があります。Safari と Edge は作業中 です  すべての WebRTC 語彙: SDP, (Trickle-)ICE, STUN, TURN, Google REMB  RtpEndpoint – RTP および SRTP ストリーム用  ICE の代わりにポート自動検出をサポートしています  HttpEndpoint – GET/POST リクエストを受け入れます。たとえば、KMS への ファイルアップロード
  15. 15. https://apple.openvidu.io/files/kurento.pdf KMS エレメント (KMS Elements) 特別なエンドポイント:  PlayerEndpoint – ファイルシステム、HTTP サーバ、または RTSP ソースの いずれかからコンテンツを取得します。 入力のみ (Input-only)  RecorderEndpoint – ストリームをストレージにリダイレクトします。(Output- only)
  16. 16. https://apple.openvidu.io/files/kurento.pdf KMS フィルタ (KMS Filters) フィルタを通過するデータを処理または変換します  単純な変換である可能性があります。 例 : ビデオを白黒に変換します  外部ライブラリを含む複雑なタスクになる可能性があります。 例 : コン ピュータ・ビジョン・アルゴリズムを適用し、ビデオからフィーチャを 抽出します  想像力は限界です (Imagination is the limit.)
  17. 17. https://apple.openvidu.io/files/kurento.pdf KMS フィルタ (KMS Filters) Computer Vision (コンピュータ・ビジョン) Generic filter (汎用フィル タ) Zbar FaceDetector PlateDetector GStreamerFilter
  18. 18. https://apple.openvidu.io/files/kurento.pdf パイプライン (Pipelines)  すべての要素は、クライアント・アプリケーションからの特定の RPC コマンドによって作成およびリンクされます  前に見たように、複雑なトポロジが可能です
  19. 19. https://apple.openvidu.io/files/kurento.pdf パイプライン (Pipelines) Sink SRC Sink SRCSink SinkSRC WebRtcEndpoint AR Filter RecorderEndpoint HttpGetEndpoint RtpEndpoint MP4 file stored in media repository Web application using HTML5 <video> tag RTP full duplex client video phone WebRTC full duplex client video application Sink
  20. 20. https://apple.openvidu.io/files/kurento.pdf クライアント・アプリケーション (Client Application)  RPCクライアントを実装または含んでいます  エレメントとフィルタを使用してパイプラインの作成を調整します  WebRtcEndpoint は、SDP Negotiation (SDP Offer/Answer Model) を使用した 標準設定方法に従います  クライアント・アプリケーションは、ICE 候補者の周りを通過することを担当 しています  また、RtpEndpoint は設定に SDP を使用しますが、ICE は使用しません  他のエンドポイントには、設定用のカスタム RPC メソッドがあります
  21. 21. https://apple.openvidu.io/files/kurento.pdf クライアント・アプリケーション (Client Application)  FIWARE データストアなどの外部ソースへのアクセスを提供します  残りのビジネスロジックを処理します  Kurento は、Java アプリケーション用の FIWARE 統合パッケージを提供 します  また、利用可能な複数のサンプル・アプリケーションがあります
  22. 22. https://apple.openvidu.io/files/kurento.pdf クライアント・アプリケーション (Client Application) Application Server Media ServerClient Media Negotiation phase 1 Media channel preparation phase (optional) 2 Media exchange phase 3 Specific app logic Pipeline building Pipeline managed media SDP Offer (Mangled) SDP Offer SDP Answer(Mangled) SDP Answer ICE Candidates ICE Candidates
  23. 23. 基盤技術のいくつかを詳しく紹介
  24. 24. https://apple.openvidu.io/files/kurento.pdf GStreamer media library Kurento は GStreamer プロジェクトによって内部で使用されています : https://gstreamer.freedesktop.org GStreamer はすべてのメディア処理を担当しています :  ビデオおよび音声の入力/出力のデコーディング/エンコーディング  通信ストリームの確立。例 : RTP Sessions.  特別な関心事: Agnostic bin
  25. 25. https://apple.openvidu.io/files/kurento.pdf GStreamer Agnostic bin Kurento は、エンドポイント間のコーデック互換性の問題を抽象化します  不可視(invisible)の中間フィルターである "agnosticbin" によって達成され ます  コーデックに互換性がない場合は、オン・ザ・フライ・トランスコーディ ングが適用されます WebRtcEndpoint WebRtcEndpoint Agnostic media adapter, “hidden” behind every connection H.264VP8 Sink SRC Sink SRC
  26. 26. https://apple.openvidu.io/files/kurento.pdf SDP Offer/Answer  WebRTC の標準シグナリング形式  WebRtcEndpoint と RtpEndpoint でコーデックと詳細設定を構成するた めに使用します  SDP はシンプルに始めましたが、混乱するようになりました https://webrtchacks.com/sdp-anatomy/ を参照してください (問題は、IETF の RTCWEB ワーキンググループが、既存のコードを再利用したいと思っていた SIP 界のプレ イヤーによって支配されていたことです。)
  27. 27. https://apple.openvidu.io/files/kurento.pdf SDP Offer/Answer v=0 o=- 0 0 IN IP4 127.0.0.1 s=- c=IN IP4 127.0.0.1 t=0 0 m=audio 9 RTP/AVPF 96 a=rtpmap:96 opus/48000/2 a=sendonly a=direction:active a=ssrc:445566 cname:user@example.com m=video 9 RTP/AVPF 103 a=rtpmap:103 H264/90000 a=sendonly a=direction:active a=ssrc:112233 cname:user@example.com v=0 o=- 372 372 IN IP4 192.168.1.15 s=Kurento Media Server c=IN IP4 192.168.1.15 t=0 0 m=audio 41654 RTP/AVPF 96 a=rtpmap:96 opus/48000/2 a=recvonly a=direction:passive a=ssrc:3224 cname:user225@host-9b2 m=video 61134 RTP/AVPF 103 a=rtpmap:103 H264/90000 a=recvonly a=direction:passive a=ssrc:2717 cname:user225@host-9b2 SDP Offer to RtpEndpoint: SDP Answer from RtpEndpoint:
  28. 28. アプリケーション例
  29. 29. https://apple.openvidu.io/files/kurento.pdf アプリケーション例 : RTP Receiver Kurento RTP Player は最近、Kurento チュートリアルに追加されました :  オーディオ/ビデオストリームを受信します  それをリダイレクトし、WebRTC を介してブラウザに送信します  http://doc-kurento.readthedocs.io/en/latest/user/tutorials.html#rtp-receiver RTP producer
  30. 30. https://apple.openvidu.io/files/kurento.pdf アプリケーション例 : RTP Player void start(String browserSdpOffer) { // Create and link Endpoints MediaPipeline pipeline = kurento.createMediaPipeline(); RtpEndpoint rtpEndpoint = new RtpEndpoint.Builder(pipeline).build(); WebRtcEndpoint webRtcEndpoint = new WebRtcEndpoint.Builder(pipeline).build(); rtpEndpoint.connect(webRtcEndpoint); // Configure the RtpEndpoint String fakeSdpOffer = "..."; String kmsSdpAnswer = rtpEndpoint.processOffer(fakeSdpOffer); String browserSdpAnswer = webRtcEndpoint.processOffer(browserSdpOffer); webRtcEndpoint.gatherCandidates(); }
  31. 31. https://apple.openvidu.io/files/kurento.pdf アプリケーション例 : Magic Mirror  ブラウザからビデオストリームを受信します  コンピュータ・ビジョンを適用して顔を検出し、画像をオーバーレイし ます  変更されたビデオを元のエンドポイントに送信します  http://doc-kurento.readthedocs.io/en/latest/user/tutorials.html#webrtc-magic-mirror
  32. 32. https://apple.openvidu.io/files/kurento.pdf アプリケーション例 : Magic Mirror void start() { // Create and link Endpoints, Filters MediaPipeline pipeline = kurento.createMediaPipeline(); WebRtcEndpoint webRtcEndpoint = new WebRtcEndpoint.Builder(pipeline).build(); FaceOverlayFilter faceOverlayFilter = new FaceOverlayFilter.Builder(pipeline).build(); faceOverlayFilter.setOverlayedImage("mario-hat.png"); webRtcEndpoint.connect(faceOverlayFilter); faceOverlayFilter.connect(webRtcEndpoint); webRtcEndpoint.gatherCandidates(); }
  33. 33. クロージング – 質問
  34. 34. Thank you! http://fiware.org Follow @FIWARE on Twitter Juan Navarro Moreno Kurento Software Developer jnavarro@naevatec.com github.com/j1elo www.kurento.org

×