sdp.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. var dgram = require('dgram');
  2. var socket = dgram.createSocket({ type: 'udp4', reuseAddr: true });
  3. var constructSDPMsg = function(addr, multicastAddr, samplerate, channels, encoding, name, sessID, sessVersion, ptpMaster){
  4. var sapHeader = Buffer.alloc(8);
  5. var sapContentType = Buffer.from('application/sdp\0');
  6. var ip = addr.split('.');
  7. //write version/options
  8. sapHeader.writeUInt8(0x20);
  9. //write hash
  10. sapHeader.writeUInt16LE(0xefef, 2);
  11. //write ip
  12. sapHeader.writeUInt8(parseInt(ip[0]), 4);
  13. sapHeader.writeUInt8(parseInt(ip[1]), 5);
  14. sapHeader.writeUInt8(parseInt(ip[2]), 6);
  15. sapHeader.writeUInt8(parseInt(ip[3]), 7);
  16. var sdpConfig = [
  17. 'v=0',
  18. 'o=- '+sessID+' '+sessVersion+' IN IP4 '+addr,
  19. 's='+name,
  20. 'c=IN IP4 '+multicastAddr+'/32',
  21. 't=0 0',
  22. 'a=clock-domain:PTPv2 0',
  23. 'm=audio 5004 RTP/AVP 96',
  24. 'a=rtpmap:96 '+encoding+'/'+samplerate+'/'+channels,
  25. 'a=sync-time:0',
  26. 'a=framecount:48',
  27. 'a=ptime:1',
  28. 'a=mediaclk:direct=0',
  29. 'a=ts-refclk:ptp=IEEE1588-2008:'+ptpMaster,
  30. 'a=recvonly',
  31. ''
  32. ];
  33. var sdpBody = Buffer.from(sdpConfig.join('\r\n'));
  34. return Buffer.concat([sapHeader, sapContentType, sdpBody]);
  35. }
  36. exports.start = function(addr, multicastAddr, samplerate, channels, encoding, name, sessID, sessVersion, ptpMaster){
  37. sdpMSG = constructSDPMsg(addr, multicastAddr, samplerate, channels, encoding, name, sessID, sessVersion, ptpMaster);
  38. socket.bind(9875, function(){
  39. socket.setMulticastInterface(addr);
  40. socket.send(sdpMSG, 9875, '239.255.255.255', function(err){});
  41. });
  42. setInterval(function(){
  43. socket.send(sdpMSG, 9875, '239.255.255.255', function(err){});
  44. }, 30*1000);
  45. }