-
Notifications
You must be signed in to change notification settings - Fork 115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Opus mono/stereo and remote track channelCount #3010
Comments
see also w3c/webrtc-extensions#63 |
Ah that old issue... it does seem to be in favor of defaulting to stereo=1 but allowing mono via channelCount:1 constraints. However it does not capture the nuance between Proposal A or Proposal B here. For example, even if we encode mono or stereo depending on the local track's channelCount, there's a separate question regarding if when we decode this signal if the remote track's channelCount would be 1 or 2? According to the audio experts, there's "no harm" in having channelCount be 2 on the remote track regardless if the signal being decoded was mono or stereo. The benefit of defaulting to 2 is less complexity and less risk of glitches due to reconfiguring |
Filed #3011 for channelCount in settings |
This issue had an associated resolution in WebRTC November 19 2024 meeting – 19 November 2024 (Remote channelCount + Stereo Opus #3010 #3011):
|
In addition to that, we also discussed "what if opus is mono on the wire but the opus decoder is stereo capable, should the output of the decoder be mono or stereo?" I proposed that user agents MAY say channelCount:2 on the remote track in this case (even though channelCount:1 would more accurately reflect the wire). Quoting from the notes of the discussion:
I suspect that libwebrtc opus stereo will produce 2 channels (even if wire is 1 channel), so it sounded to me like there was a "go-ahead" to return channelCount:2 here assuming our libwebrtc understanding is correct. But that we reserve the right to revisit this in the future if this behavior isn't satisfactory. |
I.e. if it turns out everybody does channelCount:2 here we can make the spec say "MUST" and otherwise revisit, in the meantime let's just document that |
Next steps IIUC:
|
Update the test that sends and receives a local mono track with opus that on the remote side the channelCount is 2 because the opus decoder performs upmixing. This strange behavior is option 1) discussed in w3c/webrtc-pc#3010. This allows for some optimization and simplifications which aids in virtual audio SSRC use case of flip-flopping between mono and stereo signals on the wire and not having to re-initialize the decoder (which could cause glitches). The vibe from the November Virtual Interim (https://www.w3.org/2024/11/19-webrtc-minutes.html#561c) was to standardize what libwebrtc does when stereo is enabled, and this is what it does. Note: We still fail the test today though because "stereo opus" has not been enabled-by-default. When it is the expectation is that we pass both of these tests. Bug: webrtc:379996136 Change-Id: Ibd6ee91a59d7c673bf53ad2302ba33f16b8b4ede Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6049355 Reviewed-by: Harald Alvestrand <[email protected]> Commit-Queue: Henrik Boström <[email protected]> Cr-Commit-Position: refs/heads/main@{#1388674}
Update the test that sends and receives a local mono track with opus that on the remote side the channelCount is 2 because the opus decoder performs upmixing. This strange behavior is option 1) discussed in w3c/webrtc-pc#3010. This allows for some optimization and simplifications which aids in virtual audio SSRC use case of flip-flopping between mono and stereo signals on the wire and not having to re-initialize the decoder (which could cause glitches). The vibe from the November Virtual Interim (https://www.w3.org/2024/11/19-webrtc-minutes.html#561c) was to standardize what libwebrtc does when stereo is enabled, and this is what it does. Note: We still fail the test today though because "stereo opus" has not been enabled-by-default. When it is the expectation is that we pass both of these tests. Bug: webrtc:379996136 Change-Id: Ibd6ee91a59d7c673bf53ad2302ba33f16b8b4ede Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6049355 Reviewed-by: Harald Alvestrand <[email protected]> Commit-Queue: Henrik Boström <[email protected]> Cr-Commit-Position: refs/heads/main@{#1388674}
Update the test that sends and receives a local mono track with opus that on the remote side the channelCount is 2 because the opus decoder performs upmixing. This strange behavior is option 1) discussed in w3c/webrtc-pc#3010. This allows for some optimization and simplifications which aids in virtual audio SSRC use case of flip-flopping between mono and stereo signals on the wire and not having to re-initialize the decoder (which could cause glitches). The vibe from the November Virtual Interim (https://www.w3.org/2024/11/19-webrtc-minutes.html#561c) was to standardize what libwebrtc does when stereo is enabled, and this is what it does. Note: We still fail the test today though because "stereo opus" has not been enabled-by-default. When it is the expectation is that we pass both of these tests. Bug: webrtc:379996136 Change-Id: Ibd6ee91a59d7c673bf53ad2302ba33f16b8b4ede Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6049355 Reviewed-by: Harald Alvestrand <[email protected]> Commit-Queue: Henrik Boström <[email protected]> Cr-Commit-Position: refs/heads/main@{#1388674}
…ng., a=testonly Automatic update from web-platform-tests Update stereo opus test to expect upmixing. Update the test that sends and receives a local mono track with opus that on the remote side the channelCount is 2 because the opus decoder performs upmixing. This strange behavior is option 1) discussed in w3c/webrtc-pc#3010. This allows for some optimization and simplifications which aids in virtual audio SSRC use case of flip-flopping between mono and stereo signals on the wire and not having to re-initialize the decoder (which could cause glitches). The vibe from the November Virtual Interim (https://www.w3.org/2024/11/19-webrtc-minutes.html#561c) was to standardize what libwebrtc does when stereo is enabled, and this is what it does. Note: We still fail the test today though because "stereo opus" has not been enabled-by-default. When it is the expectation is that we pass both of these tests. Bug: webrtc:379996136 Change-Id: Ibd6ee91a59d7c673bf53ad2302ba33f16b8b4ede Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6049355 Reviewed-by: Harald Alvestrand <[email protected]> Commit-Queue: Henrik Boström <[email protected]> Cr-Commit-Position: refs/heads/main@{#1388674} -- wpt-commits: d97f56c5831beb33c9302d2dd2707554bd842116 wpt-pr: 49392
…ng., a=testonly Automatic update from web-platform-tests Update stereo opus test to expect upmixing. Update the test that sends and receives a local mono track with opus that on the remote side the channelCount is 2 because the opus decoder performs upmixing. This strange behavior is option 1) discussed in w3c/webrtc-pc#3010. This allows for some optimization and simplifications which aids in virtual audio SSRC use case of flip-flopping between mono and stereo signals on the wire and not having to re-initialize the decoder (which could cause glitches). The vibe from the November Virtual Interim (https://www.w3.org/2024/11/19-webrtc-minutes.html#561c) was to standardize what libwebrtc does when stereo is enabled, and this is what it does. Note: We still fail the test today though because "stereo opus" has not been enabled-by-default. When it is the expectation is that we pass both of these tests. Bug: webrtc:379996136 Change-Id: Ibd6ee91a59d7c673bf53ad2302ba33f16b8b4ede Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6049355 Reviewed-by: Harald Alvestrand <[email protected]> Commit-Queue: Henrik Boström <[email protected]> Cr-Commit-Position: refs/heads/main@{#1388674} -- wpt-commits: d97f56c5831beb33c9302d2dd2707554bd842116 wpt-pr: 49392
…ng., a=testonly Automatic update from web-platform-tests Update stereo opus test to expect upmixing. Update the test that sends and receives a local mono track with opus that on the remote side the channelCount is 2 because the opus decoder performs upmixing. This strange behavior is option 1) discussed in w3c/webrtc-pc#3010. This allows for some optimization and simplifications which aids in virtual audio SSRC use case of flip-flopping between mono and stereo signals on the wire and not having to re-initialize the decoder (which could cause glitches). The vibe from the November Virtual Interim (https://www.w3.org/2024/11/19-webrtc-minutes.html#561c) was to standardize what libwebrtc does when stereo is enabled, and this is what it does. Note: We still fail the test today though because "stereo opus" has not been enabled-by-default. When it is the expectation is that we pass both of these tests. Bug: webrtc:379996136 Change-Id: Ibd6ee91a59d7c673bf53ad2302ba33f16b8b4ede Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6049355 Reviewed-by: Harald Alvestrand <htachromium.org> Commit-Queue: Henrik Boström <hboschromium.org> Cr-Commit-Position: refs/heads/main{#1388674} -- wpt-commits: d97f56c5831beb33c9302d2dd2707554bd842116 wpt-pr: 49392 UltraBlame original commit: de89aa35ef835eeb58e01f3e96b8c4de7bef4e4d
…ng., a=testonly Automatic update from web-platform-tests Update stereo opus test to expect upmixing. Update the test that sends and receives a local mono track with opus that on the remote side the channelCount is 2 because the opus decoder performs upmixing. This strange behavior is option 1) discussed in w3c/webrtc-pc#3010. This allows for some optimization and simplifications which aids in virtual audio SSRC use case of flip-flopping between mono and stereo signals on the wire and not having to re-initialize the decoder (which could cause glitches). The vibe from the November Virtual Interim (https://www.w3.org/2024/11/19-webrtc-minutes.html#561c) was to standardize what libwebrtc does when stereo is enabled, and this is what it does. Note: We still fail the test today though because "stereo opus" has not been enabled-by-default. When it is the expectation is that we pass both of these tests. Bug: webrtc:379996136 Change-Id: Ibd6ee91a59d7c673bf53ad2302ba33f16b8b4ede Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6049355 Reviewed-by: Harald Alvestrand <htachromium.org> Commit-Queue: Henrik Boström <hboschromium.org> Cr-Commit-Position: refs/heads/main{#1388674} -- wpt-commits: d97f56c5831beb33c9302d2dd2707554bd842116 wpt-pr: 49392 UltraBlame original commit: de89aa35ef835eeb58e01f3e96b8c4de7bef4e4d
…ng., a=testonly Automatic update from web-platform-tests Update stereo opus test to expect upmixing. Update the test that sends and receives a local mono track with opus that on the remote side the channelCount is 2 because the opus decoder performs upmixing. This strange behavior is option 1) discussed in w3c/webrtc-pc#3010. This allows for some optimization and simplifications which aids in virtual audio SSRC use case of flip-flopping between mono and stereo signals on the wire and not having to re-initialize the decoder (which could cause glitches). The vibe from the November Virtual Interim (https://www.w3.org/2024/11/19-webrtc-minutes.html#561c) was to standardize what libwebrtc does when stereo is enabled, and this is what it does. Note: We still fail the test today though because "stereo opus" has not been enabled-by-default. When it is the expectation is that we pass both of these tests. Bug: webrtc:379996136 Change-Id: Ibd6ee91a59d7c673bf53ad2302ba33f16b8b4ede Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6049355 Reviewed-by: Harald Alvestrand <htachromium.org> Commit-Queue: Henrik Boström <hboschromium.org> Cr-Commit-Position: refs/heads/main{#1388674} -- wpt-commits: d97f56c5831beb33c9302d2dd2707554bd842116 wpt-pr: 49392 UltraBlame original commit: de89aa35ef835eeb58e01f3e96b8c4de7bef4e4d
Opus is a codec that is capable of both mono and stereo.
In SDP, you can specify "stereo=X" to say what your receiver preference is, but importantly:
Today in Chrome, you get mono (track.getSettings().channelCount == 1) by default, but if "stereo=1" is used you get stereo (channelCount == 2). Importantly, the decoder will downmix or upmix to match the desired output (e.g. if stereo is used you will get a stereo track even if the input on the wire is mono).
We would like to support stereo without SDP munging. The question is what is the expected behavior?
While I originally thought 2) was more intuitive, I'm told that Firefox does 1). It also turns out that the audio team prefers to do 1) to avoid some complexity and to reduce the risk of audio glitches due to reconfiguring the decoder in the event that the signal switches back and forth on the fly (use case: virtual audio ssrc and speaker switching between mono and stereo signals, but this is also achievable with replaceTrack in a WPT).
Proposal A: Mandate "always stereo" for stereo codecs.
Proposal B: Mandate dynamically switching between mono and stereo.
Proposal C: Mandate nothing; it is up to the user agent.
The text was updated successfully, but these errors were encountered: