Seen in bug 220972. The test video-vp8-videorange.html added draw into a canvas and create a MediaStream that is passed to a RTCPeerConnection. The remote RTCPeerConnection's MediaStream is then set as source for a video element we then wait for the video element's play promise to be resolved to continue. The play promise won't be resolved unless you continuously update the canvas. It appears that MediaPlayerPrivateMediaStreamAVFObjC::updateReadyState() will not move past HAVE_METADATA if the canvas emitted its frame before the video element was setup.
<rdar://problem/77160576>