- From: guest271314 via GitHub <sysbot+gh@w3.org>
- Date: Thu, 24 Sep 2020 22:05:01 +0000
- To: public-webrtc-logs@w3.org
Firefox version, where `ReadableStream.pipeTo()` is not supported and `requestFrame()` is still defined at `MediaStream` rather than `CanvasCaptureMediaStreamTrack`, to record 160x160 video from source `MediaStreamTrack`, the key parameters being the last two to `drawImage()`, from MDN https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage
> **dWidth** Optional
> The width to draw the image in the destination canvas. This allows scaling of the drawn image. If not specified, the image is not scaled in width when drawn.
> **dHeight** Optional
> The height to draw the image in the destination canvas. This allows scaling of the drawn image. If not specified, the image is not scaled in height when drawn.
```
navigator.mediaDevices.getUserMedia({video: true})
.then(async stream => {
const video = document.createElement('video');
document.body.appendChild(video);
video.autoplay = true;
const [track] = stream.getVideoTracks();
const {width, height} = track.getSettings();
const canvas = document.createElement('canvas');
canvas.width = canvas.height = 160;
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');
const canvasStream = canvas.captureStream(0);
const [canvasTrack] = canvasStream.getVideoTracks();
video.srcObject = stream;
let controller;
const rs = new ReadableStream({
start(_) {return controller = _},
async pull() {
ctx.drawImage(video, 0, 0, video.videoWidth, video.videoHeight, 0, 0, 160, 160);
canvasStream.requestFrame();
controller.enqueue(null);
}
});
const reader = rs.getReader();
reader.read().then(async function processStream({value: bitmap, done}) {
if (done) return;
await new Promise(resolve => setTimeout(resolve, 1000/30));
return reader.read().then(processStream);
});
const recorder = new MediaRecorder(canvasStream);
recorder.ondataavailable = ({data}) => console.log(URL.createObjectURL(data));
recorder.start();
setTimeout(async _ => {
recorder.stop();
controller.close();
track.enabled = false;
canvasTrack.stop();
}, 10000);
});
```
If gather the Issue correctly, this is how `applyConstraints()` should work, instead of reporting incorrect values and not throwing error or exception.
--
GitHub Notification of comment by guest271314
Please view or discuss this issue at https://github.com/w3c/mediacapture-main/issues/723#issuecomment-698612993 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Thursday, 24 September 2020 22:05:08 UTC