-
-
Notifications
You must be signed in to change notification settings - Fork 335
Open
Milestone
Description
Expected behavior
MediaStream.addTrack should allow to use as a first argument an instance of CanvasCaptureMediaStreamTrack captured from <canvas> by captureStream method.
Observerd behavior
MediaStream.addTrack throws an exception "argument must be an instance of MediaStreamTrack" if the first argument is an instance of CanvasCaptureMediaStreamTrack.
In Chrome/Firefox/Safari an instance of CanvasCaptureMediaStreamTrack inherits from MediaStreamTrack, so it can be used in MediaStream.addTrack method. In cordova app using iosrtc plugin CanvasCaptureMediaStreamTrack is not an instance of MediaStreamTrack, so we have an aforementioned exception in MediaStream.addTrack:
cordova-plugin-iosrtc/js/MediaStream.js
Lines 258 to 263 in b1bb4cb
| MediaStream.prototype.addTrack = function (track) { | |
| debug('addTrack() [track:%o]', track); | |
| if (!(track instanceof MediaStreamTrack)) { | |
| throw new Error('argument must be an instance of MediaStreamTrack'); | |
| } |
Steps to reproduce the problem
// capture local camera and microphone
navigator.mediaDevices.getUserMedia({ audio: true, video: true }).then(function(stream) {
// get canvas stream
var canvas = document.createElement('canvas');
var canvasStream = canvas.captureStream();
var track = canvasStream.getVideoTracks()[0];
// add canvas video track to the stream
try {
stream.addTrack(track);
}
catch(err) {
console.error(err); // output: Error: argument must be an instance of MediaStreamTrack
console.log(track instanceof MediaStreamTrack); // output: false
}
});
Platform information
- Cordova version: cli-9.0.0 (iOS 5.0.1)
- Plugin version: 6.0.10
- iOS version: 13.3.1, 13.4.1
- Xcode version: 10.2