How to keep 1:1 aspect ratio video all the time in WebRTC
You're asking about getUserMedia
here, which is effectively about camera resolutions.
What resolutions your camera captures video in depends on your hardware. My camera for instance, can capture in a number of modes, they're all 4:3 modes up to about 640x480, and above that they're all 16:9. It has no 1:1 modes (I checked).
You haven't said why you care about aspect, but I suspect you still want a ball to appear round and not oval, so if your site wants video from my camera to fit in a square, it'll need to either crop out the left and right parts of my video or suffer black bars above and below. No way around it.
If it's just about layout, leave the capture aspect alone and crop the playback element (which scales the video for you btw) with CSS instead. This gives you full control (use https fiddle in Chrome):
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => video.srcObject = stream)
.then(() => new Promise(resolve => video.onloadedmetadata = resolve))
.then(() => log(video.srcObject.getVideoTracks()[0].label +
" ("+ video.videoWidth +"x"+ video.videoHeight +")"))
.catch(log);
var log = msg => div.innerHTML += msg + "<br>";
.crop{
overflow:hidden;
display:block;
width: 120px;
}
#video{
margin-left: -15px;
}
<div class="crop"><video id="video" width="160" height="120" autoplay></video></div>
<br><div id="div"></div>
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
Also, please be aware of browser differences here, some browsers (Chrome) will mutate (crop) the camera capture for you, while others (Firefox) will always give you native modes.