54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
|
|
import * as Logger from "../../module/logger.js";
|
||
|
|
|
||
|
|
export class SendVideo {
|
||
|
|
constructor(localVideoElement, remoteVideoElement) {
|
||
|
|
this.localVideo = localVideoElement;
|
||
|
|
this.remoteVideo = remoteVideoElement;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param {MediaTrackConstraints} videoSource
|
||
|
|
* @param {MediaTrackConstraints} audioSource
|
||
|
|
* @param {number} videoWidth
|
||
|
|
* @param {number} videoHeight
|
||
|
|
*/
|
||
|
|
async startLocalVideo(videoSource, audioSource, videoWidth, videoHeight) {
|
||
|
|
try {
|
||
|
|
const constraints = {
|
||
|
|
video: { deviceId: videoSource ? { exact: videoSource } : undefined },
|
||
|
|
audio: { deviceId: audioSource ? { exact: audioSource } : undefined }
|
||
|
|
};
|
||
|
|
|
||
|
|
if (videoWidth != null || videoWidth != 0) {
|
||
|
|
constraints.video.width = videoWidth;
|
||
|
|
}
|
||
|
|
if (videoHeight != null || videoHeight != 0) {
|
||
|
|
constraints.video.height = videoHeight;
|
||
|
|
}
|
||
|
|
|
||
|
|
const localStream = await navigator.mediaDevices.getUserMedia(constraints);
|
||
|
|
this.localVideo.srcObject = localStream;
|
||
|
|
await this.localVideo.play();
|
||
|
|
} catch (err) {
|
||
|
|
Logger.error(`mediaDevice.getUserMedia() error:${err}`);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @returns {MediaStreamTrack[]}
|
||
|
|
*/
|
||
|
|
getLocalTracks() {
|
||
|
|
return this.localVideo.srcObject.getTracks();
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param {MediaStreamTrack} track
|
||
|
|
*/
|
||
|
|
addRemoteTrack(track) {
|
||
|
|
if (this.remoteVideo.srcObject == null) {
|
||
|
|
this.remoteVideo.srcObject = new MediaStream();
|
||
|
|
}
|
||
|
|
this.remoteVideo.srcObject.addTrack(track);
|
||
|
|
}
|
||
|
|
}
|