This guide is to allow your iOS 11 Safari mobile browser to display <video> element properly:
Issue:
When you try your app on iOS 11 Safari, peers get connected but the <video> element shows only as a black box.
Reason:
iOS changed its policy regarding <video> elements since iOS 10. According to iOS <video> elements policies, <video> elements require the controls = true and playsinline attribute to the video tag in order to play <video> elements without fullscreen mode.
Solution:
Set the playinline attribute and controls=true to the <video> tag.
Sample implementation:
Below is an example for the Web SDK "incomingStream" event to implement the above policy to solve it:
JS:
skylink.on('incomingStream', function (peerId, stream, isSelf) {
var video = document.createElement('video');
video.id = peerId;
video.muted = isSelf;
video.autoplay = true;
video.controls = true;
video.setAttribute('playsinline', true); // The required attribute to work.
document.getElementById('peers').appendChild(video);
attachMediaStream(video, stream);
});HTML:
<video id="myvideo" controls="true" playsinline autoplay muted></video>