├── .editorconfig ├── .gitattributes ├── .gitignore ├── CONTRIBUTING.md ├── COPYING ├── Makefile.am ├── README.md ├── apierror.c ├── apierror.h ├── auth.c ├── auth.h ├── autogen.sh ├── bower.json ├── certs ├── README.md ├── mycert.key └── mycert.pem ├── conf ├── janus.cfg.sample.in ├── janus.plugin.audiobridge.cfg.sample ├── janus.plugin.echotest.cfg.sample ├── janus.plugin.recordplay.cfg.sample.in ├── janus.plugin.sip.cfg.sample ├── janus.plugin.streaming.cfg.sample.in ├── janus.plugin.textroom.cfg.sample ├── janus.plugin.videocall.cfg.sample ├── janus.plugin.videoroom.cfg.sample ├── janus.plugin.voicemail.cfg.sample ├── janus.transport.http.cfg.sample.in ├── janus.transport.mqtt.cfg.sample ├── janus.transport.pfunix.cfg.sample ├── janus.transport.rabbitmq.cfg.sample └── janus.transport.websockets.cfg.sample.in ├── config.c ├── config.h ├── configure.ac ├── debug.h ├── docs ├── Makefile.am ├── doxy-boot.js ├── dynsections.js ├── footer.html ├── header.html └── janus-doxygen.cfg ├── dtls-bio.c ├── dtls-bio.h ├── dtls.c ├── dtls.h ├── emacs.el ├── html ├── Makefile.am ├── adapter.js ├── admin.html ├── admin.js ├── audiobridgetest.html ├── audiobridgetest.js ├── citeus.html ├── css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.min.css │ ├── bootstrap.css │ ├── bootstrap.min.css │ ├── cerulean │ │ ├── bootstrap.css │ │ └── bootstrap.min.css │ ├── demo.css │ ├── font-awesome.css │ └── font-awesome.min.css ├── demos.html ├── devicetest.html ├── devicetest.js ├── docs │ └── index.html ├── echotest.html ├── echotest.js ├── favicon.ico ├── fonts │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── fontawesome-webfont.woff2 │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff ├── footer.html ├── index.html ├── janus-logo.png ├── janus.js ├── janus.nojquery.js ├── jquery.blockUI.js ├── jquery.min.js ├── js │ ├── bootbox.min.js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── md5.min.js │ └── spin.min.js ├── meetecho-logo.png ├── navbar.html ├── recordplaytest.html ├── recordplaytest.js ├── screensharingtest.html ├── screensharingtest.js ├── siptest.html ├── siptest.js ├── streamingtest.html ├── streamingtest.js ├── support.html ├── textroomtest.html ├── textroomtest.js ├── up_arrow.png ├── videocalltest.html ├── videocalltest.js ├── videoroomtest.html ├── videoroomtest.js ├── voicemailtest.html └── voicemailtest.js ├── ice.c ├── ice.h ├── janus-valgrind.supp ├── janus.c ├── janus.ggo ├── janus.h ├── log.c ├── log.h ├── mach_gettime.h ├── mainpage.dox ├── mutex.h ├── os.c ├── os.h ├── package.json ├── plugins ├── janus_audiobridge.c ├── janus_echotest.c ├── janus_recordplay.c ├── janus_sip.c ├── janus_streaming.c ├── janus_textroom.c ├── janus_videocall.c ├── janus_videoroom.c ├── janus_voicemail.c ├── plugin.c ├── plugin.h ├── recordings │ ├── 1234.nfo │ ├── rec-sample-audio.mjr │ └── rec-sample-video.mjr └── streams │ ├── music.mulaw │ ├── radio.alaw │ ├── test_gstreamer.sh │ └── test_gstreamer_1.sh ├── postprocessing ├── janus-pp-rec.c ├── pp-g711.c ├── pp-g711.h ├── pp-h264.c ├── pp-h264.h ├── pp-opus-silence.h ├── pp-opus.c ├── pp-opus.h ├── pp-rtp.h ├── pp-srt.c ├── pp-srt.h ├── pp-webm.c └── pp-webm.h ├── record.c ├── record.h ├── rtcp.c ├── rtcp.h ├── rtp.h ├── sctp.c ├── sctp.h ├── sdp.c ├── sdp.h ├── transports ├── janus_http.c ├── janus_mqtt.c ├── janus_pfunix.c ├── janus_rabbitmq.c ├── janus_websockets.c └── transport.h ├── turnrest.c ├── turnrest.h ├── utils.c └── utils.h /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | indent_style = tab 6 | trim_trailing_whitespace = true 7 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.mulaw binary 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | cmdline.c 2 | cmdline.h 3 | docs/html/ 4 | 5 | /janus 6 | /janus-pp-rec 7 | /plugins/*.so 8 | /transports/*.so 9 | 10 | Makefile 11 | Makefile.in 12 | /build 13 | /configure 14 | /autom4te.cache 15 | /aclocal.m4 16 | /m4 17 | /missing 18 | /libtool 19 | /depcomp 20 | /compile 21 | /install-sh 22 | /ltmain.sh 23 | 24 | /config.log 25 | /config.guess 26 | /config.status 27 | /config.sub 28 | 29 | /*.o 30 | /plugins/*.o 31 | /plugins/*.lo 32 | /plugins/*.la 33 | /plugins/.libs 34 | /transports/*.o 35 | /transports/*.lo 36 | /transports/*.la 37 | /transports/.libs 38 | /postprocessing/*.o 39 | 40 | /conf/janus.cfg.sample 41 | /conf/janus.plugin.recordplay.cfg.sample 42 | /conf/janus.plugin.streaming.cfg.sample 43 | /conf/janus.transport.http.cfg.sample 44 | /conf/janus.transport.websockets.cfg.sample 45 | 46 | .deps 47 | .dirstamp 48 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contributing to Janus 2 | ===================== 3 | 4 | If you really want to help, then first of all, thank you! Janus is a 5 | project we firmly believe in, and so any contribution is more than 6 | welcome to make it better. 7 | 8 | If you want to open an issue, please make sure that: 9 | 10 | 1. you actually found a bug: for generic questions, use the 11 | [meetecho-janus](http://groups.google.com/d/forum/meetecho-janus) 12 | group instead; 13 | 2. nobody opened the same bug already (do a search); 14 | 3. the issue wasn't already solved; 15 | 4. you don't paste a huge amount of text in the issue or comments: use 16 | a service like [pastebin](http://pastebin.com/) or similar; 17 | 5. you provide a GDB stacktrace if Janus crashed on you, and/or output 18 | from AddressSanitizer or Valgrind (more details available 19 | [here](http://janus.conf.meetecho.com/docs/debug.html)). 20 | 21 | If you want to contribute to the project by providing fixes, enhancements, 22 | new features or other materials, then just clone the repo, make your changes, push to 23 | your fork (good commit messages that explain what changed are welcome!) 24 | and submit a pull request. Please make sure that, especially if you're 25 | modifying the C code, you follow the same coding style we're using and 26 | that you properly comment the code as we usually do ourselves. 27 | 28 | That said, please beware that we do require all contributors to 29 | sign the Contributor License Agreement 30 | before we can accept any code. 31 | -------------------------------------------------------------------------------- /apierror.c: -------------------------------------------------------------------------------- 1 | #include "apierror.h" 2 | 3 | const char *janus_get_api_error(int error) { 4 | switch(error) { 5 | case JANUS_OK: 6 | return "Success"; 7 | case JANUS_ERROR_UNAUTHORIZED: 8 | return "Unauthorized request (wrong or missing secret/token)"; 9 | case JANUS_ERROR_UNAUTHORIZED_PLUGIN: 10 | return "Unauthorized access to plugin (token is not allowed to)"; 11 | case JANUS_ERROR_UNKNOWN: 12 | return "Unknown error"; 13 | case JANUS_ERROR_TRANSPORT_SPECIFIC: 14 | return "Transport specific error"; 15 | case JANUS_ERROR_MISSING_REQUEST: 16 | return "Missing request"; 17 | case JANUS_ERROR_UNKNOWN_REQUEST: 18 | return "Unknown request"; 19 | case JANUS_ERROR_INVALID_JSON: 20 | return "Invalid JSON"; 21 | case JANUS_ERROR_INVALID_JSON_OBJECT: 22 | return "Invalid JSON Object"; 23 | case JANUS_ERROR_MISSING_MANDATORY_ELEMENT: 24 | return "Missing mandatory element"; 25 | case JANUS_ERROR_INVALID_REQUEST_PATH: 26 | return "Invalid path for this request"; 27 | case JANUS_ERROR_SESSION_NOT_FOUND: 28 | return "Session not found"; 29 | case JANUS_ERROR_HANDLE_NOT_FOUND: 30 | return "Handle not found"; 31 | case JANUS_ERROR_PLUGIN_NOT_FOUND: 32 | return "Plugin not found"; 33 | case JANUS_ERROR_PLUGIN_ATTACH: 34 | return "Error attaching plugin"; 35 | case JANUS_ERROR_PLUGIN_MESSAGE: 36 | return "Error sending message to plugin"; 37 | case JANUS_ERROR_PLUGIN_DETACH: 38 | return "Error detaching from plugin"; 39 | case JANUS_ERROR_JSEP_UNKNOWN_TYPE: 40 | return "Unsupported JSEP type"; 41 | case JANUS_ERROR_JSEP_INVALID_SDP: 42 | return "Invalid SDP"; 43 | case JANUS_ERROR_TRICKE_INVALID_STREAM: 44 | return "Invalid stream"; 45 | case JANUS_ERROR_INVALID_ELEMENT_TYPE: 46 | return "Invalid element type"; 47 | case JANUS_ERROR_SESSION_CONFLICT: 48 | return "Session ID already in use"; 49 | case JANUS_ERROR_UNEXPECTED_ANSWER: 50 | return "Unexpected ANSWER (no OFFER)"; 51 | case JANUS_ERROR_TOKEN_NOT_FOUND: 52 | return "Token not found"; 53 | default: 54 | return "Unknown error"; 55 | } 56 | return "Unknown error"; 57 | } 58 | -------------------------------------------------------------------------------- /apierror.h: -------------------------------------------------------------------------------- 1 | /*! \file apierror.h 2 | * \author Lorenzo Miniero 3 | * \copyright GNU General Public License v3 4 | * \brief Janus API errors definition 5 | * \details Definition of all the API errors that may occur when invoking 6 | * the Janus web-based JSON API. 7 | * \todo This code still needs proper hooks in the JavaScript libraries that use the interface. 8 | * 9 | * \ingroup core 10 | * \ref core 11 | */ 12 | 13 | #ifndef _JANUS_API_ERROR_H 14 | #define _JANUS_API_ERROR_H 15 | 16 | #include "os.h" 17 | 18 | /*! \brief Success (no error) */ 19 | #define JANUS_OK 0 20 | 21 | /*! \brief Unauthorized (can only happen when using apisecret/auth token) */ 22 | #define JANUS_ERROR_UNAUTHORIZED 403 23 | /*! \brief Unauthorized access to a plugin (can only happen when using auth token) */ 24 | #define JANUS_ERROR_UNAUTHORIZED_PLUGIN 405 25 | /*! \brief Unknown/undocumented error */ 26 | #define JANUS_ERROR_UNKNOWN 490 27 | /*! \brief Transport related error */ 28 | #define JANUS_ERROR_TRANSPORT_SPECIFIC 450 29 | /*! \brief The request is missing in the message */ 30 | #define JANUS_ERROR_MISSING_REQUEST 452 31 | /*! \brief The gateway does not suppurt this request */ 32 | #define JANUS_ERROR_UNKNOWN_REQUEST 453 33 | /*! \brief The payload is not a valid JSON message */ 34 | #define JANUS_ERROR_INVALID_JSON 454 35 | /*! \brief The object is not a valid JSON object as expected */ 36 | #define JANUS_ERROR_INVALID_JSON_OBJECT 455 37 | /*! \brief A mandatory element is missing in the message */ 38 | #define JANUS_ERROR_MISSING_MANDATORY_ELEMENT 456 39 | /*! \brief The request cannot be handled for this webserver path */ 40 | #define JANUS_ERROR_INVALID_REQUEST_PATH 457 41 | /*! \brief The session the request refers to doesn't exist */ 42 | #define JANUS_ERROR_SESSION_NOT_FOUND 458 43 | /*! \brief The handle the request refers to doesn't exist */ 44 | #define JANUS_ERROR_HANDLE_NOT_FOUND 459 45 | /*! \brief The plugin the request wants to talk to doesn't exist */ 46 | #define JANUS_ERROR_PLUGIN_NOT_FOUND 460 47 | /*! \brief An error occurring when trying to attach to a plugin and create a handle */ 48 | #define JANUS_ERROR_PLUGIN_ATTACH 461 49 | /*! \brief An error occurring when trying to send a message/request to the plugin */ 50 | #define JANUS_ERROR_PLUGIN_MESSAGE 462 51 | /*! \brief An error occurring when trying to detach from a plugin and destroy the related handle */ 52 | #define JANUS_ERROR_PLUGIN_DETACH 463 53 | /*! \brief The gateway doesn't support this SDP type 54 | * \todo The gateway currently only supports OFFER and ANSWER. */ 55 | #define JANUS_ERROR_JSEP_UNKNOWN_TYPE 464 56 | /*! \brief The Session Description provided by the peer is invalid */ 57 | #define JANUS_ERROR_JSEP_INVALID_SDP 465 58 | /*! \brief The stream a trickle candidate for does not exist or is invalid */ 59 | #define JANUS_ERROR_TRICKE_INVALID_STREAM 466 60 | /*! \brief A JSON element is of the wrong type (e.g., an integer instead of a string) */ 61 | #define JANUS_ERROR_INVALID_ELEMENT_TYPE 467 62 | /*! \brief The ID provided to create a new session is already in use */ 63 | #define JANUS_ERROR_SESSION_CONFLICT 468 64 | /*! \brief We got an ANSWER to an OFFER we never made */ 65 | #define JANUS_ERROR_UNEXPECTED_ANSWER 469 66 | /*! \brief The auth token the request refers to doesn't exist */ 67 | #define JANUS_ERROR_TOKEN_NOT_FOUND 470 68 | 69 | 70 | /*! \brief Helper method to get a string representation of an API error code 71 | * @param[in] error The API error code 72 | * @returns A string representation of the error code */ 73 | JANUS_API const char *janus_get_api_error(int error); 74 | 75 | #endif 76 | -------------------------------------------------------------------------------- /auth.h: -------------------------------------------------------------------------------- 1 | /*! \file auth.h 2 | * \author Lorenzo Miniero 3 | * \copyright GNU General Public License v3 4 | * \brief Requests authentication (headers) 5 | * \details Implementation of a simple mechanism for authenticating 6 | * requests. If enabled (it's disabled by default), the Janus admin API 7 | * can be used to specify valid tokens; each request must then contain 8 | * a valid token string, or otherwise the request is rejected with an 9 | * error. Whether tokens should be shared across users or not is 10 | * completely up to the controlling application: these tokens are 11 | * completely opaque to Janus, and treated as strings, which means 12 | * Janus will only check if the token exists or not when asked. 13 | * 14 | * \ingroup core 15 | * \ref core 16 | */ 17 | 18 | #ifndef _JANUS_AUTH_H 19 | #define _JANUS_AUTH_H 20 | 21 | #include 22 | 23 | #include "os.h" 24 | 25 | /*! \brief Method to initializing the token based authentication 26 | * @param[in] enabled Whether the authentication mechanism should be enabled or not */ 27 | JANUS_API void janus_auth_init(gboolean enabled); 28 | /*! \brief Method to check whether the mechanism is enabled or not */ 29 | JANUS_API gboolean janus_auth_is_enabled(void); 30 | /*! \brief Method to de-initialize the mechanism */ 31 | JANUS_API void janus_auth_deinit(void); 32 | 33 | /*! \brief Method to add a new valid token for authenticating 34 | * @param[in] token The new valid token 35 | * @returns true if the operation was successful, false otherwise */ 36 | JANUS_API gboolean janus_auth_add_token(const char *token); 37 | /*! \brief Method to check whether a provided token is valid or not 38 | * @param[in] token The token to validate 39 | * @returns true if the token is valid, false otherwise */ 40 | JANUS_API gboolean janus_auth_check_token(const char *token); 41 | /*! \brief Method to return a list of the tokens 42 | * \note It's the caller responsibility to free the list and its values 43 | * @returns A pointer to a GList instance containing the tokens */ 44 | JANUS_API GList *janus_auth_list_tokens(void); 45 | /*! \brief Method to invalidate an existing token 46 | * @param[in] token The valid to invalidate 47 | * @returns true if the operation was successful, false otherwise */ 48 | JANUS_API gboolean janus_auth_remove_token(const char *token); 49 | 50 | /*! \brief Method to allow a token to use a plugin 51 | * @param[in] token The token that can now access this plugin 52 | * @param[in] plugin Opaque pointer to the janus_plugin instance this token can access 53 | * @returns true if the operation was successful, false otherwise */ 54 | JANUS_API gboolean janus_auth_allow_plugin(const char *token, void *plugin); 55 | /*! \brief Method to check whether a provided token can access a specified plugin 56 | * @param[in] token The token to check 57 | * @param[in] plugin The plugin to check as an opaque pointer to a janus_plugin instance 58 | * @returns true if the token is allowed to access the plugin, false otherwise */ 59 | JANUS_API gboolean janus_auth_check_plugin(const char *token, void *plugin); 60 | /*! \brief Method to return a list of the plugins a specific token has access to 61 | * \note It's the caller responsibility to free the list (but NOT the values) 62 | * @param[in] token The token to get the list for 63 | * @returns A pointer to a GList instance containing the liist */ 64 | JANUS_API GList *janus_auth_list_plugins(const char *token); 65 | /*! \brief Method to disallow a token to use a plugin 66 | * @param[in] token The token this operation refers to 67 | * @param[in] plugin Opaque pointer to the janus_plugin instance this token can not access anymore 68 | * @returns true if the operation was successful, false otherwise */ 69 | JANUS_API gboolean janus_auth_disallow_plugin(const char *token, void *plugin); 70 | 71 | #endif 72 | -------------------------------------------------------------------------------- /autogen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | srcdir=`dirname $0` 4 | test -z "$srcdir" && srcdir=. 5 | 6 | mkdir -p m4 7 | 8 | autoreconf --verbose --force --install || exit 1 9 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "janus-gateway", 3 | "version": "0.1.0", 4 | "homepage": "https://github.com/meetecho/janus-gateway", 5 | "authors": [ 6 | "Lorenzo Miniero ", 7 | "Philip Withnall ", 8 | "Jack Leigh", 9 | "Pierce Lopez ", 10 | "Benjamin Trent ", 11 | "Dustin Oprea ", 12 | "Maurizio Porrato", 13 | "Giacomo Vacca", 14 | "mrauhu", 15 | "Min Wang", 16 | "leonuh", 17 | "Nicholas Wylie", 18 | "Graeme Yeates ", 19 | "gatecrasher777", 20 | "Damon Oehlman ", 21 | "Scott " 22 | ], 23 | "description": "A javascript library for interacting with the C based Janus WebRTC Gateway", 24 | "main": "./html/{adapter,janus}.js", 25 | "license": "GPLv3", 26 | "ignore": [ 27 | "**/.*", 28 | "**/*.alaw", 29 | "**/*.mjr", 30 | "node_modules", 31 | "bower_components", 32 | "test", 33 | "tests" 34 | ], 35 | "dependencies": { 36 | "jquery": "*" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /certs/README.md: -------------------------------------------------------------------------------- 1 | Certificates 2 | ============ 3 | 4 | This folder contains a sample certificate and key that you can use in Janus for everything that's related to security, most importantly DTLS-SRTP and, in case you need it (see the deployment instructions in the docs on why you may not), for HTTPS and/or secure WebSockets as well. Please beware that these certificates are just for testing: they're self signed and not certificated by any authority (and certainly not by us!). 5 | 6 | You can change the certificates to use in the ```janus.cfg``` settings. Should you want to generate some certificates yourself, refer to the instructions on how to do so that can be found pretty much everywhere. 7 | 8 | Please beware, though, that 512 bit certificates should be avoided, as explained in #251. 9 | 10 | # Feeling lazy? 11 | Just as an example and for the lazy (you'll probably find better samples around), here's how you can quickly create a certificate as needed by Janus: 12 | 13 | openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:1024 -keyout privateKey.key -out certificate.crt 14 | 15 | Just follow the instructions. This will create a private key in ```privateKey.key``` and a certificate in ```certificate.crt```. To use them, update the configuration file ```janus.cfg``` accordingly, to have the ```cert_pem``` and ```cert_key``` in ```[certificates]``` point to the newly created files. 16 | -------------------------------------------------------------------------------- /certs/mycert.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALFYwKzIRd4mhG4u 3 | nmZ8dM95Iz+SJTJYSSphVxDqW0VyAXxMFrCb5KiXuOKNgyPQMjRzXl5QVBwRhOh+ 4 | sR4bk3KvtBwQ5EeKlQoWKpahTjzXNt2e30BT+TF2QH0Hkvd7E4zR9YvHTPpZpdIW 5 | Wj90pS5BMAwCtisXJDKtoLPFnL7tAgMBAAECgYBEFDPyn/biLpsLyO2ZnhEhS/lS 6 | AAIzb1y23iMUJULgR8F2O6dCKLYAWi3pGjXLW7LKG7eQMPn4xGjm7yuCyUcyTcM6 7 | RbOKIZhh3b2B3bpum6Jlil4dJ1UvEkqkJd0+r7PHs8FGECglqc/CsdQ/pYrGinSw 8 | L8IkOBwTVu7I9tpSQQJBANt49JFFWIxElS1u25yT9FhDwnqCvm1s2QhPoFyQj3XH 9 | RO25HRIx2XRjppUffgUfY050cJS+ET/ZElczGDZL0tUCQQDO3PKI5ymNmmYSW7d8 10 | L+5b5PMqBcZT2h/RN8L/8R9WFpRgc3GvPh1F/pPukWBcl2/C72+Buhxh4iOf0F+6 11 | /1e5AkA/L4+Z01Eu8P/R2Ly5U49hagCvrLyOXGwPjH0qqSPkUL5zgnvwJRHqBFaN 12 | UEfDycmZaMSQzjfBHgm9uSQbXbERAkEAv3Gj1Cd7QV2fEWZoTTpeshUVJdLqVTgN 13 | MicVBKE2iwmikBDHKZOmq9yLM8K/F3HfMN0+qSSAl+Ydag4CSqF9oQJAAykCIVcp 14 | jcfkZvTLAeDGx8hucMdSYojjPfK8aE5DMt8AFfYQaYIakbUDWDbTvkTpA2WftIso 15 | AbnGatWAt6uGrQ== 16 | -----END PRIVATE KEY----- 17 | -------------------------------------------------------------------------------- /certs/mycert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICxjCCAi+gAwIBAgIJAMjcXehohH9WMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV 3 | BAYTAklUMQ8wDQYDVQQIDAZOYXBvbGkxDzANBgNVBAcMBk5hcG9saTEYMBYGA1UE 4 | CgwPTWVldGVjaG8gcy5yLmwuMQ4wDAYDVQQDDAVqYW51czEhMB8GCSqGSIb3DQEJ 5 | ARYSamFudXNAbWVldGVjaG8uY29tMB4XDTE1MDYwNDEzMjAxOFoXDTE2MDYwMzEz 6 | MjAxOFowfDELMAkGA1UEBhMCSVQxDzANBgNVBAgMBk5hcG9saTEPMA0GA1UEBwwG 7 | TmFwb2xpMRgwFgYDVQQKDA9NZWV0ZWNobyBzLnIubC4xDjAMBgNVBAMMBWphbnVz 8 | MSEwHwYJKoZIhvcNAQkBFhJqYW51c0BtZWV0ZWNoby5jb20wgZ8wDQYJKoZIhvcN 9 | AQEBBQADgY0AMIGJAoGBALFYwKzIRd4mhG4unmZ8dM95Iz+SJTJYSSphVxDqW0Vy 10 | AXxMFrCb5KiXuOKNgyPQMjRzXl5QVBwRhOh+sR4bk3KvtBwQ5EeKlQoWKpahTjzX 11 | Nt2e30BT+TF2QH0Hkvd7E4zR9YvHTPpZpdIWWj90pS5BMAwCtisXJDKtoLPFnL7t 12 | AgMBAAGjUDBOMB0GA1UdDgQWBBTXYPi6RVDqd4vCD5f8bTH9h7+F5jAfBgNVHSME 13 | GDAWgBTXYPi6RVDqd4vCD5f8bTH9h7+F5jAMBgNVHRMEBTADAQH/MA0GCSqGSIb3 14 | DQEBCwUAA4GBAAOi1TaCPUZxn1ns0uWn5mRquxSTuQ/picYrbasKkM+5gNMeYnay 15 | jJzigo3UQGJBnTmvJOuEIaRmnKsVet+wbx26t690BP8KcawRybYM6+6av5AXxwrl 16 | sDpjOaAha5JZ/y1kPu7Vk0XPIgYw3vx7/BbxYC7Fbyet+ZVDd7vdBx+V 17 | -----END CERTIFICATE----- 18 | -------------------------------------------------------------------------------- /conf/janus.plugin.audiobridge.cfg.sample: -------------------------------------------------------------------------------- 1 | ; [] 2 | ; description = This is my awesome room 3 | ; is_private = yes|no (whether this room should be in the public list, default=yes) 4 | ; secret = 5 | ; pin = 6 | ; sampling_rate = (e.g., 16000 for wideband mixing) 7 | ; record = true|false (whether this room should be recorded, default=false) 8 | ; record_file = /path/to/recording.wav (where to save the recording) 9 | 10 | [general] 11 | ;admin_key = supersecret ; If set, rooms can be created via API only 12 | ; if this key is provided in the request 13 | 14 | [1234] 15 | description = Demo Room 16 | secret = adminpwd 17 | sampling_rate = 16000 18 | record = false 19 | ;record_file = /tmp/janus-audioroom-1234.wav 20 | -------------------------------------------------------------------------------- /conf/janus.plugin.echotest.cfg.sample: -------------------------------------------------------------------------------- 1 | ; The Echo Test plugin doesn't need any configuration 2 | -------------------------------------------------------------------------------- /conf/janus.plugin.recordplay.cfg.sample.in: -------------------------------------------------------------------------------- 1 | ; path = where to place recordings in the file system 2 | 3 | [general] 4 | path = @recordingsdir@ 5 | -------------------------------------------------------------------------------- /conf/janus.plugin.sip.cfg.sample: -------------------------------------------------------------------------------- 1 | [general] 2 | ; Specify which local IP address to use. If not set it will be automatically 3 | ; guessed from the system 4 | ; local_ip = 1.2.3.4 5 | 6 | ; Enable local keep-alives to keep the registration open. Keep-alives are 7 | ; sent in the form of OPTIONS requests, at the given interval inseconds. 8 | ; (0 to disable) 9 | keepalive_interval = 120 10 | 11 | ; Indicate if the server is behind NAT. If so, the server will use STUN 12 | ; to guess its own public IP address and use it in the Contact header of 13 | ; outgoing requests 14 | behind_nat = no 15 | 16 | ; User-Agent string to be used 17 | ; user_agent = Cool WebRTC Gateway 18 | ; Expiration time for registrations 19 | register_ttl = 3600 20 | -------------------------------------------------------------------------------- /conf/janus.plugin.streaming.cfg.sample.in: -------------------------------------------------------------------------------- 1 | ; [stream-name] 2 | ; type = rtp|live|ondemand|rtsp 3 | ; rtp = stream originated by an external tool (e.g., gstreamer or 4 | ; ffmpeg) and sent to the plugin via RTP 5 | ; live = local file streamed live to multiple listeners 6 | ; (multiple listeners = same streaming context) 7 | ; ondemand = local file streamed on-demand to a single listener 8 | ; (multiple listeners = different streaming contexts) 9 | ; rtsp = stream originated by an external RTSP feed (only 10 | ; available if libcurl support was compiled) 11 | ; id = (if missing, a random one will be generated) 12 | ; description = This is my awesome stream 13 | ; is_private = yes|no (private streams don't appear when you do a 'list' 14 | ; request) 15 | ; secret = 17 | ; pin = 18 | ; filename = path to the local file to stream (only for live/ondemand) 19 | ; audio = yes|no (do/don't stream audio) 20 | ; video = yes|no (do/don't stream video) 21 | ; The following options are only valid for the 'rtp' type: 22 | ; audioport = local port for receiving audio frames 23 | ; audiomcast = multicast group port for receiving audio frames, if any 24 | ; audiopt =