3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WebRTCAdvent Calendar 2017

Day 16

【豆知識】MediaStreamAPIのdeviceIdとchooseDesktopMedia()のstreamId

Last updated at Posted at 2017-12-15

ちょっと細かい話となってしまいますが、知っておいて損はないと思いますので投稿しました。

MediaDeviceのdeviceIdは固定(不変)

navigator.mediaDevices.enumrateDevices()で取得されるカメラやマイクといった外部デバイス(MediaDevice)のdeviceIdは不変なもので、ブラウザーのリロードや再起動、またはシステムを再起動しても、デバイスごとに同じdeviceIdが割り振られます。

DesktopMediaのstreamIdは動的(1回のみgUM()可能)

それに対して、Chrome拡張機能のAPIであるchooseDesktopMedia()で取得されるstreamIdは、chooseDesktopMedia()実行するごとに同じスクリーンやウィンドウを選択したとしても違う値が割り振られ、また、1回getUserMedia()でストリームを取得したら、2回目以降同じstreamIdでgetUserMedia()でストリームを取得しようとしてもできません。

Firefoxのスクリーンキャプチャーでは?

そもそも、deviceIdやstreamIdといったものが実装上において扱うことがありません。また、取得されたストリームのvideoトラックからgetConstraints()を実行しても、deviceIdは空のオブジェクトとなります。(chromeのchooseDesktopMedia()ではgetConstraints()で、deviceIdプロパティでstreamIdが取得できる)

ちなみにScreen Capture APIでは

現在、Screen Capture APIの仕様が標準化に向けて策定中ですが、Firefoxのスクリーンキャプチャーに近いものとなっており、deviceIdについても策定中の仕様において言及されており、deviceIdは利用者側では扱わないよう策定されています。
仕様のdevice-identifiersの項目

つまり

ユーザーが選択したカメラやマイクを保持しておけば、リロードや再起動されたとしても(ユーザーの操作なしに)即座に前の状態に復帰させることが可能ですが、スクリーンキャプチャーの場合は、リロードや再起動するごとに、再度、ユーザーに選択させなければなりません。
たぶん、セキュリティー上このような仕様となっているのだと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?