webRTC support for Internet Explorer and Safari desktop Browsers

2,221 views
Skip to first unread message

Alexandre GOUAILLARD

unread,
May 12, 2014, 9:19:52 AM5/12/14
to discuss...@googlegroups.com
For free, and for all.

Enjoy.

http://bit.ly/1lnlEIK

--
Alex. Gouaillard, PhD, PhD, MBA
------------------------------------------------------------------------------------
CTO - Temasys Communications, S'pore / Mountain View
President - CoSMo Software, Cambridge, MA
------------------------------------------------------------------------------------

Kaiduan Xie

unread,
May 12, 2014, 9:43:39 AM5/12/14
to discuss...@googlegroups.com
It is very cool!

Congratulations Alexandre and your team!

/Kaiduan


--

---
You received this message because you are subscribed to the Google Groups "discuss-webrtc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrt...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

alexandr...@withings.com

unread,
May 12, 2014, 9:52:33 AM5/12/14
to discuss...@googlegroups.com
Congratulations!! On my way to test it right away!

Philipp Hancke

unread,
May 12, 2014, 9:53:32 AM5/12/14
to discuss...@googlegroups.com
is this based on the webrtc.org code and wrapping the normal getusermedia and rtcpeerconnection apis?

Alexandre GOUAILLARD

unread,
May 12, 2014, 9:56:44 AM5/12/14
to discuss...@googlegroups.com
yes, the core is the "reference" code, and yes, you get the standard API as much as plugins API allows that. Adapter.js shows how to integrate it, and the google samples and apprtc modified source code are provided for illustration purpose.
https://github.com/TemasysCommunications/Google-WebRTC-Samples

it should enable anybody with existing website to support IE and safari.

feedback is welcome :-)

have fun.

Alex:
you're right for adapter.js. AFAIK it's BSD originally, and our aditions to it should be treated as under BSD as well.


On Mon, May 12, 2014 at 9:53 PM, Philipp Hancke <philipp...@googlemail.com> wrote:
is this based on the webrtc.org code and wrapping the normal getusermedia and rtcpeerconnection apis?

--

---
You received this message because you are subscribed to the Google Groups "discuss-webrtc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrt...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Takahiro Ichihashi

unread,
May 12, 2014, 10:01:20 AM5/12/14
to discuss...@googlegroups.com
wow. didn't expect this :)
we should try.. thanks alot for the hard work

Lorenzo Miniero

unread,
May 12, 2014, 10:18:42 AM5/12/14
to discuss...@googlegroups.com
Really nice effort indeed, congratulations!
I'll give it a try as soon as I have some time to devote to it.

Lorenzo

SProgrammer

unread,
May 13, 2014, 6:42:47 PM5/13/14
to discuss...@googlegroups.com
+1000000 - Very appreciating - Heads off and Thumbs up. This is a great kicking finally those lazy corrupted / monopoly browsers IE, Safari. :)

ravi...@turtleyogi.com

unread,
May 14, 2014, 3:58:32 AM5/14/14
to discuss...@googlegroups.com
I tried and it works :) Awesome.
Couple of questions,

1) Can we generate SDP with SDES rather than DTLS. On chrome I can do this,
    var pc_constraints = {"optional":
                        [  
                            {'DtlsSrtpKeyAgreement': 'false'},
                            {'googEnableSdesKeyAgreement': 'true'}
                        ] 
                     };
     Is there any special flags or will it be supported coming release?

2) peerConnection.localDescription.sdp will give sdp with a=candidate lines after onIceCandidate call.
    Do we have any js calls to get SDP with a=candidates?
Thanks again.

Richard Screene

unread,
May 14, 2014, 10:45:54 AM5/14/14
to discuss...@googlegroups.com
Has anyone got this working on Safari?  When I try it I'm getting:
TypeError: 'undefined' is not a function (evaluating 'plugin().getUserMedia(constraints, successCallback, failureCallback)')

It looks like the the TemInitPlugin0 function is never called.  Although on pageload I get a pop-up asking me to trust the TemWebRTCPlugin.

I'm using Safari 6.1 (7537.71) on Mac OSX 10.7.5

It would be good to know if its just me that's having problems!  (It's looking good on IE9 BTW!)





SProgrammer

unread,
May 14, 2014, 11:01:50 AM5/14/14
to discuss...@googlegroups.com

FYI - YES - same problem in OSX 10.9.2 failing.

For me same 1) installed the plugin 2) open safari 3) went to the github samples face tracking and its failing see screenshot below:


Alexandre GOUAILLARD

unread,
May 14, 2014, 11:37:42 AM5/14/14
to discuss...@googlegroups.com, webrtc...@temasys.com.sg
Dear Sprogrammer and Richard,

thanks for the feedback. You can send all feedback directly at webrtc...@temasys.com.sg
For easier exchange, I CC'ed it to this thread.

Bistri is running the plugin in production as we speak (1M+ minutes a month), and several others have reported success (jsSIP, …). It should be ok in most of the cases.

Installing the plugin is not enough. The webpages need to be made aware of it and leverage it. A little bit like flash, the webpage need to explicitly look for flash to use it, it's not enough to install a flash plugin.
You can see more informations on the plugin page, from which you should have downloaded the plugin including subpage:

SProgrammer, from screenshot, it looks like you are trying to run the unmodified examples from the original google's github page, while we already went ahead and provided a plugin-aware version of them. Here again, I will have to suggest that you I encourage you to Read The Fantastic Manual (RTFM):

Google's sample upgrades

Icon

A fork of Google's samples for WebRTC contains useful examples of how to integrate the plugin with a website:

https://github.com/TemasysCommunications/Google-WebRTC-Samples/blob/master/README.md


Richard, on which website do you get this error? Do you get it if you try with the examples we provided above?

Thanks again for the feedback,

Regards,


Alex.


--

---
You received this message because you are subscribed to the Google Groups "discuss-webrtc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrt...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Greg McGee

unread,
May 14, 2014, 3:43:33 PM5/14/14
to discuss...@googlegroups.com
Hi, Alex.

This is exciting work- thank you for sharing it.

How long do you think it will take for all of the Google WebRTC Samples to be updated to work with your plugin?

Also, are there any plans on releasing the source code for the plugin?

Thanks!

-Greg

Shane Newberg

unread,
May 14, 2014, 4:24:48 PM5/14/14
to discuss...@googlegroups.com
Great work! Glad to see forward progress.

We have tried these combinations with these results,
Windows 7, Internet Explorer 10. No observed problems connecting to EasyRTC demo's (once modified for the plugin call.
Windows 7, Safari 5.1.7 Sends video and audio, does not receive video or audio.
MAC 10.9.2 Safari 7.0.3 Sends and receives video and video, 1/3 connection attempts fail, and requires page refresh.

The other end of all of these connection attempts was MAC 10.9.2 Firefox 29.0.1

All in all this is very promising as we were able to get some of the most common OS/Browser platforms to work.

Thank you!

Shane



On Mon, May 12, 2014 at 9:19 AM, Alexandre GOUAILLARD <agoua...@gmail.com> wrote:

Alexandre GOUAILLARD

unread,
May 14, 2014, 8:11:20 PM5/14/14
to discuss...@googlegroups.com
1) Can we generate SDP with SDES rather than DTLS. On chrome I can do this,
    var pc_constraints = {"optional":
                        [  
                            {'DtlsSrtpKeyAgreement': 'false'},
                            {'googEnableSdesKeyAgreement': 'true'}
                        ] 
                     };
     Is there any special flags or will it be supported coming release?


it should work like chrome. Note that SDES is being phased out, so you shouldn't expect to have it around for too long.
 
2) peerConnection.localDescription.sdp will give sdp with a=candidate lines after onIceCandidate call.
    Do we have any js calls to get SDP with a=candidates?

  • Hum, I'm not sure I understand your question. Our implementation tries to use trickle ice every time possible, so offer/answer which end up in localdsecription and ice candidate are separated.

    What are you expecting, and what are you seeing instead?

Alexandre GOUAILLARD

unread,
May 14, 2014, 8:14:05 PM5/14/14
to discuss...@googlegroups.com
This is exciting work- thank you for sharing it.

you re welcome.
 
How long do you think it will take for all of the Google WebRTC Samples to be updated to work with your plugin?

the one we are hosting will be updated quite quickly, but we are giving the priority to data channel and feedback from the devs right now. I do not expect it to be more than a month. 

Also, are there any plans on releasing the source code for the plugin?
see: http://webrtchacks.com/generic-ie-safari-plugin/ for a long answer to that.

Alexandre GOUAILLARD

unread,
May 14, 2014, 8:17:30 PM5/14/14
to discuss...@googlegroups.com
We have tried these combinations with these results, 
Windows 7, Internet Explorer 10. No observed problems connecting to EasyRTC demo's (once modified for the plugin call.
 
Windows 7, Safari 5.1.7 Sends video and audio, does not receive video or audio.
 
MAC 10.9.2 Safari 7.0.3 Sends and receives video and video, 1/3 connection attempts fail, and requires page refresh.

thanks for the feedback.

This seems to be in par with our support matrix:

safari on mac should be working better than that though. If you don t mind, could you please send error messages and other infos to webrtc...@temasys.com.sg for us to investigate.
 

The other end of all of these connection attempts was MAC 10.9.2 Firefox 29.0.1

and if you try that against chrome on mac, to have a basis for comparison, how does it work? 


All in all this is very promising as we were able to get some of the most common OS/Browser platforms to work.

Thank you!

 
you're welcome. 

pablo platt

unread,
May 15, 2014, 1:50:35 AM5/15/14
to discuss...@googlegroups.com
How does upgrading the plugin works?
Is it automatic?


Alexandre GOUAILLARD

unread,
May 15, 2014, 2:50:00 AM5/15/14
to discuss...@googlegroups.com
not yet unfortunately.
We are working on a way to detect when a new version is available and prompt the user.
We hoped to be able to deliver this week, but it's likely to be delayed to next week as we are helping a lot of website and vendors to integrate right now.

ravi...@turtleyogi.com

unread,
May 15, 2014, 4:23:58 AM5/15/14
to discuss...@googlegroups.com
Thanks for replay.
Point 2 explains what I was expecting.

1) adapter.js doesn't define deleteMediaStream, it has attachMediaStream and 
reattachMediaStream.
How do I release the camera that I have captured via getUserMedia.
In chome and firefox doing,
localStream.stop() and localStream = null does release camera.
I did peerconnection.close()
But I still see camera being active in safari.
Only closing the tab or refresh tab releases camera.

2) Plugin don't support peerConnection.localDescription.sdp and also "end of ICE candidate" is not notified.
How do I get SDP with a=candidate line.
STEPS
------------------
i) do createOffer
After peerConnection.CreateOffer(onSuccess,);
function onSuccess(sessionDescription) {
      console.log(sessionDescription.sdp);
}

onSuccess function will print,
"
v=0
o=- 1138137289233228465 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS mediaStream
m=audio 1 RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 127 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:g1voD1LDPi09Frrx
a=ice-pwd:5TeKmCQTeJ30sBbsFbG4kxX5
a=ice-options:google-ice
a=fingerprint:sha-1 B0:ED:0E:A3:E8:6B:86:07:E6:23:C7:20:7F:DD:D5:14:52:1A:33:44
a=setup:actpass
a=mid:audio
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:9 G722/16000
a=rtpmap:102 ILBC/8000
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:127 red/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:2285104624 cname:8BnfVb2iSEud9sed
a=ssrc:2285104624 msid:mediaStream microphone
a=ssrc:2285104624 mslabel:mediaStream
a=ssrc:2285104624 label:microphone
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:g1voD1LDPi09Frrx
a=ice-pwd:5TeKmCQTeJ30sBbsFbG4kxX5
a=ice-options:google-ice
a=fingerprint:sha-1 B0:ED:0E:A3:E8:6B:86:07:E6:23:C7:20:7F:DD:D5:14:52:1A:33:44
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
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 nack pli
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
a=ssrc:751626075 cname:8BnfVb2iSEud9sed
a=ssrc:751626075 msid:mediaStream Video
a=ssrc:751626075 mslabel:mediaStream
a=ssrc:751626075 label:Video "

ii) when onIceCandidate function is called.

function onIceCandidate(event){
     if(event.candidate){
          console.log(peerconnection.localDescription.sdp);
     } else {
          console.log("End of ICE candidates");
     }
}

chrome will print,
o=- 1138137289233228465 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS mediaStream
m=audio 1 RTP/SAVPF 111 103 104 9 102 0 8 127 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:g1voD1LDPi09Frrx
a=ice-pwd:5TeKmCQTeJ30sBbsFbG4kxX5
a=ice-options:google-ice
a=fingerprint:sha-1 B0:ED:0E:A3:E8:6B:86:07:E6:23:C7:20:7F:DD:D5:14:52:1A:33:44
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=rtcp-mux
a=rtcp-fb:111 nack
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/16000
a=rtpmap:102 ILBC/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:127 red/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
a=ssrc:2285104624 cname:8BnfVb2iSEud9sed
a=ssrc:2285104624 msid:mediaStream microphone
a=ssrc:2285104624 mslabel:mediaStream
a=candidate:2654093695 1 udp 2122194687 192.168.11.9 58131 typ host generation 0
a=candidate:2654093695 2 udp 2122194687 192.168.11.9 58131 typ host generation 0
a=candidate:3501309327 1 tcp 1518214911 192.168.11.9 54405 typ host generation 0
a=candidate:3501309327 2 tcp 1518214911 192.168.11.9 54405 typ host generation 0
a=ssrc:2285104624 label:microphone
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:g1voD1LDPi09Frrx
a=ice-pwd:5TeKmCQTeJ30sBbsFbG4kxX5
a=ice-options:google-ice
a=fingerprint:sha-1 B0:ED:0E:A3:E8:6B:86:07:E6:23:C7:20:7F:DD:D5:14:52:1A:33:44
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
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 nack pli
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
a=ssrc:751626075 cname:8BnfVb2iSEud9sed
a=ssrc:751626075 msid:mediaStream Video
a=ssrc:751626075 mslabel:mediaStream
a=ssrc:751626075 label:Video
a=candidate:2654093695 1 udp 2122194687 192.168.11.9 58131 typ host generation 0
a=candidate:2654093695 2 udp 2122194687 192.168.11.9 58131 typ host generation 0
a=candidate:3501309327 1 tcp 1518214911 192.168.11.9 54405 typ host generation 0
a=candidate:3501309327 2 tcp 1518214911 192.168.11.9 54405 typ host generation 0

plugin doesn't provide peerconnection.localDescription.sdp
or how do I get sdp with a=candidate line and also end of ice candidates not notified.

Alexandre GOUAILLARD

unread,
May 15, 2014, 5:02:46 AM5/15/14
to discuss...@googlegroups.com
hi ravindra,

Thanks for the feedback.

Please see some answers below.

1) adapter.js doesn't define deleteMediaStream, it has attachMediaStream and 
reattachMediaStream.

deleteMediaStream is neither in the original adapter.js nor in the specs of webRTC. It is normal that it is not defined.

attach and reattach media stream are functions defined only in adapter.js to help interoperability between firefox and chrome (originally) by smoothing out the different ways those two browsers have to tell an <audio> or <video> element what the source should be.

What are you trying to do?

How do I release the camera that I have captured via getUserMedia.
In chome and firefox doing,
localStream.stop() and localStream = null does release camera.

Then supposedly you should be able to do the same thing and achieve the same result. Did you try to do that? What are you experiencing?
 
I did peerconnection.close()
But I still see camera being active in safari.
Only closing the tab or refresh tab releases camera.

Is it consistent with what happen in chrome without plugin?
 

2) Plugin don't support peerConnection.localDescription.sdp and also "end of ICE candidate" is not notified.

Yes, this has been reported yesterday and we are working on it. Both remote and local descriptions have been fixed already. Sending a null candidate when gathering is complete is a little bit more challenging, as the gathering of the candidates is done asynchronously. Give us a few days.

How do I get SDP with a=candidate line.
or how do I get sdp with a=candidate line and also end of ice candidates not notified.


Well, I'm going to check, but in any case, do you have any reason not to do trickle ICE (in which case, the candidates are not in the sdp.)?

Iñaki Baz Castillo

unread,
May 15, 2014, 5:15:28 AM5/15/14
to discuss...@googlegroups.com
2014-05-15 11:02 GMT+02:00 Alexandre GOUAILLARD <agoua...@gmail.com>:
> do you have any reason not to do trickle ICE (in which case, the candidates
> are not in the sdp.)?

SIP :)


--
Iñaki Baz Castillo
<i...@aliax.net>

Alex Gouaillard

unread,
May 15, 2014, 5:30:50 AM5/15/14
to discuss...@googlegroups.com, discuss...@googlegroups.com
I should have asked do you have any "good" reason :-)

Ok, fair enough. I ll investigate.

Sent from my iPhone

Philipp Hancke

unread,
May 15, 2014, 5:32:42 AM5/15/14
to discuss...@googlegroups.com
Sending a null candidate when gathering is complete is a little bit more challenging, as the gathering of the candidates is done asynchronously. Give us a few days.

IIRC you need to manually trigger that when a OnIceGatheringChange to kIceGatheringComplete occurs in PeerConnectionObserver, there is no null candidate passed to the c++ OnIceCandidate

Richard Screene

unread,
May 15, 2014, 11:34:29 AM5/15/14
to discuss...@googlegroups.com

Has anyone got this working on Safari?  When I try it I'm getting:
TypeError: 'undefined' is not a function (evaluating 'plugin().getUserMedia(constraints, successCallback, failureCallback)')

Sorry Alex.  My bad!  It works well on OSX 10.9.  I should've read the compatibility matrix!!

Are there any plans to support screen sharing using the plugin?

Thanks,
  Richard

Alexandre GOUAILLARD

unread,
May 15, 2014, 12:20:07 PM5/15/14
to discuss...@googlegroups.com
hi richard,

no worries, we will update it and leave a message here when safari on windows will be working. The main engineer is out of town until tuesday though.

Hum, adding features beyond what is in the spec was tempting (screen sharing, h.264, ….) but we decided against it. Screensharing has security implications, and until it makes its way in the standard in a way everybody agrees to (or until the browser vendors implement the feature) we should snot include it.

alex.


--

---
You received this message because you are subscribed to the Google Groups "discuss-webrtc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrt...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Alexandre GOUAILLARD

unread,
May 15, 2014, 12:21:07 PM5/15/14
to discuss...@googlegroups.com, Jo Hache
thanks philip,

we were thinking about doing something along this line (or more complicated), but you nailed it for us.

thanks.

alex.



On Thu, May 15, 2014 at 5:32 PM, Philipp Hancke <philipp...@googlemail.com> wrote:
Sending a null candidate when gathering is complete is a little bit more challenging, as the gathering of the candidates is done asynchronously. Give us a few days.

IIRC you need to manually trigger that when a OnIceGatheringChange to kIceGatheringComplete occurs in PeerConnectionObserver, there is no null candidate passed to the c++ OnIceCandidate

--

---
You received this message because you are subscribed to the Google Groups "discuss-webrtc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrt...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Iñaki Baz Castillo

unread,
May 15, 2014, 12:50:25 PM5/15/14
to discuss...@googlegroups.com


On May 15, 2014 6:20 PM, "Alexandre GOUAILLARD" <agoua...@gmail.com> wrote:
>
> Screensharing has security implications, and until it makes its way in the standard in a way everybody agrees to (or until the browser vendors implement the feature) we should snot include it.

+1

Nicholas Buchanan

unread,
May 18, 2014, 6:26:49 PM5/18/14
to discuss...@googlegroups.com
  • Thank you!

I got right into getting this implemented. I am stuck at createAnswer, which returns NPObject error on Safari. I tested IE and it breaks at the same place.

My code has been working well on Chrome and Firefox, and it uses ICE trickling.

I have the procedure outlined as this:

Safari works as a createOffer, but fails as a createAnswer.

  1. User “Chrome” local video element created

  2. Chrome trigger getUserMedia

    1. calls ‘temasys’ attachMediaStream, attach src video element

  3. Chrome joins room

  4. User Safari local video element created

  5. Safari trigger getUserMedia

    1. calls ‘temasys’ attachMediaStream, attach src video element

  6. Safari joins room

  7. Signaler assign type to each participant - offer, answer

  8. Offer - Chrome creates remote video element

    1. create new PeerConnection

      1. addStream add local stream

    2. createOffer called

      1. emits SDP to Safari

    3. ice trickle begins

      1. emits candidate to Safari

  9. Answer - Safari creates remote video element (same time as step 8)

    1. create new PeerConnection

      1. addStream add local stream

  10. Safari receives SDP

    1. setRemoteDescription

    2. createAnswer called ← does not work!

    3. (Safari never gets to this point) sends SDP to Chrome

    4. (Safari ends up not creating ICE candidates….)

  11. Chrome receives SDP (not yet working from Safari SDP - Safari never sends SDP)

    1. setRemoteDescription (not yet working via Safari SDP)
 

Alexandre GOUAILLARD

unread,
May 18, 2014, 11:48:00 PM5/18/14
to discuss...@googlegroups.com, webrtc...@temasys.com.sg
I m CC'ing that on our dedicated mailing list, so you get a faster answer.



--

---
You received this message because you are subscribed to the Google Groups "discuss-webrtc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrt...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Mikhail Burakov

unread,
May 19, 2015, 1:40:29 PM5/19/15
to discuss...@googlegroups.com
I've got the same problem now. Did you figure out solution?

понедельник, 19 мая 2014 г., 3:26:49 UTC+5 пользователь Nicholas Buchanan написал:
Reply all
Reply to author
Forward
0 new messages