From 8aac0c10c1098d544f8368b76db8791d340ea353 Mon Sep 17 00:00:00 2001
From: jiahui92 <547652008@qq.com>
Date: Sun, 1 Sep 2024 19:50:25 +0800
Subject: [PATCH] test: video
---
web-rtc/src/index.tsx | 8 ++++++--
web-rtc/src/web-rtc.ts | 40 +++++++++++++++++++++++++++++++++-------
2 files changed, 39 insertions(+), 9 deletions(-)
diff --git a/web-rtc/src/index.tsx b/web-rtc/src/index.tsx
index 784aa30..2039226 100644
--- a/web-rtc/src/index.tsx
+++ b/web-rtc/src/index.tsx
@@ -1,7 +1,7 @@
import './index.less';
import React from 'react';
import ReactDOM from 'react-dom';
-import { startConnection, sendFile, startVideo } from './web-rtc.ts';
+import { startConnection, sendFile, startVideo, shareScreen } from './web-rtc.ts';
// class View extends React.Component {
// render() {
@@ -25,9 +25,13 @@ function Page () {
+
-
+
+
+
+
diff --git a/web-rtc/src/web-rtc.ts b/web-rtc/src/web-rtc.ts
index 8c8b7ea..2e446c9 100644
--- a/web-rtc/src/web-rtc.ts
+++ b/web-rtc/src/web-rtc.ts
@@ -13,9 +13,9 @@ interface IceData {
answer?: string;
}
-let localConnection;
-let sendChannel;
-let receiveChannel;
+let localConnection: RTCPeerConnection;
+let sendChannel: RTCDataChannel;
+let receiveChannel: RTCDataChannel;
let offer;
let answer;
let readSliceTimer;
@@ -250,13 +250,39 @@ export async function startVideo() {
try {
const videoStream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true })
- const videoA = document.querySelector('#videoA');
+ const videoA = document.querySelector('#videoA') as HTMLVideoElement;
videoA.srcObject = videoStream;
- localConnection.onaddstream = (event) => {
- const videoB = document.querySelector('#videoB');
- videoB.srcObject = event.stram;
+ for (const track of videoStream.getTracks()) {
+ localConnection.addTrack(track);
}
} catch (error) {
logMessage(error.message)
}
+
+ localConnection.ontrack = (ev) => {
+ const videoB = document.querySelector('#videoB') as HTMLVideoElement;
+ if (ev.streams && ev.streams[0]) {
+ videoB.srcObject = ev.streams[0];
+ }
+ };
+}
+
+export async function shareScreen() {
+ if (!navigator.mediaDevices?.getUserMedia) {
+ logMessage('not support getUserMedia')
+ return
+ }
+
+ try {
+ const videoStream = await navigator.mediaDevices.getUserMedia({ screen: true })
+ const videoA = document.querySelector('#videoA');
+ videoA.srcObject = videoStream;
+ } catch (error) {
+ logMessage(error.message)
+ }
+
+ localConnection.onaddstream = (event) => {
+ const videoB = document.querySelector('#videoB');
+ videoB.srcObject = event.stram;
+ }
}