{"_id":"sdp-translator","_rev":"14-0eea8d42f57039e76fc889593828bbe9","name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","dist-tags":{"latest":"0.1.24"},"versions":{"0.1.12":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.12","stability":"unstable","repository":{"type":"git","url":"git+https://github.com/jitsi/sdp-interop.git"},"keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"bugs":{"url":"http://github.com/jitsi/sdp-interop/issues"},"license":"Apache-2.0","gitHead":"47ee6e705cc5287aac217df4afa846c4ffddd91b","homepage":"https://github.com/jitsi/sdp-interop#readme","_id":"sdp-translator@0.1.12","_shasum":"8621281e01ff1d993cae0ad5f3193d5b9899c9ef","_from":".","_npmVersion":"3.7.1","_nodeVersion":"0.12.9","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"8621281e01ff1d993cae0ad5f3193d5b9899c9ef","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.12.tgz","integrity":"sha512-2Iw+Qxc0MQ9oxP5YPpAxyxaPQDq5rHYFFtV+KCq5EFDXf+1PF/shjooNvtz+X3Ifb5ZeTW37fgmQyyGv9czUlA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLvYmxrxmMzTdk+aUIEqTRhQQQDkwhV65k05amBCaMcQIgPP7nRC6t/My63HnDoiWfrLXMyveJ1UyN8McvnFPwu4s="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.12.tgz_1454924292067_0.5836732771713287"}},"0.1.13":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.13","stability":"unstable","repository":{"type":"git","url":"git+https://github.com/jitsi/sdp-interop.git"},"keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"bugs":{"url":"http://github.com/jitsi/sdp-interop/issues"},"license":"Apache-2.0","gitHead":"d937d947e0569744cf60801b6f641d6d14796870","homepage":"https://github.com/jitsi/sdp-interop#readme","_id":"sdp-translator@0.1.13","_shasum":"1256eafb2d7e7f925b35b8b794935641f8dbcb8b","_from":".","_npmVersion":"3.7.1","_nodeVersion":"0.12.9","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"1256eafb2d7e7f925b35b8b794935641f8dbcb8b","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.13.tgz","integrity":"sha512-ADZF+Xtj2gIGlsyPdu99gbcwOnAFXK9qMP7tfKBu3bu4Sw7vUFB1Lc4/TaGfa0KZVtHhD/rZuohP+38Bqopviw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA9tjcZZy4t5ivqfzK4jei1cAoiBzQcEoGM5rfGh4BcAIgMnTgz0fH5DBCrs3DKDmhsGn9EHl2QzT0nyJeGBQcnvk="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.13.tgz_1454925621052_0.5138684427365661"}},"0.1.15":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.15","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"01219e8a55477bdc90a78a43df248f75c0a31ec9","_id":"sdp-translator@0.1.15","_shasum":"ea833fb227166a017c0f01faf4683bb9def882df","_from":".","_npmVersion":"3.7.2","_nodeVersion":"0.12.10","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"ea833fb227166a017c0f01faf4683bb9def882df","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.15.tgz","integrity":"sha512-72S6/kkwY+fhxj8JbrKg6Ecb0NiWkHfZcvuBgUvikUmVVUtRX8WWnvIsxXU6QZI5j3GldLvuySUdJSgmDqZgMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDFih1yjMORwFfwkmeH2e1LjnheG1BX5NNpNnZs8aZNwAiAah+oLUdduFC9aXFjh5ISpeA/FshjLIHvwOC3YvigPnQ=="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.15.tgz_1455546642852_0.8645793898031116"}},"0.1.16":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.16","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"6aa8e5adcc20433b4a6d0dea8bc50308b2c11ef9","_id":"sdp-translator@0.1.16","_shasum":"ea735bac85c24ce27c7108d1283951d6251cacca","_from":".","_npmVersion":"3.8.1","_nodeVersion":"0.12.10","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"ea735bac85c24ce27c7108d1283951d6251cacca","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.16.tgz","integrity":"sha512-UaBA7haY14iQoXHDjZ5/YX17ep8lc8TvUBciKLIUgkNSW+Z04mRoNqA8PV7IG3NhkRjEeEdiachIe/OGOuv8hQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF3z9+N3SljiwfS6jNMWRLhmfVYjem477TyK5TX0Y340AiEA9/NR3REcMJFOK5BlwzIcVR3/j7/96bSj2R9nwIMFAqk="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.16.tgz_1458134224605_0.018469956936314702"}},"0.1.17":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.17","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"65b029c979bfb59b216b1bf9360ab4c62e6d5b3c","_id":"sdp-translator@0.1.17","_shasum":"42fdbb8490c9b2c0e524af2fa1d5cdf1a1b41046","_from":".","_npmVersion":"3.8.8","_nodeVersion":"0.12.13","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"42fdbb8490c9b2c0e524af2fa1d5cdf1a1b41046","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.17.tgz","integrity":"sha512-iowB6eQvTQPqkcpDVQbATv6NOt6cPI4+Da5TDNBsaffu1ONDuoXj/qKukbMLeeqnULdOEVg5sQcJAGZ0Uhv7Rw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDdy2baa9c61aF0/Vyy5vZbu0Akn7tUeaxz6Tga7KGx2AiEA9OjR7jBA3yUEpf3CynrsLpEQDIsv0hAOjwq8IzHzT/g="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.17.tgz_1462287484470_0.12522083288058639"}},"0.1.18":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.18","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"8a96f85de1566d8e03a5ee1e0c5527cd365e6415","_id":"sdp-translator@0.1.18","_shasum":"410c439196f57d7535564b4adc0aa4d51d310cf0","_from":".","_npmVersion":"3.9.3","_nodeVersion":"0.12.14","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"410c439196f57d7535564b4adc0aa4d51d310cf0","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.18.tgz","integrity":"sha512-zgPbVqixf1XPFPGOknCloS7Du/52iZ3NG19knIMCdHIsPsw5Jlyrwi0qrfQj948Oc4X+aIaJRTqtq7+lEqdb8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIzOYFTvnIHHFVpc++tHs3PtOyDehnSqqatGms0qfeCQIhAL5LOfEzMrjIRniUHQr95w5aGHxKYUtu39rzOycSc6gB"}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.18.tgz_1464611590467_0.32185845193453133"}},"0.1.19":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.19","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"3694c3bc8327798436dbcc05e3eb9eb627d5a98b","_id":"sdp-translator@0.1.19","_shasum":"df38d9fb8c8b5acd961b869eb6906e7caebe71bc","_from":".","_npmVersion":"3.9.3","_nodeVersion":"0.12.14","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"df38d9fb8c8b5acd961b869eb6906e7caebe71bc","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.19.tgz","integrity":"sha512-D6C+9HAsmFwIXBEERydQqkp1uziTPWAzp3Tx1kuQMpT9963pBN+UbYJ8u2yQdRaLRGeyIl3KLBYBp4MJoS+MaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEe9WQ2QlJjCwg1YMpRqeohVSUo5ZFTAN0JHu9iHnttzAiEAnntHLulmgnF1KNMFPrAIAv4uLhbZKTT7UvDWFCiMiCc="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.19.tgz_1464789568856_0.9156950532924384"}},"0.1.20":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.20","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"7908264ab72bd1fb02a3444835726f79648752a4","_id":"sdp-translator@0.1.20","_shasum":"0d6552ed477a1e041b40467f40a2cb6de8873140","_from":".","_npmVersion":"3.9.6","_nodeVersion":"0.12.14","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"0d6552ed477a1e041b40467f40a2cb6de8873140","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.20.tgz","integrity":"sha512-A2D/aaYbY9XzsR9RCKpgxzwIoz0FMiU3iz28FETk0dX5QS2s4gyiM4CXKmlVnkrWFys20vnh0giSUUixdxAMJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHcuzUbOBQ4CCQYc+z1/QsiHMJsFEdm36bMxDsX8eHiHAiB4grNEIAmrt3q0fmOyM4RNwgEn1F9aDDBYPJydFKNH5g=="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.20.tgz_1466437463564_0.45562481763772666"}},"0.1.21":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.21","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"416d8f9bc9bceb5cc9d15caeb3882f555f184b7c","_id":"sdp-translator@0.1.21","_shasum":"61370e2f8a0615f80c8f954e5388a7602d5c1b6e","_from":".","_npmVersion":"3.10.2","_nodeVersion":"0.12.14","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"61370e2f8a0615f80c8f954e5388a7602d5c1b6e","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.21.tgz","integrity":"sha512-iMxERLlizvVU0m0iH4jURmgMU/n9K7IDMeyqHx7uhbJkxNFfgre8dd8CHx9F7mr5AfKo/YQ4Etrr40FymeHEFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjZvkMyYQf4pPM0S0zPug9eUPeUPjdvoNrEoLnUtVkmAIhAM86jEWZ04rG2Oudxt3K/PQE5eXcSbniGe0Z8ntIJYFQ"}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.21.tgz_1466764775120_0.6378379627130926"}},"0.1.22":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.22","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"33f86e880d097bfa7b64a37336e17785ce2a52a0","_id":"sdp-translator@0.1.22","_shasum":"78987fd68a45fc5fae367175d2424530cab0d165","_from":".","_npmVersion":"3.10.2","_nodeVersion":"0.12.14","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"78987fd68a45fc5fae367175d2424530cab0d165","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.22.tgz","integrity":"sha512-hUZ12ZNLsWb1IGBkelxfw8Su0rBF7x0+TUzildNn5GXHc1e8JqgptS8L/wgBMGSpOSQWTUOT+tnytS5a+79POg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEBEEwMbOg7swk+mfLkYOnsFs7zKY1d4R9HIQmBil8NhAiEA3L5pQWcPX/sn1qLbnknf2Ja3CABWs5treMAR1Ngs21k="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.22.tgz_1467119059005_0.9745292894076556"}},"0.1.23":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.23","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"323fd90de289ad07c3b781913a01746e0f079aec","_id":"sdp-translator@0.1.23","_shasum":"1e5c16b7d1c26dbfdd7ddb893e2bfe4d8442f81f","_from":".","_npmVersion":"3.10.2","_nodeVersion":"0.12.14","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"1e5c16b7d1c26dbfdd7ddb893e2bfe4d8442f81f","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.23.tgz","integrity":"sha512-fLWksmHli+vibgWDnJJzLStRnq10DbLhzCjvHGXm9/QBcwaoY2pqCnYC33qRQwfLJSjAmnezPutcbaDv1abhBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGNJ5EPqmARRmk3J8fnRd+oKaBIPFxWLFfQV4Ry2rwDAiBSp+cLEeLhqldew7DAdNmD5nzfIy2MgGp0ioVLLGamfg=="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.23.tgz_1467193580100_0.3086384672205895"}},"0.1.24":{"name":"sdp-translator","description":"A simple SDP interoperability layer for Unified Plan/Plan B","author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"version":"0.1.24","stability":"unstable","keywords":["sdp","webrtc","interoperability","polyfill"],"main":"./lib/","scripts":{"test":"node test/sdp_interop.js","coverage":"jscoverage lib && SDP_TRANSFORM_COV=1 nodeunit --reporter=lcov test","coveralls":"npm run coverage | coveralls","lint":"jshint .","validate":"npm ls"},"dependencies":{"sdp-transform":"1.5.*"},"devDependencies":{"coveralls":"^2.11.1","jscoverage":"^0.5.5","jshint":"2.8.0","precommit-hook":"^3.0.0","qunit-cli":"^0.2.0","browserify":"^10.2.4","browserify-optional":"^1.0.0","grunt":"^0.4.5","grunt-browserify":"~3.8.0","grunt-cli":"~0.1.13","grunt-contrib-clean":"~0.6.0","grunt-contrib-jshint":"^0.11.2","grunt-githooks":"^0.3.1","grunt-jscoverage":"^0.1.3","grunt-jsdoc":"^0.6.7","grunt-npm2bower-sync":"^0.9.1","grunt-shell":"^1.1.2","minifyify":"~7.0.1"},"pre-commit":["lint"],"license":"Apache-2.0","gitHead":"ce9d86a4c941d63f613ee5ccea3b1ccc4128d65a","_id":"sdp-translator@0.1.24","_shasum":"83fb8d634a63f15cd9944237dd90bd406906c6f3","_from":".","_npmVersion":"3.10.3","_nodeVersion":"0.12.14","_npmUser":{"name":"kurento-maintainer-team","email":"info@kurento.org"},"dist":{"shasum":"83fb8d634a63f15cd9944237dd90bd406906c6f3","tarball":"https://registry.npmjs.org/sdp-translator/-/sdp-translator-0.1.24.tgz","integrity":"sha512-BZAamdLOtBw+DXwF/0vbimZl7oMtjVuyO6As4jO5HIBp2pLHfsRDSm4SXK5tFEMEs8Ugjq2V8Ny6SkMtOmdWig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsUOv8Kv+aE27VioB4PA0sWT8oh1UQtoe3X3acJimDvAIgYSIoWRnFkVxMYVTqR/l6y53pjSaPX9GAcq/DxUPw98o="}]},"maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/sdp-translator-0.1.24.tgz_1467363016037_0.33400664338842034"}}},"readme":"## Introduction\n\n(or _Unified Plan, Plan B and the answer to life, the universe and eveything!_)\n\nIf somebody wants to talk about interoperability between Firefox and Chome when\ndoing multi-party video conferences, it is impossible to not talk a little bit\n(or a lot!) about [Unified\nPlan](https://tools.ietf.org/html/draft-roach-mmusic-unified-plan-00) and [Plan\nB](https://tools.ietf.org/html/draft-uberti-rtcweb-plan-00). Unified Plan and\nPlan B were two competing IETF drafts for the negotiation and exchange of\nmultiple media sources (AKA MediaStreamTracks, or MSTs) between two WebRTC\nendpoints. Unified Plan is being incorporated in the [JSEP\ndraft](https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-09) and is on its way\nto becoming an IETF standard while Plan B has expired in 2013 and nobody should\ncare about it anymore, right? Wrong!\n\nPlan B lives on in the Chrome and its derivatives, like Chromium and Opera.\nThere's actually an issue in the Chromium bug tracker to add support for\n[Unified Plan in\nChromium](https://code.google.com/p/chromium/issues/detail?id=465349), but\nthat'll take some time. Firefox, on the other hand, has, [as of\nrecently](https://hacks.mozilla.org/2015/03/webrtc-in-firefox-38-multistream-and-renegotiation/),\nimplemented Unified Plan.\n\nDevelopers that want to support both Firefox and Chrome have to deal with this\nsituation and implement some kind of _interoperability_ layer between Chrome and\nit derivatives and Firefox.\n\nThe most substantial difference between Unified Plan and Plan B is how they\nrepresent media stream tracks. Unified Plan extends the standard way of\nencoding this information in SDP which is to have each RTP flow (i.e., SSRC)\nappear on its own m-line. So, each media stream track is represented by its own\nunique m-line.  This is a strict one-to-one mapping; a single media stream\ntrack cannot be spread across several m-lines, nor may a single m-line\nrepresent multiple media stream tracks.\n\nPlan B takes a different approach, and creates a hierarchy within SDP; a m=\nline defines an \"envelope\", specifying codec and transport parameters, and\na=ssrc lines are used to describe individual media sources within that\nenvelope. So, typically, a Plan B SDP has three channels, one for audio, one\nfor video and one for the data.\n\n### Installation\n\nInstall locally from npm:\n\n```bash\n$ npm install sdp-interop\n```\n\n## Implementation\n\nThis module gives a general solution to the problem of SDP interoperability\ndescribed in the previous section and deals with it at the lowest level. The idea\nis to build a PeerConnection adapter that will feed the right SDP to the browser,\ni.e. Unified Plan to Firefox and Plan B to Chrome and that would give a Plan B SDP\nto the application.\n\n### The SDP interoperability layer\n\nsdp-interop is a reusable npm module that offers the two simple methods:\n\n* `toUnifiedPlan(sdp)` that takes an SDP string and transforms it into a\n  Unified Plan SDP.\n* `toPlanB(sdp)` that, not surprisingly, takes an SDP string and transforms it\n  to Plan B SDP.\n\nThe PeerConnection adapter wraps the `setLocalDescription()`,\n`setRemoteDescription()` methods and the success callbacks of the\n`createAnswer()` and `createOffer()` methods. If the browser is Chrome, the\nadapter does nothing. If, on the other hand, the browser is Firefox the\nPeerConnection adapter...\n\n* calls the `toUnifiedPlan()` method of the sdp-interop module prior to calling\n  the `setLocalDescription()` or the `setRemoteDescription()` methods, thus\n  converting the Plan B SDP from the application to a Unified Plan SDP that\n  Firefox can understand.\n* calls the `toPlanB()` method prior to calling the `createAnswer()` or the\n  `createOffer()` success callback, thus converting the Unified Plan SDP from\n  Firefox to a Plan B SDP that the application can understand.\n\nHere's a sample PeerConnection adapter:\n\n```javascript\nfunction PeerConnectionAdapter(ice_config, constraints) {\n    var RTCPeerConnection = navigator.mozGetUserMedia\n      ? mozRTCPeerConnection : webkitRTCPeerConnection;\n    this.peerconnection = new RTCPeerConnection(ice_config, constraints);\n    this.interop = new require('sdp-interop').Interop();\n}\n\nPeerConnectionAdapter.prototype.setLocalDescription\n  = function (description, successCallback, failureCallback) {\n    // if we're running on FF, transform to Unified Plan first.\n    if (navigator.mozGetUserMedia)\n        description = this.interop.toUnifiedPlan(description);\n\n    var self = this;\n    this.peerconnection.setLocalDescription(description,\n        function () { successCallback(); },\n        function (err) { failureCallback(err); }\n    );\n};\n\nPeerConnectionAdapter.prototype.setRemoteDescription\n  = function (description, successCallback, failureCallback) {\n    // if we're running on FF, transform to Unified Plan first.\n    if (navigator.mozGetUserMedia)\n        description = this.interop.toUnifiedPlan(description);\n\n    var self = this;\n    this.peerconnection.setRemoteDescription(description,\n        function () { successCallback(); },\n        function (err) { failureCallback(err); }\n    );\n};\n\nPeerConnectionAdapter.prototype.createAnswer\n  = function (successCallback, failureCallback, constraints) {\n    var self = this;\n    this.peerconnection.createAnswer(\n        function (answer) {\n            if (navigator.mozGetUserMedia)\n                answer = self.interop.toPlanB(answer);\n            successCallback(answer);\n        },\n        function(err) {\n            failureCallback(err);\n        },\n        constraints\n    );\n};\n\nPeerConnectionAdapter.prototype.createOffer\n  = function (successCallback, failureCallback, constraints) {\n    var self = this;\n    this.peerconnection.createOffer(\n        function (offer) {\n            if (navigator.mozGetUserMedia)\n                offer = self.interop.toPlanB(offer);\n            successCallback(offer);\n        },\n        function(err) {\n            failureCallback(err);\n        },\n        constraints\n    );\n};\n```\n\n### Beyond the basics\n\nLike everything in life, sdp-interop is not \"perfect\", it makes certain\nassumptions and it has some limitations. First and foremost, unfortunately, a\nPlan B offer/answer does not have enough information to rebuild an equivalent\nUnified Plan offer/answer. So, while it is easy to go from Plan B to Unified\nPlan, the opposite is not possible without keeping some state.\n\nSuppose, for example, that a Firefox client gets an offer from the Focus to\njoin a large call. In the _native_ create answer success callback you get a\nUnified Plan answer that contains multiple m-lines. You convert it in a Plan B\nanswer using the sdp-interop module and hand it over to the app to do its\nthing. At some point later-on, the app calls the adapter's\n`setLocalDescription()` method. The adapter will have to convert the Plan B\nanswer back to a Unified Plan one to pass it to Firefox.\n\nThat's the tricky part because you can't naively put any SSRC in any m-line,\neach SSRC has to be put back into the same m-line that it was in the original\nanswer from the native create answer success callback. The order of the m-lines\nis important too, so each m-line has to be in the same position it was in the\noriginal answer from the native create answer success callback (which matches\nthe position of the m-line in the Unified Plan offer). It is also forbidden to\nremove an m-line, instead they must be marked as inactive, if they're no longer\nused.  Similar considerations have to be taken into account when converting a\nPlan B offer to a Unified Plan one when doing renegotiation, for example.\n\nWe solved this issue by caching both the most recent Unified Plan offer and the\nmost recent Unified Plan answer. When we go from Plan B to Unified Plan we use\nthe cached Unified Plan offer/answer and add the missing information from\nthere. You can see\n[here](https://github.com/jitsi/sdp-interop/blob/d4569a12875a7180004726633793430eccd7f47b/lib/interop.js#L175)\nhow we do this exactly.\n\nAnother soft limitation (in the sense that it can be removed given enough\neffort) is that we require bundle and rtcp-mux for both Chrome and Firefox\nendpoints, so all the media whatever the channel is, go through a single port. This is tracked in [issue #3](https://github.com/jitsi/sdp-interop/issues/3).\n\nOne last soft limitation is that we have currently tested the interoperability\nlayer only when Firefox answers a call and not when it offers one because in\nour architecture endpoints always get invited to join a call and never offer\none. This is tracked in [issue #4](https://github.com/jitsi/sdp-interop/issues/4).\n\n## Copyright notice\n\nCopyright @ 2015 Atlassian Pty Ltd\nCopyright @ 2016 Kurento (http://kurento.org/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","maintainers":[{"name":"kurento-maintainer-team","email":"info@kurento.org"}],"time":{"modified":"2022-06-26T17:03:22.828Z","created":"2016-02-08T09:38:21.186Z","0.1.12":"2016-02-08T09:38:21.186Z","0.1.13":"2016-02-08T10:00:30.668Z","0.1.15":"2016-02-15T14:30:45.490Z","0.1.16":"2016-03-16T13:17:14.533Z","0.1.17":"2016-05-03T14:58:13.723Z","0.1.18":"2016-05-30T12:33:22.754Z","0.1.19":"2016-06-01T13:59:40.887Z","0.1.20":"2016-06-20T15:44:25.276Z","0.1.21":"2016-06-24T10:39:38.162Z","0.1.22":"2016-06-28T13:04:20.435Z","0.1.23":"2016-06-29T09:46:31.622Z","0.1.24":"2016-07-01T08:50:18.164Z"},"keywords":["sdp","webrtc","interoperability","polyfill"],"author":{"name":"Miguel París","email":"mparisdiaz@gmail.co"},"license":"Apache-2.0","readmeFilename":"README.md"}