Skip to content

Instantly share code, notes, and snippets.

@fcecagno
Last active May 1, 2018 13:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save fcecagno/8ed9e9ae2bb7aded329f01a2acbeff60 to your computer and use it in GitHub Desktop.
Save fcecagno/8ed9e9ae2bb7aded329f01a2acbeff60 to your computer and use it in GitHub Desktop.
kurento_pipelines
{
"name": "kurento-hello-world",
"version": "6.6.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"bower": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
"integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
"dev": true
},
"cookie-parser": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz",
"integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=",
"requires": {
"cookie": "0.3.1",
"cookie-signature": "1.0.6"
},
"dependencies": {
"cookie": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
}
}
},
"express": {
"version": "4.12.4",
"resolved": "https://registry.npmjs.org/express/-/express-4.12.4.tgz",
"integrity": "sha1-j+wlECVbxrLlgQfEgjnA+jB8GqI=",
"requires": {
"accepts": "1.2.13",
"content-disposition": "0.5.0",
"content-type": "1.0.4",
"cookie": "0.1.2",
"cookie-signature": "1.0.6",
"debug": "2.2.0",
"depd": "1.0.1",
"escape-html": "1.0.1",
"etag": "1.6.0",
"finalhandler": "0.3.6",
"fresh": "0.2.4",
"merge-descriptors": "1.0.0",
"methods": "1.1.2",
"on-finished": "2.2.1",
"parseurl": "1.3.2",
"path-to-regexp": "0.1.3",
"proxy-addr": "1.0.10",
"qs": "2.4.2",
"range-parser": "1.0.3",
"send": "0.12.3",
"serve-static": "1.9.3",
"type-is": "1.6.15",
"utils-merge": "1.0.0",
"vary": "1.0.1"
},
"dependencies": {
"accepts": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz",
"integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=",
"requires": {
"mime-types": "2.1.17",
"negotiator": "0.5.3"
},
"dependencies": {
"mime-types": {
"version": "2.1.17",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
"integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
"requires": {
"mime-db": "1.30.0"
},
"dependencies": {
"mime-db": {
"version": "1.30.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
"integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
}
}
},
"negotiator": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz",
"integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g="
}
}
},
"content-disposition": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz",
"integrity": "sha1-QoT+auBjCHRjnkToCkGMKTQTXp4="
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
},
"cookie": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz",
"integrity": "sha1-cv7D0k5Io0Mgc9kMEmQgBQYQBLE="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"debug": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
"requires": {
"ms": "0.7.1"
},
"dependencies": {
"ms": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
"integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
}
}
},
"depd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
"integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo="
},
"escape-html": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz",
"integrity": "sha1-GBoobq05ejmpKFfPsdQwUuNWv/A="
},
"etag": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.6.0.tgz",
"integrity": "sha1-i8ssavElTEgd/IuZfJBu9ORCwgc=",
"requires": {
"crc": "3.2.1"
},
"dependencies": {
"crc": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz",
"integrity": "sha1-XZyPt3okXNXsopHl0tAFM0urAII="
}
}
},
"finalhandler": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.3.6.tgz",
"integrity": "sha1-2vnEFhsbBuABRmsUEd/baXO+E4s=",
"requires": {
"debug": "2.2.0",
"escape-html": "1.0.1",
"on-finished": "2.2.1"
}
},
"fresh": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz",
"integrity": "sha1-NYJJkgbJcjcUGQ7ddLRgT+tKYUw="
},
"merge-descriptors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz",
"integrity": "sha1-IWnPdTjhsMyH+4jhUC2EdLv3mGQ="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"on-finished": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz",
"integrity": "sha1-XIXBzDYpn3gCllP2Z/J7a5nrwCk=",
"requires": {
"ee-first": "1.1.0"
},
"dependencies": {
"ee-first": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz",
"integrity": "sha1-ag18YiHkkP7v2S7D9EHJzozQl/Q="
}
}
},
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
"integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
},
"path-to-regexp": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz",
"integrity": "sha1-IbmrgidCed4lsVbqCP0SylG4rss="
},
"proxy-addr": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz",
"integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=",
"requires": {
"forwarded": "0.1.2",
"ipaddr.js": "1.0.5"
},
"dependencies": {
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"ipaddr.js": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz",
"integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c="
}
}
},
"qs": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz",
"integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o="
},
"range-parser": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
"integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU="
},
"send": {
"version": "0.12.3",
"resolved": "https://registry.npmjs.org/send/-/send-0.12.3.tgz",
"integrity": "sha1-zRLcWP3iHk+RkCs5sv2gWnptm9w=",
"requires": {
"debug": "2.2.0",
"depd": "1.0.1",
"destroy": "1.0.3",
"escape-html": "1.0.1",
"etag": "1.6.0",
"fresh": "0.2.4",
"mime": "1.3.4",
"ms": "0.7.1",
"on-finished": "2.2.1",
"range-parser": "1.0.3"
},
"dependencies": {
"destroy": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz",
"integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk="
},
"mime": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
"integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
},
"ms": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
"integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
}
}
},
"serve-static": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.9.3.tgz",
"integrity": "sha1-X42gcyOtOF/z3FQfGnkXsuQ261c=",
"requires": {
"escape-html": "1.0.1",
"parseurl": "1.3.2",
"send": "0.12.3",
"utils-merge": "1.0.0"
}
},
"type-is": {
"version": "1.6.15",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
"integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
"requires": {
"media-typer": "0.3.0",
"mime-types": "2.1.17"
},
"dependencies": {
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"mime-types": {
"version": "2.1.17",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
"integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
"requires": {
"mime-db": "1.30.0"
},
"dependencies": {
"mime-db": {
"version": "1.30.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
"integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
}
}
}
}
},
"utils-merge": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
"integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
},
"vary": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz",
"integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA="
}
}
},
"express-session": {
"version": "1.10.4",
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.10.4.tgz",
"integrity": "sha1-BOHZLgBZOJPh92Vp6zrWMRPa+Uw=",
"requires": {
"cookie": "0.1.2",
"cookie-signature": "1.0.6",
"crc": "3.2.1",
"debug": "2.1.3",
"depd": "1.0.1",
"on-headers": "1.0.1",
"parseurl": "1.3.2",
"uid-safe": "1.1.0",
"utils-merge": "1.0.0"
},
"dependencies": {
"cookie": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz",
"integrity": "sha1-cv7D0k5Io0Mgc9kMEmQgBQYQBLE="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"crc": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz",
"integrity": "sha1-XZyPt3okXNXsopHl0tAFM0urAII="
},
"debug": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.1.3.tgz",
"integrity": "sha1-zoqxte6PvuK/o7Yzyrk9NmtjQY4=",
"requires": {
"ms": "0.7.0"
},
"dependencies": {
"ms": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz",
"integrity": "sha1-hlvpTC5zl62KV9pqYzpuLzB5i4M="
}
}
},
"depd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
"integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo="
},
"on-headers": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
"integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
},
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
"integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
},
"uid-safe": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-1.1.0.tgz",
"integrity": "sha1-WNbF2r+N+9jVKDSDmAbAP9YUMjI=",
"requires": {
"base64-url": "1.2.1",
"native-or-bluebird": "1.1.2"
},
"dependencies": {
"base64-url": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz",
"integrity": "sha1-GZ/WYXAqDnt9yubgaYuwicUvbXg="
},
"native-or-bluebird": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.1.2.tgz",
"integrity": "sha1-OSHhECMtHreQ89rGG7NwUxx9NW4="
}
}
},
"utils-merge": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
"integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
}
}
},
"kurento-client": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/kurento-client/-/kurento-client-6.6.0.tgz",
"integrity": "sha1-5YYqQd9qYoPDYIF+nqCWWzP9KkA=",
"requires": {
"async": "1.2.1",
"error-tojson": "0.0.1",
"es6-promise": "3.3.1",
"extend": "2.0.1",
"inherits": "2.0.3",
"kurento-client-core": "6.6.0",
"kurento-client-elements": "6.6.0",
"kurento-client-filters": "6.6.0",
"kurento-jsonrpc": "5.1.3",
"minimist": "1.2.0",
"promise": "7.0.2",
"promisecallback": "0.0.4",
"reconnect-ws": "git://github.com/kurentoforks/reconnect-ws.git#7fb7020e3ca1ffeaaa8bb4ddd690cf28c8d02a2b"
},
"dependencies": {
"async": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/async/-/async-1.2.1.tgz",
"integrity": "sha1-pIFqF81f9RbfosdpikUzabl5DeA="
},
"error-tojson": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/error-tojson/-/error-tojson-0.0.1.tgz",
"integrity": "sha1-p7GqlP/ADpB4wuuibiBL2Hzyy7k="
},
"es6-promise": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
"integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM="
},
"extend": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend/-/extend-2.0.1.tgz",
"integrity": "sha1-HugBBonnOV/5RIJByYZSvHWagmA="
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"kurento-client-core": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/kurento-client-core/-/kurento-client-core-6.6.0.tgz",
"integrity": "sha1-VQ84XmEX31mNhyrR9TFjwG1Iq28="
},
"kurento-client-elements": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/kurento-client-elements/-/kurento-client-elements-6.6.0.tgz",
"integrity": "sha1-rDYy31NeR989LZ6uxejZpyMYF24="
},
"kurento-client-filters": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/kurento-client-filters/-/kurento-client-filters-6.6.0.tgz",
"integrity": "sha1-r1F+U03DKbERPkmVua823IC6lWg="
},
"kurento-jsonrpc": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/kurento-jsonrpc/-/kurento-jsonrpc-5.1.3.tgz",
"integrity": "sha1-zguXfiZ2qHjtLARkyCVCWFdCIDA=",
"requires": {
"inherits": "2.0.3",
"sockjs-client": "1.1.1",
"ws": "0.4.32"
},
"dependencies": {
"sockjs-client": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.1.tgz",
"integrity": "sha1-KEhD6al4TXxHSxVxsyQPyp3aS7A=",
"requires": {
"debug": "2.6.9",
"eventsource": "0.1.6",
"faye-websocket": "0.11.1",
"inherits": "2.0.3",
"json3": "3.3.2",
"url-parse": "1.2.0"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"requires": {
"ms": "2.0.0"
},
"dependencies": {
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"eventsource": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
"integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
"requires": {
"original": "1.0.0"
},
"dependencies": {
"original": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz",
"integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=",
"requires": {
"url-parse": "1.0.5"
},
"dependencies": {
"url-parse": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz",
"integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=",
"requires": {
"querystringify": "0.0.4",
"requires-port": "1.0.0"
},
"dependencies": {
"querystringify": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz",
"integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw="
},
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
}
}
}
}
}
}
},
"faye-websocket": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
"integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
"requires": {
"websocket-driver": "0.7.0"
},
"dependencies": {
"websocket-driver": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
"integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
"requires": {
"http-parser-js": "0.4.9",
"websocket-extensions": "0.1.3"
},
"dependencies": {
"http-parser-js": {
"version": "0.4.9",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz",
"integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE="
},
"websocket-extensions": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
"integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk="
}
}
}
}
},
"json3": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
"integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE="
},
"url-parse": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
"integrity": "sha1-OhnoqqbQI93SfcxEy0/I9/7COYY=",
"requires": {
"querystringify": "1.0.0",
"requires-port": "1.0.0"
},
"dependencies": {
"querystringify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz",
"integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs="
},
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
}
}
}
}
},
"ws": {
"version": "0.4.32",
"resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz",
"integrity": "sha1-eHphVEFPPJntg8V3IVOyD+sM7DI=",
"requires": {
"commander": "2.1.0",
"nan": "1.0.0",
"options": "0.0.6",
"tinycolor": "0.0.1"
},
"dependencies": {
"commander": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
"integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E="
},
"nan": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz",
"integrity": "sha1-riT4hQgY1mL8q1rPfzuVv6oszzg="
},
"options": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
"integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
},
"tinycolor": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz",
"integrity": "sha1-MgtaUtg6u1l42Bo+iH1K77FaYWQ="
}
}
}
}
},
"promise": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.0.2.tgz",
"integrity": "sha1-rO8B/BZ1DUn9W1uNiFNHlZEPxiU=",
"requires": {
"asap": "2.0.6"
},
"dependencies": {
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
}
}
},
"promisecallback": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/promisecallback/-/promisecallback-0.0.4.tgz",
"integrity": "sha1-uTTxPATkQ2IrTWbeTkLqX2zmbnQ="
},
"reconnect-ws": {
"version": "git://github.com/kurentoforks/reconnect-ws.git#7fb7020e3ca1ffeaaa8bb4ddd690cf28c8d02a2b",
"requires": {
"reconnect-core": "git://github.com/kurentoforks/reconnect-core.git#921d43e91578abb2fb2613f585c010c1939cf734",
"websocket-stream": "0.5.1"
},
"dependencies": {
"reconnect-core": {
"version": "git://github.com/kurentoforks/reconnect-core.git#921d43e91578abb2fb2613f585c010c1939cf734",
"requires": {
"backoff": "2.3.0"
},
"dependencies": {
"backoff": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/backoff/-/backoff-2.3.0.tgz",
"integrity": "sha1-7nx+OAk/kuRyhZ22NedlJFT8Ieo="
}
}
},
"websocket-stream": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-0.5.1.tgz",
"integrity": "sha1-YizR8FZvuEzgpNb4VFJvPcTXDkg=",
"requires": {
"isbuffer": "0.0.0",
"through": "2.3.8",
"ws": "0.4.32"
},
"dependencies": {
"isbuffer": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz",
"integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s="
},
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"ws": {
"version": "0.4.32",
"resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz",
"integrity": "sha1-eHphVEFPPJntg8V3IVOyD+sM7DI=",
"requires": {
"commander": "2.1.0",
"nan": "1.0.0",
"options": "0.0.6",
"tinycolor": "0.0.1"
},
"dependencies": {
"commander": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
"integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E="
},
"nan": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz",
"integrity": "sha1-riT4hQgY1mL8q1rPfzuVv6oszzg="
},
"options": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
"integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
},
"tinycolor": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz",
"integrity": "sha1-MgtaUtg6u1l42Bo+iH1K77FaYWQ="
}
}
}
}
}
}
}
}
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
},
"uuid": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
"integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ="
},
"ws": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.0.1.tgz",
"integrity": "sha1-fQsqLljN3YGQOcKcneZQReGzEOk=",
"requires": {
"options": "0.0.6",
"ultron": "1.0.2"
},
"dependencies": {
"options": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
"integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
},
"ultron": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
"integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
}
}
}
}
}
{
"name": "kurento-hello-world",
"version": "6.6.1",
"private": true,
"dependencies": {
"cookie-parser": "^1.3.5",
"express": "~4.12.4",
"express-session": "~1.10.3",
"minimist": "^1.1.1",
"ws": "~1.0.1",
"kurento-client": "6.6.0",
"uuid": "*"
},
"devDependencies": {
"bower": "^1.4.1"
}
}
/*
* (C) Copyright 2014-2015 Kurento (http://kurento.org/)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
var path = require('path');
var url = require('url');
var cookieParser = require('cookie-parser')
var express = require('express');
var session = require('express-session')
var minimist = require('minimist');
var ws = require('ws');
var kurento = require('kurento-client');
var fs = require('fs');
var https = require('https');
var argv = minimist(process.argv.slice(1), {
default: {
ws_uri: 'ws://127.0.0.1:8888/kurento'
}
});
/*
* Definition of global variables.
*/
var kurentoClient = null;
var serverManager = null;
var mediaPipelines = {};
var endpointsCount = 0;
function formatFloat(n) {
return +n.toFixed(3);
}
getKurentoClient(function (error, kurentoClient) {
kurentoClient.getServerManager(function (error, server) {
if (error) {
console.log("getServerManager failed: " + error);
return;
}
serverManager = server;
getInfo(serverManager, function (error) {
if (error) {
return;
}
// console.log(JSON.stringify(mediaPipelines, null, 4));
// process.exit(0);
var staleEndpoints = 0;
var stalePipelines = 0;
var staleRtp = 0;
var staleWebrtc = 0;
var info = { "audio": {}, "video": {} };
["audio", "video"].forEach(function(media) {
info[media]["duplex"] = 0;
info[media]["rtp"] = 0;
info[media]["webrtc"] = 0;
["inbound", "outbound"].forEach(function(direction) {
info[media][direction] = 0;
info[media][direction + "PacketsLostRateList"] = [];
info[media][direction + "SumPacketsLost"] = 0;
info[media][direction + "AvgPacketsLostRate"] = 0;
info[media][direction + "MaxPacketsLostRate"] = 0;
info[media][direction + "JitterList"] = [];
info[media][direction + "AvgJitter"] = 0;
info[media][direction + "MaxJitter"] = 0;
});
});
for (var pipelineId in mediaPipelines) {
var pipeline = mediaPipelines[pipelineId];
var itemStaleEndpoint = 0;
for (var mediaEndpointId in pipeline.endpoints) {
var mediaEndpoint = pipeline.endpoints[mediaEndpointId];
var rtp = false;
var webrtc = false;
if (mediaEndpointId.indexOf("kurento.RtpEndpoint") != -1) {
rtp = true;
} else if (mediaEndpointId.indexOf("kurento.WebRtcEndpoint") != -1) {
webrtc = true;
}
var inbound = false;
var outbound = false;
["audio", "video"].every(function(media, index) {
for (var key in mediaEndpoint[media].stats) {
if (mediaEndpoint[media].stats[key].type == "outboundrtp" && mediaEndpoint[media].stats[key].bytesSent > 0) {
outbound = true;
if (mediaEndpoint[media].stats[key].hasOwnProperty("packetsLost")) {
info[media].outboundSumPacketsLost += mediaEndpoint[media].stats[key].packetsLost;
if (mediaEndpoint[media].stats[key].hasOwnProperty("packetsSent")) {
info[media].outboundPacketsLostRateList.push(mediaEndpoint[media].stats[key].packetsLost / (mediaEndpoint[media].stats[key].packetsLost + mediaEndpoint[media].stats[key].packetsSent));
}
}
if (mediaEndpoint[media].stats[key].hasOwnProperty("jitter")) {
info[media].outboundJitterList.push(mediaEndpoint[media].stats[key].jitter);
}
}
if (mediaEndpoint[media].stats[key].type == "inboundrtp" && mediaEndpoint[media].stats[key].bytesReceived > 0) {
inbound = true;
if (mediaEndpoint[media].stats[key].hasOwnProperty("packetsLost")) {
info[media].inboundSumPacketsLost += mediaEndpoint[media].stats[key].packetsLost;
if (mediaEndpoint[media].stats[key].hasOwnProperty("packetsReceived")) {
info[media].inboundPacketsLostRateList.push(mediaEndpoint[media].stats[key].packetsLost / (mediaEndpoint[media].stats[key].packetsLost + mediaEndpoint[media].stats[key].packetsReceived));
}
}
if (mediaEndpoint[media].stats[key].hasOwnProperty("jitter")) {
info[media].inboundJitterList.push(mediaEndpoint[media].stats[key].jitter);
}
}
}
if (inbound) {
if (outbound) {
info[media].duplex++;
} else {
info[media].inbound++;
}
} else {
if (outbound) {
info[media].outbound++;
} else {
}
}
if (inbound || outbound) {
if (rtp) {
info[media].rtp++;
} else if (webrtc) {
info[media].webrtc++;
}
return false;
}
return true;
})
if (! inbound && ! outbound) {
if (rtp) {
staleRtp++;
} else if (webrtc) {
staleWebrtc++;
}
itemStaleEndpoint++;
}
// if (mediaEndpoint.stale == true) {
// itemStaleEndpoint++;
// }
}
staleEndpoints += itemStaleEndpoint;
if (Object.keys(pipeline.endpoints).length == itemStaleEndpoint) {
stalePipelines++;
}
}
// console.log(JSON.stringify(info, null, 4));
var output = "pipelines: " + Object.keys(mediaPipelines).length
+ ", endpoints: " + endpointsCount
+ ", stale_pipelines: " + stalePipelines
+ ", stale_endpoints: " + staleEndpoints
+ ", stale_endpoints_rtp: " + staleRtp
+ ", stale_endpoints_webrtc: " + staleWebrtc;
["audio", "video"].forEach(function(media) {
output += "\n" + media + "_endpoints: " + (info[media].inbound + info[media].outbound + info[media].duplex);
output += ", " + media + "_duplex_endpoints: " + info[media].duplex;
output += ", " + media + "_inbound_endpoints: " + info[media].inbound;
if (info[media].inboundPacketsLostRateList.length > 0) {
let inboundSumPacketsLostRate = info[media].inboundPacketsLostRateList.reduce((previous, current) => current += previous);
let inboundAvgPacketsLostRate = info[media].inboundSumPacketsLostRate / info[media].inboundPacketsLostRateList.length;
let inboundMaxPacketsLostRate = Math.max.apply(null, info[media].inboundPacketsLostRateList);
output += ", " + media + "_inbound_avg_packet_loss_rate: " + formatFloat(info[media].inboundAvgPacketsLostRate)
+ ", " + media + "_inbound_max_packet_loss_rate: " + formatFloat(info[media].inboundMaxPacketsLostRate)
+ ", " + media + "_inbound_sum_packet_loss: " + info[media].inboundSumPacketsLost;
}
if (info[media].inboundJitterList.length > 0) {
let inboundSumJitter = info[media].inboundJitterList.reduce((previous, current) => current += previous);
let inboundAvgJitter = info[media].inboundSumJitter / info[media].inboundJitterList.length;
let inboundMaxJitter = Math.max.apply(null, info[media].inboundJitterList);
output += ", " + media + "_inbound_avg_jitter: " + formatFloat(info[media].inboundAvgJitter)
+ ", " + media + "_inbound_max_jitter: " + formatFloat(info[media].inboundMaxJitter);
}
output += ", " + media + "_outbound_endpoints: " + info[media].outbound;
if (info[media].outboundPacketsLostRateList.length > 0) {
let outboundSumPacketsLostRate = info[media].outboundPacketsLostRateList.reduce((previous, current) => current += previous);
let outboundAvgPacketsLostRate = info[media].outboundSumPacketsLostRate / info[media].outboundPacketsLostRateList.length;
let outboundMaxPacketsLostRate = Math.max.apply(null, info[media].outboundPacketsLostRateList);
output += ", " + media + "_outbound_avg_packet_loss_rate: " + formatFloat(info[media].outboundAvgPacketsLostRate)
+ ", " + media + "_outbound_max_packet_loss_rate: " + formatFloat(info[media].outboundMaxPacketsLostRate)
+ ", " + media + "_outbound_sum_packet_loss: " + info[media].outboundSumPacketsLost;
}
if (info[media].outboundJitterList.length > 0) {
let outboundSumJitter = info[media].outboundJitterList.reduce((previous, current) => current += previous);
let outboundAvgJitter = info[media].outboundSumJitter / info[media].outboundJitterList.length;
let outboundMaxJitter = Math.max.apply(null, info[media].outboundJitterList);
output += ", " + media + "_outbound_avg_jitter: " + formatFloat(info[media].outboundAvgJitter)
+ ", " + media + "_outbound_max_jitter: " + formatFloat(info[media].outboundMaxJitter);
}
output += ", " + media + "_rtp_endpoints: " + info[media].rtp;
output += ", " + media + "_webrtc_endpoints: " + info[media].webrtc;
});
console.log(output);
process.exit(0);
});
});
});
/*
* Definition of functions
*/
// Recover kurentoClient for the first time.
function getKurentoClient(callback) {
if (kurentoClient !== null) {
return callback(null, kurentoClient);
}
kurento(argv.ws_uri, function (error, _kurentoClient) {
if (error) {
console.log("Could not find media server at address " + argv.ws_uri);
return callback("Could not find media server at address" + argv.ws_uri
+ ". Exiting with error " + error);
}
kurentoClient = _kurentoClient;
callback(null, kurentoClient);
});
}
function getInfo(server, callback) {
if (!server) {
return callback('error - failed to find server');
}
server.getInfo(function (error, serverInfo) {
if (error) {
return callback(error);
}
getPipelinesInfo(server, callback);
})
}
function getAllFuncs(obj) {
var props = [];
do {
props = props.concat(Object.getOwnPropertyNames(obj));
} while (obj = Object.getPrototypeOf(obj));
return props.filter(function(elem, pos) {
return props.indexOf(elem) == pos;
}).sort();
}
function getPipelinesInfo(server, callback) {
if (!server) {
return callback('error - failed to find server');
}
server.getPipelines(function (error, pipelines) {
if (error) {
return callback(error);
}
if (pipelines && (pipelines.length < 1)) {
return callback(null);
}
var counter = 0;
var promises = [];
var firstPromises = [];
pipelines.forEach(function (p, index, array) {
mediaPipelines[p.id] = { "endpoints": {} };
firstPromises.push(setLatencyStats(p, mediaPipelines[p.id]));
firstPromises.push(getCreationTime(p, mediaPipelines[p.id]));
// console.log("===> " + JSON.stringify(getAllFuncs(p), null, 4));
// console.log("===> " + p.getCreationTime());
p.getChildren(function (error, elements) {
endpointsCount += elements.length;
mediaPipelines[p.id].hasPlayer = elements.length > 1;
elements.forEach(function (me, index, array) {
mediaPipelines[p.id].endpoints[me.id] = { "video": {}, "audio": {} };
promises.push(getCreationTime(me, mediaPipelines[p.id].endpoints[me.id]));
promises.push(isFlowingIn(me, "VIDEO", mediaPipelines[p.id].endpoints[me.id].video));
promises.push(isFlowingIn(me, "AUDIO", mediaPipelines[p.id].endpoints[me.id].audio));
promises.push(isFlowingOut(me, "VIDEO", mediaPipelines[p.id].endpoints[me.id].video));
promises.push(isFlowingOut(me, "AUDIO", mediaPipelines[p.id].endpoints[me.id].audio));
promises.push(getStats(me, "VIDEO", mediaPipelines[p.id].endpoints[me.id].video));
promises.push(getStats(me, "AUDIO", mediaPipelines[p.id].endpoints[me.id].audio));
promises.push(getMediaState(me, mediaPipelines[p.id].endpoints[me.id]));
})
counter++;
if (counter == pipelines.length) {
var rejectPromise = function(error) {
return callback(error);
}
Promise.all(firstPromises).then(function(value) {
Promise.all(promises).then(function(value) {
return callback();
}, rejectPromise);
}, rejectPromise);
}
})
})
})
}
var setLatencyStats = function(pipeline, obj) {
var promise = new Promise(function(resolve, reject) {
pipeline.setLatencyStats(true, function (error) {
if (error) {
reject(error);
} else {
resolve();
}
});
});
return promise;
}
var getCreationTime = function(element, obj) {
var promise = new Promise(function(resolve, reject) {
element.getCreationTime(function (error, result) {
if (error) {
reject(error);
} else {
// var t = new Date(result * 1000);
// var formatted = t.toISOString();
// console.log(formatted);
obj.creationTime = result;
resolve();
}
});
});
return promise;
}
var isFlowingIn = function(mediaElement, media, obj) {
var promise = new Promise(function(resolve, reject) {
mediaElement.isMediaFlowingIn(media, function (error, result) {
if (error) {
reject(error);
} else {
obj.mediaFlowingIn = result;
resolve();
}
});
});
return promise;
}
var isFlowingOut = function(mediaElement, media, obj) {
var promise = new Promise(function(resolve, reject) {
mediaElement.isMediaFlowingOut(media, function (error, result) {
if (error) {
reject(error);
} else {
obj.mediaFlowingOut = result;
resolve();
}
});
});
return promise;
}
var getStats = function(mediaElement, media, obj) {
var promise = new Promise(function(resolve, reject) {
mediaElement.getStats(media, function (error, result) {
if (error) {
reject(error);
} else {
obj.stats = result;
resolve();
}
});
});
return promise;
}
var getMediaState = function(mediaElement, obj) {
var promise = new Promise(function(resolve, reject) {
mediaElement.getMediaState(function (error, result) {
if (error) {
reject(error);
} else {
obj.stale = result == "DISCONNECTED";
resolve();
}
});
});
return promise;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment