| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- const { MediaStreamTrack, randomPort, RTCPeerConnection, RTCRtpCodecParameters, RtpPacket } = require('werift')
- const {Server} = require('ws')
- const {createSocket} = require('dgram')
- const {exec} = require('child_process')
- // open answer.html
- const server = new Server({ port: 8888 });
- console.log("start");
- server.on("connection", async (socket) => {
- const payloadType = 96;
- const pc = new RTCPeerConnection({
- codecs: {
- audio: [],
- video: [
- new RTCRtpCodecParameters({
- mimeType: "video/h264",
- clockRate: 90000,
- payloadType: payloadType,
- }),
- ],
- },
- });
- const track = new MediaStreamTrack({ kind: "video" })
-
- randomPort().then((port) => {
- const udp = createSocket("udp4");
- udp.bind(port);
- // test vp8
- // exec(`D:/ffmpeg-4.4-full_build/bin/ffmpeg.exe -re -f lavfi -i testsrc=size=640x480:rate=30 -vcodec libvpx -cpu-used 5 -deadline 1 -g 10 -error-resilient 1 -auto-alt-ref 1 -f rtp rtp://127.0.0.1:${port}`,(error, stdout, stderr) => {
- // if (error) {
- // console.error(`exec error: ${error}`);
- // return;
- // }
- // console.log(`stdout: ${stdout}`);
- // console.error(`stderr: ${stderr}`);
- // })
- // video h264
- exec(`D:/ffmpeg-4.4-full_build/bin/ffmpeg.exe -f dshow -video_size 640x480 -i video="Logitech HD Webcam C525" -pix_fmt yuv420p -c:v h264 -g 10 -preset ultrafast -tune zerolatency -f rtp rtp://127.0.0.1:${port}`,(error, stdout, stderr) => {
- if (error) {
- console.error(`exec error: ${error}`);
- return;
- }
- })
-
- udp.on("message", (data) => {
- const rtp = RtpPacket.deSerialize(data);
- rtp.header.payloadType = payloadType;
- track.writeRtp(rtp);
- });
- });
-
- pc.addTransceiver(track, { direction: "sendonly" });
- await pc.setLocalDescription(await pc.createOffer());
- const sdp = JSON.stringify(pc.localDescription);
- socket.send(sdp);
- socket.on("message", (data) => {
- pc.setRemoteDescription(JSON.parse(data));
- });
- });
|