| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- const { MediaStreamTrack, randomPort, RTCPeerConnection, RTCRtpCodecParameters, RtpPacket } = require('werift')
- const { Server } = require('ws')
- const { createSocket } = require('dgram')
- const { spawn } = require('child_process')
- const server = new Server({ port: 8888 });
- console.log("start");
- server.on("connection", async (socket) => {
- console.log('客户端连接');
- const pc = new RTCPeerConnection({
- codecs: {
- audio: [],
- video: [
- new RTCRtpCodecParameters({
- mimeType: "video/VP8",
- clockRate: 90000,
- payloadType: 96,
- }),
- ],
- },
- iceServers: [
- {
- urls: [
- "stun:caner.top:3478",
- ],
- },
- {
- urls: "turn:caner.top:3478",
- username: "admin",
- credential: "123456",
- },
- ]
- });
- const track = new MediaStreamTrack({ kind: "video" });
- randomPort().then((port) => {
- const udp = createSocket("udp4");
- udp.bind(port);
- const args = [
- `videotestsrc`,
- "video/x-raw,width=640,height=480,format=I420,framerate=15/1",
- "vp8enc error-resilient=partitions keyframe-max-dist=10 auto-alt-ref=true cpu-used=5 deadline=1",
- "rtpvp8pay",
- `udpsink host=127.0.0.1 port=${port}`,
- ].join(" ! ");
- spawn("gst-launch-1.0", args.split(" "));
- udp.on("message", (data) => {
- const rtp = RtpPacket.deSerialize(data);
- 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));
- });
- });
|