GithubHelp home page GithubHelp logo

valeriansaliou / giggle Goto Github PK

View Code? Open in Web Editor NEW
57.0 12.0 9.0 3 MB

:telephone_receiver: Giggle Jingle library for XMPP, implementation of XEP-0166.

Home Page: https://www.npmjs.com/package/giggle

License: Mozilla Public License 2.0

JavaScript 99.92% Shell 0.08%
multiparty-calls xmpp xmpp-library webrtc sip jingle

giggle's Introduction

Giggle.js

Giggle library, implementation of XEP-0166 (Jingle). XMPP audio/video chat in your Web browser!

To be used with JSJaC from Stefan Strigler, available there: sstrigler/JSJaC Giggle is pluggable to other third-party XMPP libraries, please refer to ./src/giggle.plug.js. We'll happily accept your Pull Requests (PR).

๐Ÿ‡ซ๐Ÿ‡ท Crafted in Brest, France.

How To Build It?

Only Giggle.js raw sources are provided in this repository. Those are not usable out-of-the-box for production purposes. You first need to build the library components on your local machine.

Important: our automated build system requires that you have NodeJS, NPM, GruntJS, Bower (+ bower-installer) and Java on your machine. UNIX systems (MacOS, Linux) are recommended to proceed build.

If you already have NodeJS and NPM installed, you can simply install GruntJS and Bower:

npm install -g grunt-cli bower bower-installer

Deploy the library in one simple command:

./tools/deploy.sh

Testing Giggle

Please first clone Giggle on your local environment, and access it over your local HTTP server. Serving example pages over HTTP is a requirement for WebRTC to work.

One-to-one calls (aka Single)

You can try Giggle.js one-to-one calls using the page: giggle/examples/single_client.html

Open it on 2 separate tabs or 2 different computers, and login with 2 different XMPP accounts. Then, paste the full JID of the other connected account in the call field.

The call should then be initiated, and after a while the video will come.

Multiparty calls (aka Muji)

You can try Giggle.js multiparty calls using the page: giggle/examples/muji_client.html

Open it on 3+ separate tabs or 3+ different computers, and login with 3+ different XMPP accounts. Then, join the same conference room (you can enter any room even if it doesn't exist, on any open MUC server).

The multiparty conference call should take some time to initiate.

Note: depending on how powerful your CPU is and how much bandwidth your network can allocated, performances may degrade with many participants.

Notes About Security

Jingle could have been implemented in a dirty-way there, so that "It just works". But it's NOT the case. Giggle.js has been thought as secure on its basis.

We wanted to avoid such possible security exploits: imagine a friend of you wants to disturb your call, and send you a session-terminate with a wrong SID. In a quick-and-dirty implementation, the request would have been dropped because the call is already ongoing, but the client-side handlers would still have been fired, thus modifying the UI.

Giggle.js simply DOES NOT fire the custom event handlers that you may have defined, so that you don't have to check yourself that each incoming packet is safe, thus to ensure your client implementation of Jingle is rock-solid (safe: session is authorized AND stanza sender is authorized AND the Jingle session flow is respected).

Multiparty call can be password-protected, in a completely transparent fashion. Giggle.js can handle the password generation process, and then transmit it to other potential call participants through the Muji call invites you send to them.

Usage

The API documentation is available in: ./doc/. You must first build Giggle to view it, please refer to the upper section about building Giggle.

We assume your XMPP Web client is using a supported XMPP library and has an active connection, stored in the GIGGLE_CONNECTION global object.

/*
 * Giggle.js Implementation Example
 */

// 1. Ensure you are loading the following libraries:
//    > jQuery
//    > JSJaC (or any other supported XMPP library)
//    > Giggle.js

// 2. Define configuration generators
var single_config_generator = function() {
    // Return single configuration object
    // Refer to single_client.js source for more
    return {};
};

var muji_config_generator = function() {
    // Return muji configuration object
    // Refer to muji_client.js source for more
    return {};
};

// 3. Initiate the listener
// Note: here using 'JSJaCConsoleLogger' from JSJaC as a console wrapper
Giggle.listen({
    plug: GIGGLE_PLUG_JSJAC,
    connection: GIGGLE_CONNECTION,
    debug: (new JSJaCConsoleLogger(4)),

    // Receive a one-to-one (Single) call
    single_initiate: function(stanza) {
        var config = single_config_generator();

        // Configuration values
        config.to          = stanza.from() || null;
        config.local_view  = $('#video_local')[0];
        config.remote_view = $('#video_remote')[0];

        // Handle call request
        session = Giggle.session(GIGGLE_SESSION_SINGLE, config);
        session.handle(stanza);
    },

    // Receive a multiparty (Muji) call
    muji_invite: function(stanza, args) {
        // Note: auto-accepting call there
        //       you should ask the user before accepting like this

        var config = muji_config_generator();

        // Session values
        config.to           = args.jid;
        config.media        = (args.media == GIGGLE_MEDIA_VIDEO) ? GIGGLE_MEDIA_VIDEO : GIGGLE_MEDIA_AUDIO;
        config.local_view   = $('#video_local')[0];

        if(args.password) {
            config.password = args.password;
        }

        // Handle conference invite
        session = Giggle.session(GIGGLE_SESSION_MUJI, config);
        session.join();
    }
});

// 4. Configure our disco#info handler to reply with Giggle.js features
var handle_disco_info = function(iq) {
    // Do the parse work there...

    // Get my client feature map
    var client_map = [ /* Features here... */ ];

    // Get the Giggle.js feature map
    var Giggle_map = Giggle.disco();

    // Concatenate feature maps
    var final_map = client_map.concat(Giggle_map);

    // Ensure uniqueness of feature map values there...
    // Send back your response stanza there...
};

One-to-one calls

The one-to-one demo client source code can be found at the following URL: giggle/examples/single_client.html

Here's a sum up on how to use the Giggle/Single API:

/*
 * Giggle.Single.js API Example
 */

// Single call launcher
var launch_single_call = function(to, target) {
    var config = single_config_generator();

    // Session values
    config.to           = to;
    config.media        = (target == 'call_audio') ? GIGGLE_MEDIA_AUDIO : GIGGLE_MEDIA_VIDEO;
    config.video_source = (target == 'call_screen') ? GIGGLE_VIDEO_SOURCE_SCREEN : GIGGLE_VIDEO_SOURCE_CAMERA;
    config.local_view   = $('#video_local')[0];
    config.remote_view  = $('#video_remote')[0];

    // Send call request
    session = Giggle.session(GIGGLE_SESSION_SINGLE, config);
    session.initiate();
};

// Attach form submit event
$('form#launch_single_call').submit(function() {
    var to = $(this).find('input[name="to"]').val();
    var target = ($(this).find('input[name="target"]').val() || 'call_video');

    if(to && target) {
        // Launch call...
        var session = launch_single_call(to, target);

        // Send session info (client ringing & more)...
        session.info(GIGGLE_SESSION_INFO_RINGING);

        // Mute/Unmute audio in call...
        session.mute(GIGGLE_MEDIA_AUDIO);
        session.umute(GIGGLE_MEDIA_AUDIO);

        // Terminate call...
        session.terminate(GIGGLE_REASON_SUCCESS);
    }

    return false;
});

Multiparty calls

The multiparty demo client source code can be found at the following URL: giggle/examples/muji_client.html

Here's a sum up on how to use the Giggle/Muji API:

/*
 * Giggle.Muji.js API Example
 */

// Muji call launcher
var launch_muji_call = function(room, target) {
    var config = muji_config_generator();

    // Session values
    config.to           = room;
    config.media        = (target == 'call_audio') ? GIGGLE_MEDIA_AUDIO : GIGGLE_MEDIA_VIDEO;
    config.video_source = GIGGLE_VIDEO_SOURCE_CAMERA;
    config.local_view   = $('#video_local')[0];

    // Join conference room
    session = Giggle.session(GIGGLE_SESSION_MUJI, config);
    session.join();

    return session;
};

// Attach form submit event
$('form#launch_muji_call').submit(function() {
    var room = $(this).find('input[name="room"]').val();
    var target = ($(this).find('input[name="target"]').val() || 'call_video');

    if(room && target) {
        // Launch conference...
        var session = launch_muji_call(room, target);

        // Send a message to conference...
        session.send_message('Hello World!');

        // Mute/Unmute audio in conference...
        session.mute(GIGGLE_MEDIA_AUDIO);
        session.umute(GIGGLE_MEDIA_AUDIO);

        // Invite people to conference...
        session.invite([
            '[email protected]/Phone',
            '[email protected]/Tablet'
        ]);

        // Leave conference...
        session.leave();
    }

    return false;
});

Ah, One More Thing...

We worked hard on that lib, we would appreciate your feedback and bug reports. Plus, if you are using it in your project, we would be glad if you let @valeriansaliou know.

If you have any enhancement idea or any bug to report: giggle/issues

giggle's People

Contributors

gitter-badger avatar kanterov avatar valeriansaliou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

giggle's Issues

XEP-0166: content-*

Support for both:

  • content-accept
  • content-add
  • content-modify
  • content-reject
  • content-remove

Useful in case the user wants to share his video being in an audio-only call, or the contrary: unshare his video and fall-back to audio only.

XEP-0278: Jingle Relay Nodes

http://xmpp.org/extensions/xep-0278.html

Important: discover Jingle Nodes on JSJaCJingle_listen() or so, do not request for Jingle Node services on each new session. If a session is being initiated and the services are still pending, delay the session initiation (wait for the available services to come first!).

Video call does not work with Google Chrome 32 beta (32.0.1700.76 beta-m)

Checked on demo page - https://demo.frenchtouch.pro/valerian.saliou/jsjac-jingle/examples/simple_client.html.
Chrome 32 beta <-> Chrome 32 beta: not work
Google Chrome console logs with "sdp=1":
user_1 (Chrome 32.0.1700.76 beta-m) OS Windows 7 SP1 start video call

event.returnValue is deprecated. Please use the standard event.preventDefault() instead. lib.jquery.js:3
[JSJaCJingle] lib:listen > Listening. lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > Discovering available services... lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Service stored (type: stun, host: stun.jappix.com, port: 3478, transport: udp). lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Service stored (type: stun, host: stun.jappix.com, port: 3478, transport: tcp). lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Discovered available services. lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > Ready. lib.jsjac.js:247
[JSJaCJingle] lib:defer > Executing 0 deferred functions... lib.jsjac.js:247
[JSJaCJingle] lib:defer > Done executing deferred functions. lib.jsjac.js:247
[JSJaCJingle] initiate lib.jsjac.js:247
[JSJaCJingle] initiate > New Jingle session with media: video lib.jsjac.js:247
session_initiate_pending simple_client.js:28
[JSJaCJingle] _peer_get_user_media lib.jsjac.js:247
[JSJaCJingle] _peer_get_user_media > Getting user media... lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Got user media. lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Waiting for local video to be loaded... lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Local video loaded. lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > Using ICE server at: stun:stun.jappix.com:3478?transport=tcp (1). lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > Getting local description... lib.jsjac.js:247
[JSJaCJingle] _peer_got_description lib.jsjac.js:247
[JSJaCJingle] _peer_got_description > Got local description. lib.jsjac.js:247
[JSJaCJingle] SDP (local:raw)

v=0
o=- 7596627277040944372 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS 1JHgMc38qHn1iVMjDtUpdwymT1P5frAH8lgL
m=audio 1 RTP/SAVPF 111 103 104 0 8 106 105 13 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:Kzwj3DKLYH2CEBku
a=ice-pwd:HgC/xMYBjimgNNVZLb2Bn5ek
a=ice-options:google-ice
a=fingerprint:sha-256 2E:A5:60:66:F1:8F:37:FA:FA:A5:36:F6:1D:1F:6C:57:D2:29:18:B2:02:E8:B0:CB:FD:12:C0:6B:D0:89:6A:A1
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:gVLYv53fYO6Bd1nQrn16u5roJprv3CCfSj8lU5DT
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:2236282588 cname:f7Zlifa8t2y2e7fa
a=ssrc:2236282588 msid:1JHgMc38qHn1iVMjDtUpdwymT1P5frAH8lgL 6ab46667-ec05-46b0-a33e-88c7c29874e4
a=ssrc:2236282588 mslabel:1JHgMc38qHn1iVMjDtUpdwymT1P5frAH8lgL
a=ssrc:2236282588 label:6ab46667-ec05-46b0-a33e-88c7c29874e4
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:Kzwj3DKLYH2CEBku
a=ice-pwd:HgC/xMYBjimgNNVZLb2Bn5ek
a=ice-options:google-ice
a=fingerprint:sha-256 2E:A5:60:66:F1:8F:37:FA:FA:A5:36:F6:1D:1F:6C:57:D2:29:18:B2:02:E8:B0:CB:FD:12:C0:6B:D0:89:6A:A1
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:gVLYv53fYO6Bd1nQrn16u5roJprv3CCfSj8lU5DT
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
a=ssrc:81115015 cname:f7Zlifa8t2y2e7fa
a=ssrc:81115015 msid:1JHgMc38qHn1iVMjDtUpdwymT1P5frAH8lgL 98d56551-dd67-4303-81d2-91b48b600cd8
a=ssrc:81115015 mslabel:1JHgMc38qHn1iVMjDtUpdwymT1P5frAH8lgL
a=ssrc:81115015 label:98d56551-dd67-4303-81d2-91b48b600cd8
 lib.jsjac.js:247
[JSJaCJingle] _util_sdp_resolution_payload > Got local video resolution (352x288). lib.jsjac.js:247
[JSJaCJingle] _util_sdp_parse_group > TypeError: Object #<Object> has no method 'exec' lib.jsjac.js:247
[JSJaCJingle] SDP (local:gen)

v=0
o=jappix 1 1 IN IP4 jappix.com
s=6siFjWelHFLUR0vD
t=0 0
m=audio 1 RTP/SAVPF 0 8 13 103 104 105 106 111 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:Kzwj3DKLYH2CEBku
a=ice-pwd:HgC/xMYBjimgNNVZLb2Bn5ek
a=fingerprint:sha-256 2E:A5:60:66:F1:8F:37:FA:FA:A5:36:F6:1D:1F:6C:57:D2:29:18:B2:02:E8:B0:CB:FD:12:C0:6B:D0:89:6A:A1
a=setup:actpass
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=mid:0
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:gVLYv53fYO6Bd1nQrn16u5roJprv3CCfSj8lU5DT
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:105 CN/16000
a=rtpmap:106 CN/32000
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:2236282588 cname:f7Zlifa8t2y2e7fa
a=ssrc:2236282588 msid:1JHgMc38qHn1iVMjDtUpdwymT1P5frAH8lgL 6ab46667
a=ssrc:2236282588 mslabel:1JHgMc38qHn1iVMjDtUpdwymT1P5frAH8lgL
a=ssrc:2236282588 label:6ab46667-ec05-46b0-a33e-88c7c29874e4
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:Kzwj3DKLYH2CEBku
a=ice-pwd:HgC/xMYBjimgNNVZLb2Bn5ek
a=fingerprint:sha-256 2E:A5:60:66:F1:8F:37:FA:FA:A5:36:F6:1D:1F:6C:57:D2:29:18:B2:02:E8:B0:CB:FD:12:C0:6B:D0:89:6A:A1
a=setup:actpass
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=mid:1
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:gVLYv53fYO6Bd1nQrn16u5roJprv3CCfSj8lU5DT
a=rtpmap:100 VP8/90000
a=fmtp:100 height=288;width=352
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=fmtp:116 height=288;width=352
a=rtpmap:117 ulpfec/90000
a=fmtp:117 height=288;width=352
a=ssrc:81115015 cname:f7Zlifa8t2y2e7fa
a=ssrc:81115015 msid:1JHgMc38qHn1iVMjDtUpdwymT1P5frAH8lgL 98d56551
a=ssrc:81115015 mslabel:1JHgMc38qHn1iVMjDtUpdwymT1P5frAH8lgL
a=ssrc:81115015 label:98d56551-dd67-4303-81d2-91b48b600cd8
 lib.jsjac.js:247
[JSJaCJingle] _peer_got_description > Waiting for local candidates... lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > onicecandidate > Got initial candidates. lib.jsjac.js:247
[JSJaCJingle] initiate > Ready to begin Jingle negotiation. lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] send_session_initiate lib.jsjac.js:247
[JSJaCJingle] register_handler lib.jsjac.js:247
[JSJaCJingle] register_handler > Registered handler for id: jj_6siFjWelHFLUR0vD_1 and type: result lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Registered (id: jj_6siFjWelHFLUR0vD_1, status: initiating). lib.jsjac.js:247
[JSJaCJingle] send_session_initiate > Sent. lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: 6siFjWelHFLUR0vD). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle > Submitted to custom handler. lib.jsjac.js:247
session_initiate_success simple_client.js:38
[JSJaCJingle] handle_session_initiate_success lib.jsjac.js:247
[JSJaCJingle] unregister_handler lib.jsjac.js:247
[JSJaCJingle] unregister_handler > Unregistered handler for id: jj_6siFjWelHFLUR0vD_1 and type: result lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: 6siFjWelHFLUR0vD). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle_session_info lib.jsjac.js:247
session_info_request simple_client.js:120
[JSJaCJingle] handle_session_info_request lib.jsjac.js:247
[JSJaCJingle] handle_session_info_request > (name: ringing). lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
session_info_success simple_client.js:112
[JSJaCJingle] handle_session_info_success lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: 6siFjWelHFLUR0vD). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle_session_accept lib.jsjac.js:247
session_accept_request simple_client.js:108
[JSJaCJingle] handle_session_accept_request lib.jsjac.js:247
session_accept_success simple_client.js:88
[JSJaCJingle] handle_session_accept_success lib.jsjac.js:247
[JSJaCJingle] SDP (remote)

v=0
o=jappix 1 1 IN IP4 jappix.com
s=6siFjWelHFLUR0vD
t=0 0
m=audio 1 RTP/SAVPF 0 8 13 103 104 105 106 111 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:RRlQ/gD4DYywxv4h
a=ice-pwd:e/0jQxiCzob6gkIbRug+GkFd
a=fingerprint:sha-1 3C:4D:FB:CD:E2:9F:61:AF:F1:6C:7A:FA:BD:42:40:3A:32:21:A7:D2
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=mid:0
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:105 CN/16000
a=rtpmap:106 CN/32000
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=candidate:3566256226 1 udp 2113937151 192.168.4.113 53365 typ host generation 0
a=candidate:1440270038 1 udp 1845501695 89.209.126.159 30687 typ srflx raddr 192.168.4.113 rport 53365 generation 0
a=candidate:2584951954 1 tcp 1509957375 192.168.4.113 0 typ host generation 0
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:0cdtxPKGd5yHc4gg
a=ice-pwd:8Ds/gPCq3z0Dll1kPyqn3g+B
a=fingerprint:sha-1 3C:4D:FB:CD:E2:9F:61:AF:F1:6C:7A:FA:BD:42:40:3A:32:21:A7:D2
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=mid:1
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=fmtp:100 height=360;width=640
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=fmtp:116 height=360;width=640
a=rtpmap:117 ulpfec/90000
a=fmtp:117 height=360;width=640
a=candidate:3566256226 1 udp 2113937151 192.168.4.113 53366 typ host generation 0
a=candidate:1440270038 1 udp 1845501695 89.209.126.159 26962 typ srflx raddr 192.168.4.113 rport 53366 generation 0
a=candidate:2584951954 1 tcp 1509957375 192.168.4.113 0 typ host generation 0
 lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > onaddstream lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange > (state: checking). lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange > (state: connected). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Cheking (id: jj_6siFjWelHFLUR0vD_1, status: initiating-accepted). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Stanza successful. 

user_2 (Chrome 32.0.1700.76 beta-m) OS Windows 7 SP1 receive video call

event.returnValue is deprecated. Please use the standard event.preventDefault() instead.
[JSJaCJingle] lib:listen > Listening. lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > Discovering available services... lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Service stored (type: stun, host: stun.jappix.com, port: 3478, transport: udp). lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Service stored (type: stun, host: stun.jappix.com, port: 3478, transport: tcp). lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Discovered available services. lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > Ready. lib.jsjac.js:247
[JSJaCJingle] lib:defer > Executing 0 deferred functions... lib.jsjac.js:247
[JSJaCJingle] lib:defer > Done executing deferred functions. lib.jsjac.js:247
[JSJaCJingle] lib:route > New Jingle session (sid: 6siFjWelHFLUR0vD). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle_session_initiate lib.jsjac.js:247
session_initiate_request simple_client.js:72
[JSJaCJingle] handle_session_initiate_request lib.jsjac.js:247
session_initiate_success simple_client.js:38
[JSJaCJingle] handle_session_initiate_success lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] info lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] send_session_info lib.jsjac.js:247
[JSJaCJingle] register_handler lib.jsjac.js:247
[JSJaCJingle] register_handler > Registered handler for id: jj_6siFjWelHFLUR0vD_1 and type: result lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Registered (id: jj_6siFjWelHFLUR0vD_1, status: initiated). lib.jsjac.js:247
[JSJaCJingle] send_session_info > Sent (name: ringing). lib.jsjac.js:247
[JSJaCJingle] accept lib.jsjac.js:247
[JSJaCJingle] accept > New Jingle session with media: video lib.jsjac.js:247
session_accept_pending simple_client.js:76
[JSJaCJingle] _peer_get_user_media lib.jsjac.js:247
[JSJaCJingle] _peer_get_user_media > Getting user media... lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Got user media. lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Waiting for local video to be loaded... lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Local video loaded. lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > Using ICE server at: stun:stun.jappix.com:3478?transport=tcp (1). lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > Getting local description... lib.jsjac.js:247
[JSJaCJingle] SDP (remote)

v=0
o=jappix 1 1 IN IP4 jappix.com
s=6siFjWelHFLUR0vD
t=0 0
m=audio 1 RTP/SAVPF 0 8 13 103 104 105 106 111 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:Kzwj3DKLYH2CEBku
a=ice-pwd:HgC/xMYBjimgNNVZLb2Bn5ek
a=fingerprint:sha-256 2E:A5:60:66:F1:8F:37:FA:FA:A5:36:F6:1D:1F:6C:57:D2:29:18:B2:02:E8:B0:CB:FD:12:C0:6B:D0:89:6A:A1
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=mid:0
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:gVLYv53fYO6Bd1nQrn16u5roJprv3CCfSj8lU5DT
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:105 CN/16000
a=rtpmap:106 CN/32000
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=candidate:3649085971 1 udp 2113937151 192.168.4.183 55364 typ host generation 0
a=candidate:3649085971 2 udp 2113937150 192.168.4.183 55365 typ host generation 0
a=candidate:1489544359 2 udp 1845501694 89.209.126.159 49719 typ srflx raddr 192.168.4.183 rport 55365 generation 0
a=candidate:1489544359 1 udp 1845501695 89.209.126.159 11312 typ srflx raddr 192.168.4.183 rport 55364 generation 0
a=candidate:2533580515 1 tcp 1509957375 192.168.4.183 0 typ host generation 0
a=candidate:2533580515 2 tcp 1509957374 192.168.4.183 0 typ host generation 0
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:Kzwj3DKLYH2CEBku
a=ice-pwd:HgC/xMYBjimgNNVZLb2Bn5ek
a=fingerprint:sha-256 2E:A5:60:66:F1:8F:37:FA:FA:A5:36:F6:1D:1F:6C:57:D2:29:18:B2:02:E8:B0:CB:FD:12:C0:6B:D0:89:6A:A1
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=mid:1
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:gVLYv53fYO6Bd1nQrn16u5roJprv3CCfSj8lU5DT
a=rtpmap:100 VP8/90000
a=fmtp:100 height=288;width=352
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=fmtp:116 height=288;width=352
a=rtpmap:117 ulpfec/90000
a=fmtp:117 height=288;width=352
a=candidate:3649085971 1 udp 2113937151 192.168.4.183 55366 typ host generation 0
a=candidate:3649085971 2 udp 2113937150 192.168.4.183 55367 typ host generation 0
a=candidate:1489544359 2 udp 1845501694 89.209.126.159 4151 typ srflx raddr 192.168.4.183 rport 55367 generation 0
a=candidate:1489544359 1 udp 1845501695 89.209.126.159 18102 typ srflx raddr 192.168.4.183 rport 55366 generation 0
a=candidate:2533580515 1 tcp 1509957375 192.168.4.183 0 typ host generation 0
a=candidate:2533580515 2 tcp 1509957374 192.168.4.183 0 typ host generation 0
 lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > onaddstream lib.jsjac.js:247
[JSJaCJingle] _peer_got_description lib.jsjac.js:247
[JSJaCJingle] _peer_got_description > Got local description. lib.jsjac.js:247
[JSJaCJingle] SDP (local:raw)

v=0
o=- 5604038441509852617 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS XerqqlTg5smV5LsnhQVjU2ECvXHlos2yZUK1
m=audio 1 RTP/SAVPF 111 103 104 0 8 106 105 13 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:RRlQ/gD4DYywxv4h
a=ice-pwd:e/0jQxiCzob6gkIbRug+GkFd
a=fingerprint:sha-1 3C:4D:FB:CD:E2:9F:61:AF:F1:6C:7A:FA:BD:42:40:3A:32:21:A7:D2
a=setup:active
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:704753108 cname:pzAUxzKY/moDVSt0
a=ssrc:704753108 msid:XerqqlTg5smV5LsnhQVjU2ECvXHlos2yZUK1 28e3e4ab-3eb1-4cd0-991c-e981777ef2c5
a=ssrc:704753108 mslabel:XerqqlTg5smV5LsnhQVjU2ECvXHlos2yZUK1
a=ssrc:704753108 label:28e3e4ab-3eb1-4cd0-991c-e981777ef2c5
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:0cdtxPKGd5yHc4gg
a=ice-pwd:8Ds/gPCq3z0Dll1kPyqn3g+B
a=fingerprint:sha-1 3C:4D:FB:CD:E2:9F:61:AF:F1:6C:7A:FA:BD:42:40:3A:32:21:A7:D2
a=setup:active
a=mid:1
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
a=ssrc:772369100 cname:pzAUxzKY/moDVSt0
a=ssrc:772369100 msid:XerqqlTg5smV5LsnhQVjU2ECvXHlos2yZUK1 95291d13-24a9-4b61-b2ec-9637ad3e3ddf
a=ssrc:772369100 mslabel:XerqqlTg5smV5LsnhQVjU2ECvXHlos2yZUK1
a=ssrc:772369100 label:95291d13-24a9-4b61-b2ec-9637ad3e3ddf
 lib.jsjac.js:247
[JSJaCJingle] _util_sdp_resolution_payload > Got local video resolution (640x360). lib.jsjac.js:247
[JSJaCJingle] _util_sdp_parse_group > TypeError: Object #<Object> has no method 'exec' lib.jsjac.js:247
[JSJaCJingle] SDP (local:gen)

v=0
o=jappix 1 1 IN IP4 jappix.com
s=6siFjWelHFLUR0vD
t=0 0
m=audio 1 RTP/SAVPF 0 8 13 103 104 105 106 111 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:RRlQ/gD4DYywxv4h
a=ice-pwd:e/0jQxiCzob6gkIbRug+GkFd
a=fingerprint:sha-1 3C:4D:FB:CD:E2:9F:61:AF:F1:6C:7A:FA:BD:42:40:3A:32:21:A7:D2
a=setup:active
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=mid:0
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:105 CN/16000
a=rtpmap:106 CN/32000
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:704753108 cname:pzAUxzKY/moDVSt0
a=ssrc:704753108 msid:XerqqlTg5smV5LsnhQVjU2ECvXHlos2yZUK1 28e3e4ab
a=ssrc:704753108 mslabel:XerqqlTg5smV5LsnhQVjU2ECvXHlos2yZUK1
a=ssrc:704753108 label:28e3e4ab-3eb1-4cd0-991c-e981777ef2c5
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:0cdtxPKGd5yHc4gg
a=ice-pwd:8Ds/gPCq3z0Dll1kPyqn3g+B
a=fingerprint:sha-1 3C:4D:FB:CD:E2:9F:61:AF:F1:6C:7A:FA:BD:42:40:3A:32:21:A7:D2
a=setup:active
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=mid:1
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=fmtp:100 height=360;width=640
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=fmtp:116 height=360;width=640
a=rtpmap:117 ulpfec/90000
a=fmtp:117 height=360;width=640
a=ssrc:772369100 cname:pzAUxzKY/moDVSt0
a=ssrc:772369100 msid:XerqqlTg5smV5LsnhQVjU2ECvXHlos2yZUK1 95291d13
a=ssrc:772369100 mslabel:XerqqlTg5smV5LsnhQVjU2ECvXHlos2yZUK1
a=ssrc:772369100 label:95291d13-24a9-4b61-b2ec-9637ad3e3ddf
 lib.jsjac.js:247
[JSJaCJingle] _peer_got_description > Waiting for local candidates... lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange > (state: checking). lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > onicecandidate > Got initial candidates. lib.jsjac.js:247
[JSJaCJingle] accept > Ready to complete Jingle negotiation. lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] send_session_accept lib.jsjac.js:247
[JSJaCJingle] register_handler lib.jsjac.js:247
[JSJaCJingle] register_handler > Registered handler for id: jj_6siFjWelHFLUR0vD_2 and type: result lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Registered (id: jj_6siFjWelHFLUR0vD_2, status: accepting). lib.jsjac.js:247
[JSJaCJingle] send_session_accept > Sent. lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: 6siFjWelHFLUR0vD). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle > Submitted to custom handler. lib.jsjac.js:247
session_info_success simple_client.js:112
[JSJaCJingle] handle_session_info_success lib.jsjac.js:247
[JSJaCJingle] unregister_handler lib.jsjac.js:247
[JSJaCJingle] unregister_handler > Unregistered handler for id: jj_6siFjWelHFLUR0vD_1 and type: result lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: 6siFjWelHFLUR0vD). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle > Submitted to custom handler. lib.jsjac.js:247
session_accept_success simple_client.js:88
[JSJaCJingle] handle_session_accept_success lib.jsjac.js:247
[JSJaCJingle] unregister_handler lib.jsjac.js:247
[JSJaCJingle] unregister_handler > Unregistered handler for id: jj_6siFjWelHFLUR0vD_2 and type: result lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange > (state: connected). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Cheking (id: jj_6siFjWelHFLUR0vD_1, status: initiated-accepted). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Stanza successful. lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Cheking (id: jj_6siFjWelHFLUR0vD_2, status: accepting-accepted). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Stanza successful.

TypeMismatchError: DOM Exception 17

Steps to reproduce:

  1. Initiate a first video call, everything goes smoothly.
  2. Second video call, I get (on each side):

[JSJaCJingle] _peer_connection_create > Error: TypeMismatchError: DOM Exception 17

Video call does not work with Mozilla Firefox 27 beta

Checked on demo page - https://demo.frenchtouch.pro/valerian.saliou/jsjac-jingle/examples/simple_client.html.
Mozilla Firefox console logs:

"[JSJaCJingle] initiate" lib.jsjac.js:247
"[JSJaCJingle] initiate > New Jingle session with media: video" lib.jsjac.js:247
"session_initiate_pending" simple_client.js:28
"[JSJaCJingle] _peer_get_user_media" lib.jsjac.js:247
"[JSJaCJingle] _peer_get_user_media > Getting user media..." lib.jsjac.js:247
"[JSJaCJingle] _peer_got_user_media_success" lib.jsjac.js:247
"[JSJaCJingle] _peer_got_user_media_success > Got user media." lib.jsjac.js:247
"[JSJaCJingle] _peer_got_user_media_success > Waiting for local video to be loaded..." lib.jsjac.js:247
"[JSJaCJingle] _peer_got_user_media_success > Local video loaded." lib.jsjac.js:247
"[JSJaCJingle] _peer_connection_create" lib.jsjac.js:247
"[JSJaCJingle] _peer_connection_create > Using ICE server at: stun:stun.jappix.com:3478 (1)." lib.jsjac.js:247
"[JSJaCJingle] _peer_connection_create > Getting local description..." lib.jsjac.js:247
"[JSJaCJingle] _peer_connection_create > TypeError: Argument 2 of mozRTCPeerConnection.createOffer is not an object." lib.jsjac.js:247
"[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange" lib.jsjac.js:247
"[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange > (state: new)."

And after first attemp video call, the buttons "Audio call", "Video call" and "Screen Share" are unavailable to next restart browser.

Video call does not work with Google Chrome 33 ( 33.0.1750.117 m)

*** initiator video Chrome 33 ( 33.0.1750.117 m)

event.returnValue is deprecated. Please use the standard event.preventDefault() instead.
[JSJaCJingle] lib:listen > Listening. lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > Discovering available services... lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Service stored (type: stun, host: stun.jappix.com, port: 3478, transport: udp). lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Service stored (type: stun, host: stun.jappix.com, port: 3478, transport: tcp). lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Discovered available services. lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > Ready. lib.jsjac.js:247
[JSJaCJingle] lib:defer > Executing 0 deferred functions... lib.jsjac.js:247
[JSJaCJingle] lib:defer > Done executing deferred functions. lib.jsjac.js:247
[JSJaCJingle] initiate lib.jsjac.js:247
[JSJaCJingle] initiate > New Jingle session with media: video lib.jsjac.js:247
session_initiate_pending simple_client.js:28
[JSJaCJingle] _peer_get_user_media lib.jsjac.js:247
[JSJaCJingle] _peer_get_user_media > Getting user media... lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Got user media. lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Waiting for local video to be loaded... lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Local video loaded. lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > Using ICE server at: stun:stun.jappix.com:3478?transport=tcp (1). lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > Getting local description... lib.jsjac.js:247
[JSJaCJingle] _peer_got_description lib.jsjac.js:247
[JSJaCJingle] _peer_got_description > Got local description. lib.jsjac.js:247
[JSJaCJingle] SDP (local:raw)

v=0
o=- 6542348703200165119 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS QVpFJd73q7kDq0EEcaAJUopfTj5LQV5mxeqM
m=audio 1 RTP/SAVPF 111 103 104 0 8 106 105 13 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:LzoWNeVPNxVpDA9x
a=ice-pwd:S5ThKJnA/QucMAyTkTaVdmP0
a=ice-options:google-ice
a=fingerprint:sha-256 BE:69:D7:29:7F:DA:3E:AB:C3:8A:46:62:CE:35:63:6B:69:21:F5:B1:09:CD:CC:FC:FF:EF:B2:EA:A1:D3:C1:27
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:47GyxBBBbhJ2sArukmwJVB4K/0+JApVPQeN7DLus
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:3500966384 cname:nRoeFGsTOScLBq9E
a=ssrc:3500966384 msid:QVpFJd73q7kDq0EEcaAJUopfTj5LQV5mxeqM 4f4c07eb-fa2f-49d3-bf06-78ac03e4af75
a=ssrc:3500966384 mslabel:QVpFJd73q7kDq0EEcaAJUopfTj5LQV5mxeqM
a=ssrc:3500966384 label:4f4c07eb-fa2f-49d3-bf06-78ac03e4af75
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:LzoWNeVPNxVpDA9x
a=ice-pwd:S5ThKJnA/QucMAyTkTaVdmP0
a=ice-options:google-ice
a=fingerprint:sha-256 BE:69:D7:29:7F:DA:3E:AB:C3:8A:46:62:CE:35:63:6B:69:21:F5:B1:09:CD:CC:FC:FF:EF:B2:EA:A1:D3:C1:27
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:47GyxBBBbhJ2sArukmwJVB4K/0+JApVPQeN7DLus
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
a=ssrc:1255859621 cname:nRoeFGsTOScLBq9E
a=ssrc:1255859621 msid:QVpFJd73q7kDq0EEcaAJUopfTj5LQV5mxeqM adea7a1f-ee91-433d-a4ba-c8564fee7862
a=ssrc:1255859621 mslabel:QVpFJd73q7kDq0EEcaAJUopfTj5LQV5mxeqM
a=ssrc:1255859621 label:adea7a1f-ee91-433d-a4ba-c8564fee7862
 lib.jsjac.js:247
[JSJaCJingle] _util_sdp_resolution_payload > Got local video resolution (352x288). lib.jsjac.js:247
[JSJaCJingle] SDP (local:gen)

v=0
o=jappix 1 1 IN IP4 jappix.com
s=N2kRPo4Pwh88kN5c
t=0 0
a=group:BUNDLE audio video
m=audio 1 RTP/SAVPF 0 8 13 103 104 105 106 111 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:LzoWNeVPNxVpDA9x
a=ice-pwd:S5ThKJnA/QucMAyTkTaVdmP0
a=fingerprint:sha-256 BE:69:D7:29:7F:DA:3E:AB:C3:8A:46:62:CE:35:63:6B:69:21:F5:B1:09:CD:CC:FC:FF:EF:B2:EA:A1:D3:C1:27
a=setup:actpass
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=mid:0
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:47GyxBBBbhJ2sArukmwJVB4K/0+JApVPQeN7DLus
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:105 CN/16000
a=rtpmap:106 CN/32000
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:3500966384 cname:nRoeFGsTOScLBq9E
a=ssrc:3500966384 msid:QVpFJd73q7kDq0EEcaAJUopfTj5LQV5mxeqM 4f4c07eb-fa2f-49d3-bf06-78ac03e4af75
a=ssrc:3500966384 mslabel:QVpFJd73q7kDq0EEcaAJUopfTj5LQV5mxeqM
a=ssrc:3500966384 label:4f4c07eb-fa2f-49d3-bf06-78ac03e4af75
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:LzoWNeVPNxVpDA9x
a=ice-pwd:S5ThKJnA/QucMAyTkTaVdmP0
a=fingerprint:sha-256 BE:69:D7:29:7F:DA:3E:AB:C3:8A:46:62:CE:35:63:6B:69:21:F5:B1:09:CD:CC:FC:FF:EF:B2:EA:A1:D3:C1:27
a=setup:actpass
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=mid:1
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:47GyxBBBbhJ2sArukmwJVB4K/0+JApVPQeN7DLus
a=rtpmap:100 VP8/90000
a=fmtp:100 height=288;width=352
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=fmtp:116 height=288;width=352
a=rtpmap:117 ulpfec/90000
a=fmtp:117 height=288;width=352
a=ssrc:1255859621 cname:nRoeFGsTOScLBq9E
a=ssrc:1255859621 msid:QVpFJd73q7kDq0EEcaAJUopfTj5LQV5mxeqM adea7a1f-ee91-433d-a4ba-c8564fee7862
a=ssrc:1255859621 mslabel:QVpFJd73q7kDq0EEcaAJUopfTj5LQV5mxeqM
a=ssrc:1255859621 label:adea7a1f-ee91-433d-a4ba-c8564fee7862
 lib.jsjac.js:247
[JSJaCJingle] _peer_got_description > Waiting for local candidates... lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > onicecandidate > Got initial candidates. lib.jsjac.js:247
[JSJaCJingle] initiate > Ready to begin Jingle negotiation. lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] send_session_initiate lib.jsjac.js:247
[JSJaCJingle] register_handler lib.jsjac.js:247
[JSJaCJingle] register_handler > Registered handler for id: jj_N2kRPo4Pwh88kN5c_1 and type: result lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Registered (id: jj_N2kRPo4Pwh88kN5c_1, status: initiating). lib.jsjac.js:247
[JSJaCJingle] send_session_initiate > Sent. lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: N2kRPo4Pwh88kN5c). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle > Submitted to custom handler. lib.jsjac.js:247
session_initiate_success simple_client.js:38
[JSJaCJingle] handle_session_initiate_success lib.jsjac.js:247
[JSJaCJingle] unregister_handler lib.jsjac.js:247
[JSJaCJingle] unregister_handler > Unregistered handler for id: jj_N2kRPo4Pwh88kN5c_1 and type: result lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: N2kRPo4Pwh88kN5c). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle_session_info lib.jsjac.js:247
session_info_request simple_client.js:120
[JSJaCJingle] handle_session_info_request lib.jsjac.js:247
[JSJaCJingle] handle_session_info_request > (name: ringing). lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
session_info_success simple_client.js:112
[JSJaCJingle] handle_session_info_success lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: N2kRPo4Pwh88kN5c). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle_session_accept lib.jsjac.js:247
session_accept_request simple_client.js:108
[JSJaCJingle] handle_session_accept_request lib.jsjac.js:247
session_accept_success simple_client.js:88
[JSJaCJingle] handle_session_accept_success lib.jsjac.js:247
[JSJaCJingle] SDP (remote)

v=0
o=jappix 1 1 IN IP4 jappix.com
s=N2kRPo4Pwh88kN5c
t=0 0
m=audio 1 RTP/SAVPF 0 8 13 103 104 105 106 111 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:I+eA2FT249+QJ33J
a=ice-pwd:OAOFtyQzDZE0sqHCEiDPElFt
a=fingerprint:sha-256 A2:81:8F:CB:F4:42:2B:7B:CA:C6:09:12:62:D1:31:16:24:E2:78:74:2C:0A:82:B1:46:BF:D9:5E:8B:8A:ED:51
a=setup:active
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=mid:0
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:105 CN/16000
a=rtpmap:106 CN/32000
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=candidate:3566256226 1 udp 2113937151 192.168.4.113 51589 typ host generation 0
a=candidate:2584951954 1 tcp 1509957375 192.168.4.113 0 typ host generation 0
a=candidate:1440270038 1 udp 1845501695 85.238.100.162 28266 typ srflx raddr 192.168.4.113 rport 51589 generation 0
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:S8VPQjDIxxwVf3ag
a=ice-pwd:WdhQXtbIXaVaWmp+ndiOWQuJ
a=fingerprint:sha-256 A2:81:8F:CB:F4:42:2B:7B:CA:C6:09:12:62:D1:31:16:24:E2:78:74:2C:0A:82:B1:46:BF:D9:5E:8B:8A:ED:51
a=setup:active
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=mid:1
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=fmtp:100 height=360;width=640
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=fmtp:116 height=360;width=640
a=rtpmap:117 ulpfec/90000
a=fmtp:117 height=360;width=640
a=candidate:3566256226 1 udp 2113937151 192.168.4.113 51590 typ host generation 0
a=candidate:1440270038 1 udp 1845501695 85.238.100.162 47112 typ srflx raddr 192.168.4.113 rport 51590 generation 0
a=candidate:2584951954 1 tcp 1509957375 192.168.4.113 0 typ host generation 0
 lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > onaddstream lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange > (state: checking). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Cheking (id: jj_N2kRPo4Pwh88kN5c_1, status: initiating-accepted). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Stanza successful. lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: N2kRPo4Pwh88kN5c). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle_session_terminate lib.jsjac.js:247
session_terminate_request simple_client.js:161
[JSJaCJingle] handle_session_terminate_request lib.jsjac.js:247
session_terminate_success simple_client.js:133
[JSJaCJingle] handle_session_terminate_success lib.jsjac.js:247
[JSJaCJingle] _peer_stop lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] handle_session_terminate_request > (reason: failed-transport). lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange > (state: closed). 

*** receiver video Chrome 33 ( 33.0.1750.117 m)

event.returnValue is deprecated. Please use the standard event.preventDefault() instead.
[JSJaCJingle] lib:listen > Listening. lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > Discovering available services... lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Service stored (type: stun, host: stun.jappix.com, port: 3478, transport: udp). lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Service stored (type: stun, host: stun.jappix.com, port: 3478, transport: tcp). lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > handle > Discovered available services. lib.jsjac.js:247
[JSJaCJingle] lib:extdisco > Ready. lib.jsjac.js:247
[JSJaCJingle] lib:defer > Executing 0 deferred functions... lib.jsjac.js:247
[JSJaCJingle] lib:defer > Done executing deferred functions. lib.jsjac.js:247
[JSJaCJingle] lib:route > New Jingle session (sid: N2kRPo4Pwh88kN5c). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle_session_initiate lib.jsjac.js:247
session_initiate_request simple_client.js:72
[JSJaCJingle] handle_session_initiate_request lib.jsjac.js:247
session_initiate_success simple_client.js:38
[JSJaCJingle] handle_session_initiate_success lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] info lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] send_session_info lib.jsjac.js:247
[JSJaCJingle] register_handler lib.jsjac.js:247
[JSJaCJingle] register_handler > Registered handler for id: jj_N2kRPo4Pwh88kN5c_1 and type: result lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Registered (id: jj_N2kRPo4Pwh88kN5c_1, status: initiated). lib.jsjac.js:247
[JSJaCJingle] send_session_info > Sent (name: ringing). lib.jsjac.js:247
[JSJaCJingle] accept lib.jsjac.js:247
[JSJaCJingle] accept > New Jingle session with media: video lib.jsjac.js:247
session_accept_pending simple_client.js:76
[JSJaCJingle] _peer_get_user_media lib.jsjac.js:247
[JSJaCJingle] _peer_get_user_media > Getting user media... lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: N2kRPo4Pwh88kN5c). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle > Submitted to custom handler. lib.jsjac.js:247
session_info_success simple_client.js:112
[JSJaCJingle] handle_session_info_success lib.jsjac.js:247
[JSJaCJingle] unregister_handler lib.jsjac.js:247
[JSJaCJingle] unregister_handler > Unregistered handler for id: jj_N2kRPo4Pwh88kN5c_1 and type: result lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Got user media. lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Waiting for local video to be loaded... lib.jsjac.js:247
[JSJaCJingle] _peer_got_user_media_success > Local video loaded. lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > Using ICE server at: stun:stun.jappix.com:3478?transport=tcp (1). lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > Getting local description... lib.jsjac.js:247
[JSJaCJingle] SDP (remote)

v=0
o=jappix 1 1 IN IP4 jappix.com
s=N2kRPo4Pwh88kN5c
t=0 0
a=group:BUNDLE audio video
m=audio 1 RTP/SAVPF 0 8 13 103 104 105 106 111 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:LzoWNeVPNxVpDA9x
a=ice-pwd:S5ThKJnA/QucMAyTkTaVdmP0
a=fingerprint:sha-256 BE:69:D7:29:7F:DA:3E:AB:C3:8A:46:62:CE:35:63:6B:69:21:F5:B1:09:CD:CC:FC:FF:EF:B2:EA:A1:D3:C1:27
a=setup:actpass
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=mid:0
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:47GyxBBBbhJ2sArukmwJVB4K/0+JApVPQeN7DLus
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:105 CN/16000
a=rtpmap:106 CN/32000
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=candidate:2469444274 1 udp 2113937151 192.168.4.123 65430 typ host generation 0
a=candidate:2469444274 2 udp 2113937151 192.168.4.123 65430 typ host generation 0
a=candidate:309902342 1 udp 1845501695 85.238.100.162 32797 typ srflx raddr 192.168.4.123 rport 65430 generation 0
a=candidate:309902342 2 udp 1845501695 85.238.100.162 32797 typ srflx raddr 192.168.4.123 rport 65430 generation 0
a=candidate:3719513666 1 tcp 1509957375 192.168.4.123 0 typ host generation 0
a=candidate:3719513666 2 tcp 1509957375 192.168.4.123 0 typ host generation 0
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:LzoWNeVPNxVpDA9x
a=ice-pwd:S5ThKJnA/QucMAyTkTaVdmP0
a=fingerprint:sha-256 BE:69:D7:29:7F:DA:3E:AB:C3:8A:46:62:CE:35:63:6B:69:21:F5:B1:09:CD:CC:FC:FF:EF:B2:EA:A1:D3:C1:27
a=setup:actpass
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=mid:1
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:47GyxBBBbhJ2sArukmwJVB4K/0+JApVPQeN7DLus
a=rtpmap:100 VP8/90000
a=fmtp:100 height=288;width=352
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=fmtp:116 height=288;width=352
a=rtpmap:117 ulpfec/90000
a=fmtp:117 height=288;width=352
a=candidate:2469444274 1 udp 2113937151 192.168.4.123 65430 typ host generation 0
a=candidate:2469444274 2 udp 2113937151 192.168.4.123 65430 typ host generation 0
a=candidate:309902342 1 udp 1845501695 85.238.100.162 32797 typ srflx raddr 192.168.4.123 rport 65430 generation 0
a=candidate:309902342 2 udp 1845501695 85.238.100.162 32797 typ srflx raddr 192.168.4.123 rport 65430 generation 0
a=candidate:3719513666 1 tcp 1509957375 192.168.4.123 0 typ host generation 0
a=candidate:3719513666 2 tcp 1509957375 192.168.4.123 0 typ host generation 0
 lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > onaddstream lib.jsjac.js:247
[JSJaCJingle] _peer_got_description lib.jsjac.js:247
[JSJaCJingle] _peer_got_description > Got local description. lib.jsjac.js:247
[JSJaCJingle] SDP (local:raw)

v=0
o=- 2883429942314238466 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS 6anuc2Ki5jNrGELFvVWhopxdV0Se2rih5xQD
m=audio 1 RTP/SAVPF 111 103 104 0 8 106 105 13 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:I+eA2FT249+QJ33J
a=ice-pwd:OAOFtyQzDZE0sqHCEiDPElFt
a=fingerprint:sha-256 A2:81:8F:CB:F4:42:2B:7B:CA:C6:09:12:62:D1:31:16:24:E2:78:74:2C:0A:82:B1:46:BF:D9:5E:8B:8A:ED:51
a=setup:active
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:650241913 cname:J8izIyr5ugjqeuqH
a=ssrc:650241913 msid:6anuc2Ki5jNrGELFvVWhopxdV0Se2rih5xQD b0363be2-2bb3-4da6-b0f4-acc9f87b7b1c
a=ssrc:650241913 mslabel:6anuc2Ki5jNrGELFvVWhopxdV0Se2rih5xQD
a=ssrc:650241913 label:b0363be2-2bb3-4da6-b0f4-acc9f87b7b1c
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:S8VPQjDIxxwVf3ag
a=ice-pwd:WdhQXtbIXaVaWmp+ndiOWQuJ
a=fingerprint:sha-256 A2:81:8F:CB:F4:42:2B:7B:CA:C6:09:12:62:D1:31:16:24:E2:78:74:2C:0A:82:B1:46:BF:D9:5E:8B:8A:ED:51
a=setup:active
a=mid:1
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
a=ssrc:3233659077 cname:J8izIyr5ugjqeuqH
a=ssrc:3233659077 msid:6anuc2Ki5jNrGELFvVWhopxdV0Se2rih5xQD 5cdf7ce9-22c7-4d39-8aff-c221ef858e00
a=ssrc:3233659077 mslabel:6anuc2Ki5jNrGELFvVWhopxdV0Se2rih5xQD
a=ssrc:3233659077 label:5cdf7ce9-22c7-4d39-8aff-c221ef858e00
 lib.jsjac.js:247
[JSJaCJingle] _util_sdp_resolution_payload > Got local video resolution (640x360). lib.jsjac.js:247
[JSJaCJingle] SDP (local:gen)

v=0
o=jappix 1 1 IN IP4 jappix.com
s=N2kRPo4Pwh88kN5c
t=0 0
m=audio 1 RTP/SAVPF 0 8 13 103 104 105 106 111 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:I+eA2FT249+QJ33J
a=ice-pwd:OAOFtyQzDZE0sqHCEiDPElFt
a=fingerprint:sha-256 A2:81:8F:CB:F4:42:2B:7B:CA:C6:09:12:62:D1:31:16:24:E2:78:74:2C:0A:82:B1:46:BF:D9:5E:8B:8A:ED:51
a=setup:active
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=mid:0
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:105 CN/16000
a=rtpmap:106 CN/32000
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:650241913 cname:J8izIyr5ugjqeuqH
a=ssrc:650241913 msid:6anuc2Ki5jNrGELFvVWhopxdV0Se2rih5xQD b0363be2-2bb3-4da6-b0f4-acc9f87b7b1c
a=ssrc:650241913 mslabel:6anuc2Ki5jNrGELFvVWhopxdV0Se2rih5xQD
a=ssrc:650241913 label:b0363be2-2bb3-4da6-b0f4-acc9f87b7b1c
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:S8VPQjDIxxwVf3ag
a=ice-pwd:WdhQXtbIXaVaWmp+ndiOWQuJ
a=fingerprint:sha-256 A2:81:8F:CB:F4:42:2B:7B:CA:C6:09:12:62:D1:31:16:24:E2:78:74:2C:0A:82:B1:46:BF:D9:5E:8B:8A:ED:51
a=setup:active
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=mid:1
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=fmtp:100 height=360;width=640
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=fmtp:116 height=360;width=640
a=rtpmap:117 ulpfec/90000
a=fmtp:117 height=360;width=640
a=ssrc:3233659077 cname:J8izIyr5ugjqeuqH
a=ssrc:3233659077 msid:6anuc2Ki5jNrGELFvVWhopxdV0Se2rih5xQD 5cdf7ce9-22c7-4d39-8aff-c221ef858e00
a=ssrc:3233659077 mslabel:6anuc2Ki5jNrGELFvVWhopxdV0Se2rih5xQD
a=ssrc:3233659077 label:5cdf7ce9-22c7-4d39-8aff-c221ef858e00
 lib.jsjac.js:247
[JSJaCJingle] _peer_got_description > Waiting for local candidates... lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange > (state: checking). lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > onicecandidate > Got initial candidates. lib.jsjac.js:247
[JSJaCJingle] accept > Ready to complete Jingle negotiation. lib.jsjac.js:247
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] send_session_accept lib.jsjac.js:247
[JSJaCJingle] register_handler lib.jsjac.js:247
[JSJaCJingle] register_handler > Registered handler for id: jj_N2kRPo4Pwh88kN5c_2 and type: result lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Registered (id: jj_N2kRPo4Pwh88kN5c_2, status: accepting). lib.jsjac.js:247
[JSJaCJingle] send_session_accept > Sent. lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: N2kRPo4Pwh88kN5c). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle > Submitted to custom handler. lib.jsjac.js:247
session_accept_success simple_client.js:88
[JSJaCJingle] handle_session_accept_success lib.jsjac.js:247
[JSJaCJingle] unregister_handler lib.jsjac.js:247
[JSJaCJingle] unregister_handler > Unregistered handler for id: jj_N2kRPo4Pwh88kN5c_2 and type: result lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Cheking (id: jj_N2kRPo4Pwh88kN5c_1, status: initiated-accepted). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Stanza successful. lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Cheking (id: jj_N2kRPo4Pwh88kN5c_2, status: accepting-accepted). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Stanza successful. lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Peer timeout. lib.jsjac.js:247
[JSJaCJingle] terminate lib.jsjac.js:247
session_terminate_pending simple_client.js:124
[JSJaCJingle] send lib.jsjac.js:247
[JSJaCJingle] send_session_terminate lib.jsjac.js:247
[JSJaCJingle] register_handler lib.jsjac.js:247
[JSJaCJingle] register_handler > Registered handler for id: jj_N2kRPo4Pwh88kN5c_3 and type: result lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Registered (id: jj_N2kRPo4Pwh88kN5c_3, status: terminating). lib.jsjac.js:247
[JSJaCJingle] send_session_terminate > Sent (reason: failed-transport). lib.jsjac.js:247
[JSJaCJingle] lib:route > Routed to Jingle session (sid: N2kRPo4Pwh88kN5c). lib.jsjac.js:247
[JSJaCJingle] handle lib.jsjac.js:247
[JSJaCJingle] handle > Submitted to custom handler. lib.jsjac.js:247
session_terminate_success simple_client.js:133
[JSJaCJingle] handle_session_terminate_success lib.jsjac.js:247
[JSJaCJingle] _peer_stop lib.jsjac.js:247
[JSJaCJingle] unregister_handler lib.jsjac.js:247
[JSJaCJingle] unregister_handler > Unregistered handler for id: jj_N2kRPo4Pwh88kN5c_3 and type: result lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange lib.jsjac.js:247
[JSJaCJingle] _peer_connection_create > oniceconnectionstatechange > (state: closed). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Cheking (id: jj_N2kRPo4Pwh88kN5c_3, status: terminating-terminated). lib.jsjac.js:247
[JSJaCJingle] util_stanza_timeout > Stanza successful. 

Video call does not work with Google Chrome 31 beta

Hi
please help with a problem

On the side that receives a video call
function setLocalDescription returned the error "SetLocalDescription failed: Failed to push down answer transport description."

When disabled DtlsSrtpKeyAgreement began working but does not work in Firefox

XEP-0166: transport-*

Ability to send/handle both:

  • transport-accept
  • transport-info
  • transport-reject
  • transport-replace

Basically, a new transport is sent to the other party as 'transport-info' when it gets new data from onicecandidate RTCPeerConnection API.

Then, handle a new transport negotiation, accept or reject the given transport(s).

Firefox audio + video calls not working (anymore)

Seems that JSJaCJingle.js is unable to establish an audio-only call in FF 22 (latest stable shipped). Video calls are working fine (this is no longer true). Video calls are also broken as of FF 34 (untested on lower versions).

Weird, since audio-only calls were the only ones to work first while debugging for FF.

Error is not very explicit: SDP Error (when receiving remote SDP on caller end).

in Chrome 31 is still the video does not work

in Chrome 31 is still the video does not work

test result

Tested video call at JSJaCJingle.js Demo page
Chrome 30 <-> Chrome 30: ok
Firefox 25 <-> Firefox 25: ok
Firefox 25 <-> Chrome 30: ok
Chrome 30 <-> Chrome 31: not work
Chrome 31 <-> Chrome 31: not work
Firefox 25 <-> Chrome 31: not work

Next week will be the stable Chrome 31

fallback support

currently jsjac is using rtp over webrtc. Are there any guidelines for fallback support to some flash client for rtp.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.