GithubHelp home page GithubHelp logo

mconf / bbb-webrtc-sfu Goto Github PK

View Code? Open in Web Editor NEW

This project forked from bigbluebutton/bbb-webrtc-sfu

1.0 9.0 4.0 3.38 MB

Control server for WebRTC SFU

License: GNU Lesser General Public License v3.0

Dockerfile 0.05% JavaScript 99.82% Shell 0.13%

bbb-webrtc-sfu's Introduction

bbb-webrtc-sfu

Server for controlling a WebRTC selective forwarding unit (SFU) media server.

bbb-webrtc-sfu's People

Contributors

antobinary avatar dependabot[bot] avatar eduardohfnascimento avatar fcecagno avatar ffdixon avatar germanocaumo avatar lfzawacki avatar lkiesow avatar mariogasparoni avatar pedrobmarin avatar prlanzarin avatar ritzalam avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bbb-webrtc-sfu's Issues

Improve logging metadata

Review multi-line logs.
Add metadata to logs associating them to fields of interest for postprocessing.

  • Some fields of interest:
    • userId
    • meetingId

Content sharing doesn't work immediately after taking someone else's presenter during a screensharing

Endpoint(s) description :
WebRTC (BBB Web user) and RTP User

Media format :
Video H.264

bbb-webrtc-sfu version/hash :
current dev branch: ebbe9dd

Problem description / Steps to reproduce:

  1. Web User Join through BBB (with moderator access)
  2. RTP user join
  3. RTP User shares it's content and automatically become a presenter in BBB
  4. Web User becomes a presenter (RTP User automatically stops
  5. Web User starts screen sharing and no video is shown for Web/RTP User

Expected Behavior:
Video should be shown to all users (Web and RTP) in the room

Extra Info:
After step (5), if user stops screen sharing and start it again, the screen media is sent correctly

[mcs-core] Implement requestKeyframe method and keyframeNeeded event

Of great importance to SFU cases where we have mixed models of keyframe requisition (rtcp fir/nack/pli and SIP INFO, for instance).
One new API method, one new API event:

  • requestKeyframe: mediaId => response; Notifies a media that it needs to generate a keyframe somehow
  • keyframeNeeded: e(mediaId); Notifies a media that a keyframe was requested from it from someone. Generally triggered by requestKeyframe or by the controller (internally).

[mcs-core] Create a buffer for media state events

Create a buffer of limited size to store media state events for media streams. Append the buffer info to info objects traded by the API, mainly when reacting to a new onEvent subscription.

The idea behind this is to give an idea of the current and previous media states for 3rd-party applications which probe media streams from mcs-core.

[mcs-core] Refactor the Kurento adapter's stop method

It's currently too big and quite messy because all the transposers cleaning and pipeline accounting/cleaning is inside there. Consider stripping the method into multiple ones. Also look at the stopRecording wart.

[mcs-core] Media unit with bundled audio+video is being messed up with role = offerer

sdp-session's renegotiateStreams is flaky with media units that have audio+video bundled: the remote descriptor is being overwritten with a partial video descriptor, causing the mediaType to be wrongly redefined and messing the negotiation flow.

Consider moving the inactive reappend to the kurento adapter so we don't have to reassing remote descriptors at every step (and consequently fix this).

[mcs-core] Implement the setStrategy API method

Implement the setStrategy/getStrategies API methods to define generic switching algorithms. Includes:

  • Per-room and per-user handling
  • User and media model updates to track strategies
  • An strategy factory and a base strategy class with a pre-defined interface
  • Implementation of the optional parameter multiSession on user join or media brokering methods
  • Implementation of a base strategy: freewill, which basically means "release from the current strategy" and from there do nothing

[mcs-core] Re-do the `connect`/`disconnect` API methods implementation

The current implementation is botched, too complex and bug-prone in many ways due to the mediaProfile subspec that serves for nothing other than complicating things.
The discrepant behaviour of those methods between the upper *MediaSession models and *Media models is also due for a thorough review.
We should base ourselves around only the connectionType subspec and let go of the content subdivision I introduced (who knows what for).

There's base work done on https://github.com/mconf/bbb-webrtc-sfu/tree/v2.3.2-no-desc-negotiation in the MediaSession model and although that is a badly-optimized prototyped, it's already much better.

Slated for v2.4.x as I'd like to clean that mess as fast as possible.

[mcs-core] Implement getInfo API method

Returns info on the member represented by the identifier parameter:

  • getInfo : identifier = undefined -> info:
    • roomId -> room's getInfo;
    • mediaId -> media/media-session's getMediaInfo;
    • userId -> user's getInfo;
    • no parameter -> server capabilities: implemented methods and available adapters.

[mcs-core] Implement proper parameterization for bandwidth/bitrate/REMB in the Kurento adapter

There was a stub for those implemented on bd12f2a, but the values are hardcoded.
Consider implementing a way to parameterize those on media creation according to the configured or specified, via API, media specs.
That's a tad cumbersome today because we'd either need to fetch those values from the SDP (hence needing to add another parse-and-fetch utilitary method on sdp-wrapper for that) OR devise a proper data format and flow between the model/factory classes and the media server adapter classes.

Slated for v2.5.x. Might get this done earlier on v2.4.x if anybody picks this soon enough.

Add option to specify media types to be generated on offerer in pub/sub/pubsub calls

Add the medias optional parameter which is an object/hash map of the following format:

medias: {
   audio: String|Array[String]|undefined ->  "sendrecv"|"recvonly"|"sendonly",
   video: String|Array[String]|undefined ->  "sendrecv"|"recvonly"|"sendonly",
   content: String|Array[String]|undefined ->  "sendrecv"|"recvonly"|"sendonly",
}

When the key values are arrays of the specified possible strings, it'll behave as a quantity specifier.

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.