This constraint: { video: { width: 320 } } Should be interpreted as width is ideally 320, it doesn't have to be exact. But Safari says this is overconstrained even though it can do e.g. 640x480 which would satisfy it. In fact being explicit about ideal fails in the same way: { video: { width: { ideal: 320 } } } Tested on Sierra + Safari Beta, Sierra + Safari Tech Preview 38, and iOS beta 9 + Safari.
This seems to be resolved now actually. Can't reproduce this issue anymore.
GUM with video constraints still fails on iOS 11.2.
I confirm this bug. There is test pen https://codepen.io/hejral/pen/eeaKrx?editors=1011 which works, and another which do not https://codepen.io/hejral/pen/RjzovG?editors=1011 And yes, with "playsinline" this works also for iPhone ;-) With no playsinline this works everywhere else. I must agree with comment "The fact that you need to add playsinline is still a bug."
WebRTC demo with | constraints = { video: { width:320,height:240 } } output is: mediaDevices: Error -> Invalid constraint see also: https://bugs.webkit.org/show_bug.cgi?id=176843
This is now only happening for me on iOS, not on Mac OS.