<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>235713</bug_id>
          
          <creation_ts>2022-01-27 06:54:21 -0800</creation_ts>
          <short_desc>[macOS] Acquiring stream from one microphone breaks all previous streams from another microphones</short_desc>
          <delta_ts>2022-12-03 13:43:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>Safari 15</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>macOS 12</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>ivan.zahrodskyi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>olena.bezkrovna</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1834504</commentid>
    <comment_count>0</comment_count>
    <who name="">ivan.zahrodskyi</who>
    <bug_when>2022-01-27 06:54:21 -0800</bug_when>
    <thetext>I want to get several audio MediaStreams from different mics, but getting new stream breaks previous.
To reproduce this we need machine with 2 microphones connected.



Steps:
1) get stream from first microphone (str1)
2) attach this stream to some audio node (or put to peer connection)
3) get another stream from second microphone (str2)

actual result:
observe that str1 now starts playing audio from second microphone


some code example to try this

//******************************//
//get all available microphones 
let devices = await navigator.mediaDevices.enumerateDevices();
let microphones = devices.filter(d =&gt; d.kind === &apos;audioinput&apos;);

//get audio from first microphone
let str1 = await navigator.mediaDevices.getUserMedia({audio: {deviceId: microphones[0].deviceId}});

//play first stream
let audio = new Audio();
audio.srcObject = str1;
audio.play();

//get audio from second microphone
let str2 = await navigator.mediaDevices.getUserMedia({audio: {deviceId: microphones[1].deviceId}});

//observe that audio now starts playing audio from second microphone (not from str1)

//******************************//</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836919</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-03 06:55:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/88433154&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838258</commentid>
    <comment_count>2</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-02-07 11:22:29 -0800</bug_when>
    <thetext>Can you clarify which platform/application is the target for this request? Is it MacOS? iOS? Safari?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851820</commentid>
    <comment_count>3</comment_count>
    <who name="">olena.bezkrovna</who>
    <bug_when>2022-03-16 08:36:24 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #2)
&gt; Can you clarify which platform/application is the target for this request?
&gt; Is it MacOS? iOS? Safari?

The issue was updated (problem was observed on macOS 12, 11 on Safari 15)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1916495</commentid>
    <comment_count>4</comment_count>
      <attachid>463876</attachid>
    <who name="">ivan.zahrodskyi</who>
    <bug_when>2022-12-03 13:43:01 -0800</bug_when>
    <thetext>Created attachment 463876
Example to reproduce this problem

Issue is still reproducible

I tested on MacBook Pro 16 (2019) MacOS 13.1 Beta (22C5059b) Safari Version 16.2 (18614.3.7.1.3)

I created small example.
- press GET FIRST
- make sure you can hear audio from first microphone
- select another microphone in second select
- press GET_SECOND

after getting second microphone - first is lost

you can open console and see that stream1 is not active and audio track has readyState === &apos;ended&apos;

this is in 90% tries..but sometimes first track is still active but audio source is wrong (audio plays from second microphone)


In our application there is a case when we have 2 different audio from different microphones which we send via webrtc to remote participants. But because of this issue it doesnt work in safari.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>463876</attachid>
            <date>2022-12-03 13:43:01 -0800</date>
            <delta_ts>2022-12-03 13:43:01 -0800</delta_ts>
            <desc>Example to reproduce this problem</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>2085</size>
            <attacher>ivan.zahrodskyi</attacher>
            
              <data encoding="base64">PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0i
VVRGLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IgogICAgICAgIGNvbnRlbnQ9IndpZHRoPWRl
dmljZS13aWR0aCwgdXNlci1zY2FsYWJsZT1ubywgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0t
c2NhbGU9MS4wLCBtaW5pbXVtLXNjYWxlPTEuMCI+CiAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1D
b21wYXRpYmxlIiBjb250ZW50PSJpZT1lZGdlIj4KICA8dGl0bGU+RG9jdW1lbnQ8L3RpdGxlPgo8
L2hlYWQ+Cjxib2R5Pgo8c2VsZWN0IGlkPSJmaXJzdF9taWNyb3Bob25lIj48L3NlbGVjdD4KPGJ1
dHRvbiBpZD0iZ2V0X2ZpcnN0X2J0biI+R0VUIEZJUlNUPC9idXR0b24+CjxhdWRpbyBpZD0iYXVk
aW9fcGxheWVyIiBhdXRvcGxheT48L2F1ZGlvPgoKPHNlbGVjdCBpZD0ic2Vjb25kX21pY3JvcGhv
bmUiPjwvc2VsZWN0Pgo8YnV0dG9uIGlkPSJnZXRfc2Vjb25kX2J0biI+R0VUIFNFQ09ORDwvYnV0
dG9uPgoKPHNjcmlwdD4KICBhc3luYyBmdW5jdGlvbiBydW4oKSB7CiAgICBjb25zdCBtaWNzMSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdF9taWNyb3Bob25lJyk7CiAgICBjb25zdCBt
aWNzMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWNvbmRfbWljcm9waG9uZScpOwogICAg
Y29uc3QgYnRuMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZXRfZmlyc3RfYnRuJyk7CiAg
ICBjb25zdCBidG4yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dldF9zZWNvbmRfYnRuJyk7
CiAgICBjb25zdCBwbGF5ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXVkaW9fcGxheWVy
Jyk7CgogICAgLy90cmlnZ2VyIHByb21wdCB0byBhbGxvdyBhY2Nlc3MgdG8gZGV2aWNlcwogICAg
bGV0IHN0ciA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHthdWRp
bzogdHJ1ZX0pOwogICAgc3RyLmdldFRyYWNrcygpLmZvckVhY2godHIgPT4gdHIuc3RvcCgpKTsK
CiAgICAoYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCkpCiAg
ICAgIC5maWx0ZXIoZCA9PiBkLmtpbmQgPT09ICdhdWRpb2lucHV0JykKICAgICAgLmZvckVhY2go
KGQsIGluZGV4KSA9PiB7CiAgICAgICAgbWljczEuYWRkKG5ldyBPcHRpb24oZC5sYWJlbCwgZC5k
ZXZpY2VJZCwgZmFsc2UsIGluZGV4ID09PSAwKSk7CiAgICAgICAgbWljczIuYWRkKG5ldyBPcHRp
b24oZC5sYWJlbCwgZC5kZXZpY2VJZCwgZmFsc2UsIGluZGV4ID09PSAxKSk7CiAgICAgIH0pOwoK
CiAgICBidG4xLm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7CiAgICAgIHdpbmRvdy5zdHJlYW0xID0g
YXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe2F1ZGlvOiB7ZGV2aWNl
SWQ6IG1pY3MxLnZhbHVlfX0pOwogICAgICBwbGF5ZXIuc3JjT2JqZWN0ID0gd2luZG93LnN0cmVh
bTE7CiAgICAgIHBsYXllci5wbGF5KCk7CiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZJUlNUIEJUTjon
KTsKICAgICAgY29uc29sZS5lcnJvcignU1RSRUFNMScsIHdpbmRvdy5zdHJlYW0xLCB3aW5kb3cu
c3RyZWFtMT8uZ2V0VHJhY2tzKClbMF0pOwogICAgICBjb25zb2xlLmVycm9yKCdTVFJFQU0yJywg
d2luZG93LnN0cmVhbTIsIHdpbmRvdy5zdHJlYW0yPy5nZXRUcmFja3MoKVswXSk7CiAgICB9Cgog
ICAgYnRuMi5vbmNsaWNrID0gYXN5bmMgKCkgPT4gewogICAgICB3aW5kb3cuc3RyZWFtMiA9IGF3
YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHthdWRpbzoge2RldmljZUlk
OiBtaWNzMi52YWx1ZX19KTsKICAgICAgY29uc29sZS5lcnJvcignU0VDT05EIEJUTjonKTsKICAg
ICAgY29uc29sZS5lcnJvcignU1RSRUFNMScsIHdpbmRvdy5zdHJlYW0xLCB3aW5kb3cuc3RyZWFt
MT8uZ2V0VHJhY2tzKClbMF0pOwogICAgICBjb25zb2xlLmVycm9yKCdTVFJFQU0yJywgd2luZG93
LnN0cmVhbTIsIHdpbmRvdy5zdHJlYW0yPy5nZXRUcmFja3MoKVswXSk7CiAgICB9CiAgfQoKCiAg
cnVuKCk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>