Add local TURN server #2
@ -1,8 +1,23 @@
|
||||
const host = window.location.hostname
|
||||
const ws0 = new WebSocket(`ws://${host}:3001`);
|
||||
const ws1 = new WebSocket(`ws://${host}:3002`);
|
||||
const pc0 = new RTCPeerConnection({ iceServers: [] });
|
||||
const pc1 = new RTCPeerConnection({ iceServers: [] });
|
||||
const isSecure = window.location.protocol === 'https:';
|
||||
const host = window.location.hostname;
|
||||
const ws0builder = isSecure ? `wss://${host}/ws0` : `ws://${host}:3001`;
|
||||
const ws1builder = isSecure ? `wss://${host}/ws1` : `ws://${host}:3002`;
|
||||
const ws0 = new WebSocket(ws0builder);
|
||||
const ws1 = new WebSocket(ws1builder);
|
||||
const pc0 = new RTCPeerConnection({ iceServers: [
|
||||
{
|
||||
urls: 'turn:dwestgate.us:3478?transport=udp',
|
||||
username: 'webrtcuser',
|
||||
credential: 'webrtccred'
|
||||
}
|
||||
] });
|
||||
const pc1 = new RTCPeerConnection({ iceServers: [
|
||||
{
|
||||
urls: 'turn:dwestgate.us:3478?transport=udp',
|
||||
username: 'webrtcuser',
|
||||
credential: 'webrtccred'
|
||||
}
|
||||
] });
|
||||
const video0 = document.getElementById('video0') as HTMLVideoElement;
|
||||
const video1 = document.getElementById('video1') as HTMLVideoElement;
|
||||
|
||||
|
23
src/ws.ts
23
src/ws.ts
@ -9,14 +9,14 @@ const FRAME_SIZE = WIDTH * HEIGHT * 1.5; // YUV420p frame size (460800 bytes)
|
||||
|
||||
export default class TVWebSocket {
|
||||
videoDevice: string;
|
||||
public constructor(port: number, videoDevice) {
|
||||
this.videoDevice = videoDevice
|
||||
public constructor(port: number, videoDevice) {
|
||||
this.videoDevice = videoDevice
|
||||
const ffmpegProcess = this.startFFmpeg();
|
||||
const videoTrack = this.createVideoTrack(ffmpegProcess);
|
||||
const audioTrack = this.createAudioTrack(ffmpegProcess);
|
||||
|
||||
|
||||
ffmpegProcess.stdio[2].on('data',data=>{
|
||||
ffmpegProcess.stdio[2].on('data', data => {
|
||||
// console.log("stdio[2] ",data.toString())
|
||||
})
|
||||
|
||||
@ -24,7 +24,7 @@ export default class TVWebSocket {
|
||||
const wss = new ws.WebSocketServer({ port });
|
||||
|
||||
wss.on('connection', async (ws: ws.WebSocket) => {
|
||||
const peerConnection: RTCPeerConnection = this.createPeerConnection(videoTrack, audioTrack);
|
||||
const peerConnection: RTCPeerConnection = this.createPeerConnection(videoTrack, audioTrack);
|
||||
|
||||
ws.on('message', async (message: Buffer) => {
|
||||
const { type, data } = JSON.parse(message.toString());
|
||||
@ -113,7 +113,7 @@ export default class TVWebSocket {
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
|
||||
createVideoTrack = (ffmpegProcess: ChildProcessWithoutNullStreams) => {
|
||||
let videoBuffer = Buffer.alloc(0);
|
||||
const videoSource = new nonstandard.RTCVideoSource();
|
||||
@ -185,7 +185,18 @@ export default class TVWebSocket {
|
||||
}
|
||||
|
||||
createPeerConnection = (videoTrack: MediaStreamTrack, audioTrack: MediaStreamTrack): RTCPeerConnection => {
|
||||
const peerConnection = new RTCPeerConnection({ iceServers: [] });
|
||||
const peerConnection = new RTCPeerConnection({
|
||||
iceServers: [
|
||||
{
|
||||
urls: 'stun:192.168.0.3:3478'
|
||||
},
|
||||
{
|
||||
urls: 'turn:192.168.0.3:3478?transport=udp',
|
||||
username: 'webrtcuser',
|
||||
credential: 'webrtccred'
|
||||
}
|
||||
]
|
||||
});
|
||||
const stream = new MediaStream()
|
||||
stream.addTrack(videoTrack)
|
||||
stream.addTrack(audioTrack);
|
||||
|
Loading…
Reference in New Issue
Block a user