SIP (Session Initiation Protocol) ialah protokol yang biasa digunakan untuk penghantaran audio dan video Ia boleh merealisasikan fungsi seperti persidangan suara, video dan multimedia, dan digunakan secara meluas dalam bidang seperti komunikasi perusahaan, komunikasi mudah alih dan WebRTC. . Untuk membina pelayan SIP, kita boleh menggunakan Node.js Artikel ini akan memperkenalkan cara menggunakan Node.js untuk membina pelayan SIP.
1. Fahami protokol SIP
Sebelum mula menggunakan Node.js untuk membina pelayan SIP, kita perlu memahami prinsip asas protokol SIP. Protokol SIP ialah protokol kawalan berasaskan teks yang berkomunikasi melalui permintaan dan respons dan menggunakan format Protokol Penerangan Sesi (SDP) untuk menerangkan maklumat sesi. Biasanya dihantar menggunakan protokol UDP atau TCP.
Dalam protokol SIP, terdapat tiga jenis mesej: permintaan, respons dan perihalan sesi. Permintaan termasuk INVITE, ACK, BYE, CANCEL, DAFTAR, RUJUK dan PILIHAN. Respons termasuk 1xx, 2xx, 3xx, 4xx, 5xx, 6xx dan ACK. Penerangan sesi digunakan untuk menerangkan maklumat seperti kaedah pengekodan, alamat penghantaran dan port aliran media.
2. Pasang Node.js
Sebelum mula membina pelayan SIP, kita perlu memasang Node.js terlebih dahulu. Anda boleh pergi ke tapak web rasmi Node.js untuk memuat turun versi terkini Node.js dan memasangnya, atau anda boleh menggunakan pengurus pakej Node.js npm untuk memasangnya.
3. Pasang perpustakaan SIP.js
Untuk membina pelayan SIP menggunakan Node.js, kita perlu menggunakan perpustakaan SIP.js. SIP.js ialah perpustakaan JavaScript sumber terbuka yang menyediakan satu set API untuk memproses protokol SIP. Pustaka SIP.js boleh dipasang menggunakan npm.
npm install sip.js
4. Tulis kod
Selepas memasang perpustakaan Node.js dan SIP.js, kita boleh mula menulis kod. Di sini kami menggunakan rangka kerja Express untuk membina pelayan HTTP dan menggunakan modul dgram Node.js untuk melaksanakan penghantaran UDP protokol SIP. Pertama, kita perlu memperkenalkan kebergantungan yang diperlukan.
const express = require('express'); const dgram = require('dgram'); const sip = require('sip.js');
Seterusnya, kami mentakrifkan maklumat konfigurasi pelayan SIP Di sini kami menggunakan kaedah penghantaran UDP dan nombor port ialah 5060.
const config = { transportOptions: { udp: { address: '0.0.0.0', port: 5060 } } };
Kemudian, kami mencipta pelayan Ekspres dan menentukan laluan. Di sini kami hanya mencipta laluan GET yang mengembalikan rentetan ringkas.
const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); });
Seterusnya, kami mencipta pelayan SIP dan biarkan ia mendengar pada port UDP. Apabila pelanggan menghantar permintaan, pelayan SIP akan mengendalikannya mengikut jenis permintaan, seperti INVITE, ACK, BYE, CANCEL, REGISTER, REFER dan OPTIONS, dsb. Di sini kami hanya memproses permintaan INVITE Apabila permintaan INVITE diterima, pelayan SIP akan mengembalikan respons 200 OK dan memulakan saluran penstriman media.
const socket = dgram.createSocket('udp4'); const sipServer = new sip.Server(config); sipServer.socket = socket; sipServer.on('invite', (session) => { console.log('Received INVITE Request:', session); session.accept({ sessionDescriptionHandlerOptions: { constraints: { audio: true, video: false }, peerConnectionOptions: { iceServers: [] } } }); }); socket.on('message', (msg, rinfo) => { sipServer.receive(msg.toString(), rinfo); });
Selepas pelayan SIP memproses permintaan, kami menghantar semula respons kepada pelanggan.
sipServer.on('response', (response, session) => { console.log('Sent Response:', response); const message = Buffer.from(response.toString()); socket.send(message, session.request.ruri.port, session.request.headers['Via'][0].received || session.request.ruri.host); });
Akhir sekali, kami memulakan pelayan HTTP dan pelayan SIP dan mendengar pada port. Dengan cara ini, pelayan SIP kami yang dibina dengan Node.js selesai.
app.listen(3000, () => { console.log('Express server is running on http://localhost:3000'); sipServer.start(); console.log('SIP server is running on udp://localhost:5060'); })
5. Ujian
Selepas melengkapkan penulisan kod, kami boleh menguji pelayan SIP yang dibina oleh Node.js melalui langkah berikut.
node app.js
telnet localhost 5060
INVITE sip:3000@localhost SIP/2.0 Via: SIP/2.0/UDP 127.0.0.1:1234;rport Max-Forwards: 70 From: <sip:1000@localhost>;tag=abcd1234 To: <sip:3000@localhost> Call-ID: 1234567890@127.0.0.1 CSeq: 1 INVITE Contact: <sip:1000@127.0.0.1:1234> Content-Type: application/sdp Content-Length: 194 v=0 o=- 81757 81757 IN IP4 127.0.0.1 s=- c=IN IP4 0.0.0.0 t=0 0 m=audio 6000 RTP/AVP 0 a=rtpmap:0 PCMU/8000
Melalui langkah di atas, kita boleh menggunakan Node.js untuk membina pelayan SIP. Node.js menyediakan banyak modul dan perpustakaan, membolehkan kami melaksanakan fungsi kompleks dengan mudah. Untuk membina pelayan SIP, perpustakaan SIP.js menyediakan set lengkap API, yang memudahkan kesukaran pembangunan kami.
Atas ialah kandungan terperinci nodejs membina pelayan sip. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!