Why does mediaDevices.enumerateDevices list some devices twice? What is default?












1















I write this code in JavaScript in Chrome:



navigator.mediaDevices.enumerateDevices()
.then((list) => {
console.log(list);
});


This outputs a list of media devices like microphones and cameras. Each device is represented as an object with its own deviceId. But some devices, like one of the microphones in particular, are listed twice. And one time their respective deviceId is set to 'default'. What is so special about a one default microphone? And how do I tell which actual deviceId it has?










share|improve this question



























    1















    I write this code in JavaScript in Chrome:



    navigator.mediaDevices.enumerateDevices()
    .then((list) => {
    console.log(list);
    });


    This outputs a list of media devices like microphones and cameras. Each device is represented as an object with its own deviceId. But some devices, like one of the microphones in particular, are listed twice. And one time their respective deviceId is set to 'default'. What is so special about a one default microphone? And how do I tell which actual deviceId it has?










    share|improve this question

























      1












      1








      1








      I write this code in JavaScript in Chrome:



      navigator.mediaDevices.enumerateDevices()
      .then((list) => {
      console.log(list);
      });


      This outputs a list of media devices like microphones and cameras. Each device is represented as an object with its own deviceId. But some devices, like one of the microphones in particular, are listed twice. And one time their respective deviceId is set to 'default'. What is so special about a one default microphone? And how do I tell which actual deviceId it has?










      share|improve this question














      I write this code in JavaScript in Chrome:



      navigator.mediaDevices.enumerateDevices()
      .then((list) => {
      console.log(list);
      });


      This outputs a list of media devices like microphones and cameras. Each device is represented as an object with its own deviceId. But some devices, like one of the microphones in particular, are listed twice. And one time their respective deviceId is set to 'default'. What is so special about a one default microphone? And how do I tell which actual deviceId it has?







      javascript webrtc






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 14 '18 at 16:39









      GhermanGherman

      1,10311737




      1,10311737
























          1 Answer
          1






          active

          oldest

          votes


















          2














          A deviceId lets web sites manage which device their user is using. E.g. store it in a cookie to remember the user's preference from last time.



          Some browsers (Chrome, Opera) list the same microphone twice, with different ids. In my case:




          1. Default - Internal Microphone (Built-in)

          2. Internal Microphone (Built-in)


          The former is "the OS default", whatever the end-user has configured in System Preferences/Sound (OSX) or Control Panel/Sound (Windows). The idea is: when recalled from a cookie and used, its id gets you whatever is configured in the OS at the time of use, which may differ from last time.



          The latter is always the specific mic. Their groupIds match; they're the same physical device atm.



          The deviceId = "default" is an oddity of Chrome (and Opera). AFAICT it's a valid id like any other. If you want the other one, compare their groupIds to find it.



          Safari does not do this. Firefox recently stopped doing it (as of version 63).



          Cameras are never duplicated in this way.






          share|improve this answer

























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53304934%2fwhy-does-mediadevices-enumeratedevices-list-some-devices-twice-what-is-default%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            A deviceId lets web sites manage which device their user is using. E.g. store it in a cookie to remember the user's preference from last time.



            Some browsers (Chrome, Opera) list the same microphone twice, with different ids. In my case:




            1. Default - Internal Microphone (Built-in)

            2. Internal Microphone (Built-in)


            The former is "the OS default", whatever the end-user has configured in System Preferences/Sound (OSX) or Control Panel/Sound (Windows). The idea is: when recalled from a cookie and used, its id gets you whatever is configured in the OS at the time of use, which may differ from last time.



            The latter is always the specific mic. Their groupIds match; they're the same physical device atm.



            The deviceId = "default" is an oddity of Chrome (and Opera). AFAICT it's a valid id like any other. If you want the other one, compare their groupIds to find it.



            Safari does not do this. Firefox recently stopped doing it (as of version 63).



            Cameras are never duplicated in this way.






            share|improve this answer






























              2














              A deviceId lets web sites manage which device their user is using. E.g. store it in a cookie to remember the user's preference from last time.



              Some browsers (Chrome, Opera) list the same microphone twice, with different ids. In my case:




              1. Default - Internal Microphone (Built-in)

              2. Internal Microphone (Built-in)


              The former is "the OS default", whatever the end-user has configured in System Preferences/Sound (OSX) or Control Panel/Sound (Windows). The idea is: when recalled from a cookie and used, its id gets you whatever is configured in the OS at the time of use, which may differ from last time.



              The latter is always the specific mic. Their groupIds match; they're the same physical device atm.



              The deviceId = "default" is an oddity of Chrome (and Opera). AFAICT it's a valid id like any other. If you want the other one, compare their groupIds to find it.



              Safari does not do this. Firefox recently stopped doing it (as of version 63).



              Cameras are never duplicated in this way.






              share|improve this answer




























                2












                2








                2







                A deviceId lets web sites manage which device their user is using. E.g. store it in a cookie to remember the user's preference from last time.



                Some browsers (Chrome, Opera) list the same microphone twice, with different ids. In my case:




                1. Default - Internal Microphone (Built-in)

                2. Internal Microphone (Built-in)


                The former is "the OS default", whatever the end-user has configured in System Preferences/Sound (OSX) or Control Panel/Sound (Windows). The idea is: when recalled from a cookie and used, its id gets you whatever is configured in the OS at the time of use, which may differ from last time.



                The latter is always the specific mic. Their groupIds match; they're the same physical device atm.



                The deviceId = "default" is an oddity of Chrome (and Opera). AFAICT it's a valid id like any other. If you want the other one, compare their groupIds to find it.



                Safari does not do this. Firefox recently stopped doing it (as of version 63).



                Cameras are never duplicated in this way.






                share|improve this answer















                A deviceId lets web sites manage which device their user is using. E.g. store it in a cookie to remember the user's preference from last time.



                Some browsers (Chrome, Opera) list the same microphone twice, with different ids. In my case:




                1. Default - Internal Microphone (Built-in)

                2. Internal Microphone (Built-in)


                The former is "the OS default", whatever the end-user has configured in System Preferences/Sound (OSX) or Control Panel/Sound (Windows). The idea is: when recalled from a cookie and used, its id gets you whatever is configured in the OS at the time of use, which may differ from last time.



                The latter is always the specific mic. Their groupIds match; they're the same physical device atm.



                The deviceId = "default" is an oddity of Chrome (and Opera). AFAICT it's a valid id like any other. If you want the other one, compare their groupIds to find it.



                Safari does not do this. Firefox recently stopped doing it (as of version 63).



                Cameras are never duplicated in this way.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 14 '18 at 21:26

























                answered Nov 14 '18 at 21:15









                jibjib

                21.1k64490




                21.1k64490
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53304934%2fwhy-does-mediadevices-enumeratedevices-list-some-devices-twice-what-is-default%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Xamarin.iOS Cant Deploy on Iphone

                    Glorious Revolution

                    Dulmage-Mendelsohn matrix decomposition in Python