├── .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 =