Browse Source

Signed-off-by: caner <5658514@qq.com>

caner 3 years ago
parent
commit
e7f2f77ab9
5 changed files with 121 additions and 3 deletions
  1. BIN
      1.mp4
  2. 1 1
      answer.html
  3. 2 2
      package.json
  4. 76 0
      sendAnswer.html
  5. 42 0
      sendFile.js

BIN
1.mp4


+ 1 - 1
answer.html

@@ -14,7 +14,7 @@
 </head>
 </head>
 
 
 <body>
 <body>
-  <video id="v2" autoPlay muted></video>
+  <video id="v2" autoPlay muted playsinline></video>
   <script>
   <script>
     (async () => {
     (async () => {
       
       

+ 2 - 2
package.json

@@ -9,7 +9,7 @@
   "author": "",
   "author": "",
   "license": "ISC",
   "license": "ISC",
   "dependencies": {
   "dependencies": {
-    "werift": "^0.15.8",
-    "ws": "^8.8.0"
+    "werift": "^0.15.9",
+    "ws": "^8.8.1"
   }
   }
 }
 }

+ 76 - 0
sendAnswer.html

@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="UTF-8" />
+  <title>Answer</title>
+  <style>
+    #v2 {
+      width: 500px;
+      height: 500px;
+      border: solid 1px red;
+    }
+  </style>
+</head>
+
+<body>
+  <video id="v2" autoPlay muted playsinline></video>
+  <script>
+    (async () => {
+
+      const socket = new WebSocket("ws://192.168.137.253:8881");
+      await new Promise((r) => (socket.onopen = r));
+      console.log("open websocket");
+      const offer = await new Promise((r) => (socket.onmessage = (ev) => r(JSON.parse(ev.data))));
+      console.log("offer", offer.sdp);
+
+      const peer = new RTCPeerConnection({
+        iceServers: [
+          {
+            urls: [
+              "stun:caner.top:3478",
+            ],
+          },
+          {
+            urls: "turn:caner.top:3478",
+            username: "admin",
+            credential: "123456"
+          },
+        ]        
+      });
+
+      peer.onicecandidate = ({ candidate }) => {
+        if (!candidate) {
+          const sdp = JSON.stringify(peer.localDescription);
+          socket.send(sdp);
+        }
+      };
+
+      peer.oniceconnectionstatechange = () => {
+        console.log("oniceconnectionstatechange", peer.iceConnectionState);
+      };
+
+      peer.ontrack = (e) => {
+        console.log("ontrack", e);
+        const video = document.getElementById('v2')
+        if (video.srcObject) {
+          video.srcObject.addTrack(e.track);
+        } else {
+          video.srcObject = new MediaStream([e.track]);
+        }
+
+        peer.getReceivers().forEach((r) => {
+          r.playoutDelayHint = 1;
+          r.jitterBufferDelayHint = 1;
+        });
+      };
+
+      await peer.setRemoteDescription(offer);
+      const answer = await peer.createAnswer();
+      await peer.setLocalDescription(answer);
+
+    })()
+  </script>
+</body>
+
+</html>

+ 42 - 0
sendFile.js

@@ -0,0 +1,42 @@
+const { getUserMp4, RTCPeerConnection, RTCRtpCodecParameters } = require('werift')
+const { Server } = require('ws')
+
+const server = new Server({ port: 8881 });
+console.log("start");
+
+server.on("connection", async (socket) => {
+    const pc = new RTCPeerConnection({
+        codecs: {
+            video: [
+                new RTCRtpCodecParameters({
+                    mimeType: "video/H264",
+                    clockRate: 90000,
+                    rtcpFeedback: [
+                        { type: "nack" },
+                        { type: "nack", parameter: "pli" },
+                        { type: "goog-remb" },
+                    ],
+                }),
+            ],
+        },
+    });
+
+    const stream = await getUserMp4("./1.mp4", true);
+
+    // pc.addTransceiver(stream.audio, { direction: "sendonly" });
+    pc.addTransceiver(stream.video, { direction: "sendonly" });
+
+    pc.connectionStateChange
+        .watch((state) => state === "connected")
+        .then(() => {
+            stream.start();
+        });
+
+    await pc.setLocalDescription(await pc.createOffer());
+    const sdp = JSON.stringify(pc.localDescription);
+    socket.send(sdp);
+
+    socket.on("message", (data) => {
+        pc.setRemoteDescription(JSON.parse(data));
+    });
+});