Coder Social home page Coder Social logo

crocodile-rtc's People

Stargazers

 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  avatar

crocodile-rtc's Issues

Add support for reINVITEs

Currently neither JsSIP nor the SDK support reINVITEs. This prevents media renegotiation (changing media streams, hold/resume), and causes difficulty with supporting session timer.

Extend MediaSession API to support DTMF

Add API to allow sending and receiving of DTMF tones. Default to using the WebRTC API, which should use telephone-event RTP packets as per RFC 4733, but allow the application to choose to use SIP INFO messages if desired (send via the JsSIP DTMF API).

Perform better translation of XHTML to plain text for XMPP

When sending XHTML over XMPP, we also send a plain text version of the message in the <body> tags. Currently the plain text is just the XHTML with the tags stripped out; it would be better to apply some basic formatting to make the two versions more similar. For instance:

  • Replace <p> and <br/> with appropriate line breaks.
  • Turn <ul> into bullet points using "*" or "-".
  • Turn <ol> into a numbered list.

How useful this enhancement is depends on how likely we are to see XMPP clients that don't support XHTML-IM (XEP-0071).

blob.slice is undefined for Safari webkit

While testing MSRP data sessions between Safari and Chrome, I was getting an error sending from Safari to Chrome. This was the error from Safari:

TypeError: 'undefined' is not a function (evaluating 'this.blob.slice(this.sentBytes, end)') crocodile-rtc.js:22848

So I logged out this.blob on line 22848 and found out that Safari is looking for blob.webkitSlice instead of blob.slice.

I fixed it with this code:

if(typeof this.blob.slice === 'function') {
    chunk.body = this.blob.slice(this.sentBytes, end);
}else if(typeof this.blob.webkitSlice === 'function'){
    chunk.body = this.blob.webkitSlice(this.sentBytes, end);
}

Make intelligent selection of default data transport

If the data transport is not explicitly selected by the application, we need to automatically select the most appropriate one, based on the data being sent. Currently we just default to page mode.

Some of the variables we might want to consider:

  • Binary vs text
  • Size of data to send
  • Whether XMPP/MSRP are configured/started

Check for available media sources using MediaStreamTrack.getSources()

At startup, we currently attempt to check media source availability by requesting access using getUserMedia, then immediately closing the stream again afterwards. This can be replaced with code that checks the output of MediaStreamTrack.getSources() (previously getSourceInfos), which is available in Chrome 30+.

Calling presence.getContacts() loses presence information for extended periods

Found following discussion with @jfend.

My testing has shown that the XMPP server only automatically sends presence information the first time you request the full roster. This means that calling getContacts later will lose the presence information for an extended period of time - probably the next time that contact changes their presence, unless we provide a way of requesting a refresh. Rather than flooding the network with presence requests, I plan to change the code to transfer any presence information from the old contact list to the new one.

Remove jQuery dependency

Though client applications are likely to use it, the library has very little dependency on jQuery, and thus it would be better to remove the dependency and give the application more freedom to choose something else.

I think our use of jQuery is limited to a few jQuery.extend and jQuery.ajax calls. The extend could be replaced with a function in Util, and the ajax calls could be done directly with XmlHttpRequest.

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.