Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MediaStream を利用した画像処理 2つのパターン

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for tetter tetter
December 08, 2023
530

MediaStream を利用した画像処理 2つのパターン

Avatar for tetter

tetter

December 08, 2023
Tweet

Transcript

  1. 自己紹介 2 NAME: - tetter @tttr_mt tetter27 2017 2018 2022/11

    前職 (通信事業会社) Android (Java) 〃 EdgeAI (Python) NTTコミュニケーションズ株式会社 WebRTC (JS など) CARRIER: FEATURES: - ブラウザ上での AI、画像処理などに興味あり - WebRTC Meetup 運営
  2. MediaStream の活用方法の一例 * 4 - WebRTC API を使用すればそのまま相手へ送信できる - 画像処理をするなら一旦

    Canvas へ出力するのが一般的 Track (映像) Track (音声) MediaStream <canvas> WebRTC ctx.drawImage() RTCPeerConnection.addTrack() elem.srcObject <video> *) 他にもファイル操作などが可能
  3. 処理した映像を送信する場合 5 - Canvas で画像処理してから、再び MediaStream へ入れる - 一連のループは requestAnimationFrame()

    を活用 画像処理 (Canvas) WebRTC Track (映像) Track (音声) MediaStream Track (映像) Track (音声) MediaStream requestAnimationFrame()
  4. MediaStreamTrack Ins(略) を使用した画像処理 9 - MediaStream と Streams API でパイプラインを繋ぐことができる

    - Streams API は流れてきたデータを次々と処理できる API - タブを切り替えてもバックグラウンドで動作可能! WebRTC Track (映像) Track (音声) MediaStream Track (映像) Track (音声) MediaStream 画像処理 Streams API MediaStreamTrackProcessor MediaStreamTrackGenerator *) 音声処理にも使用可能 画像処理 *
  5. 疑問 11 Q. setInterval() + Worker を使うのは? A. MediaStream と同期できないので使い方によってはおすすめできない

    - 特定のフレームを取得できないことがある - 同じフレームを複数回取得してしまうことがある
  6. 参考リンク - requestAnimationFrameの泣き所をVideoTrackReader + αで解決する (https://zenn.dev/mganeko/articles/videotrackreader) - SkyWayで軽量なバーチャル背景を実現する方法 (https://note.com/skyway/n/ned76e8596d9c) -

    動作を確認するために今回作ったもの - RequestAnimationFrame + WebRTC - MediaStreamTrackProcessor/Generator + 色変換 + WebRTC (https://github.com/tetter27/webrtc-color-processing) 12