| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- var dgram = require('dgram');
- var socket = dgram.createSocket({ type: 'udp4', reuseAddr: true });
- var constructSDPMsg = function(addr, multicastAddr, samplerate, channels, encoding, name, sessID, sessVersion, ptpMaster){
- var sapHeader = Buffer.alloc(8);
- var sapContentType = Buffer.from('application/sdp\0');
- var ip = addr.split('.');
- //write version/options
- sapHeader.writeUInt8(0x20);
- //write hash
- sapHeader.writeUInt16LE(0xefef, 2);
- //write ip
- sapHeader.writeUInt8(parseInt(ip[0]), 4);
- sapHeader.writeUInt8(parseInt(ip[1]), 5);
- sapHeader.writeUInt8(parseInt(ip[2]), 6);
- sapHeader.writeUInt8(parseInt(ip[3]), 7);
- var sdpConfig = [
- 'v=0',
- 'o=- '+sessID+' '+sessVersion+' IN IP4 '+addr,
- 's='+name,
- 'c=IN IP4 '+multicastAddr+'/32',
- 't=0 0',
- 'a=clock-domain:PTPv2 0',
- 'm=audio 5004 RTP/AVP 96',
- 'a=rtpmap:96 '+encoding+'/'+samplerate+'/'+channels,
- 'a=sync-time:0',
- 'a=framecount:48',
- 'a=ptime:1',
- 'a=mediaclk:direct=0',
- 'a=ts-refclk:ptp=IEEE1588-2008:'+ptpMaster,
- 'a=recvonly',
- ''
- ];
- var sdpBody = Buffer.from(sdpConfig.join('\r\n'));
- return Buffer.concat([sapHeader, sapContentType, sdpBody]);
- }
- exports.start = function(addr, multicastAddr, samplerate, channels, encoding, name, sessID, sessVersion, ptpMaster){
- sdpMSG = constructSDPMsg(addr, multicastAddr, samplerate, channels, encoding, name, sessID, sessVersion, ptpMaster);
- socket.bind(9875, function(){
- socket.setMulticastInterface(addr);
- socket.send(sdpMSG, 9875, '239.255.255.255', function(err){});
- });
-
- setInterval(function(){
- socket.send(sdpMSG, 9875, '239.255.255.255', function(err){});
- }, 30*1000);
- }
|