Giter VIP home page Giter VIP logo

media-server's Introduction

RoomRTC Media Server

A simple media server for RoomRTC

Run roomrtc media as your own server

The program requires the following dependencies (easy to install using npm)

  • roomrtc - Framework enables quick development of WebRTC
  • mediasoup - Cutting Edge WebRTC Video Conferencing

Follow these steps to run the server:

  • Clone repo: git clone https://github.com/roomrtc/mediaserver.git roomrtc-media-server
  • Change dir: cd roomrtc-media-server
  • Install deps: npm install
  • Start server: npm start
  • Open browser: http://localhost:8123/?myroom

Install via npm:

npm install @roomrtc/mediaserver

Prior to that, ensure your host satisfies the following requirements:

  • Node.js >= v6.9.1
  • POSIX based operating system (Windows not yet supported)
  • Python 2 (python2 or python command must point to the Python 2 executable)
  • make
  • gcc and g++, or clang, with C++11 support

NOTE: In Debian and Ubuntu install the build-essential package. It includes both make and gcc/g++.

License

MIT

media-server's People

Contributors

vunb avatar dependabot[bot] avatar

Stargazers

Nikolaus Schlemm avatar  avatar Andrii Davydov avatar

Watchers

James Cloos avatar  avatar cvgit avatar

Forkers

dunglt

media-server's Issues

RTCPeerConnection negotiationneeded multiple times

RoomRTC : Peer btnkQHkgxTC_DGreAAAD [ INFO ] negotiationneeded sendSdpOffer back: btnkQHkgxTC_DGreAAAD
RoomRTC : Peer btnkQHkgxTC_DGreAAAD [ INFO ] negotiationneeded sendSdpOffer back: btnkQHkgxTC_DGreAAAD
RoomRTC : Peer btnkQHkgxTC_DGreAAAD [ INFO ] negotiationneeded sendSdpOffer back: btnkQHkgxTC_DGreAAAD
RoomRTC : Peer btnkQHkgxTC_DGreAAAD [ INFO ] negotiationneeded sendSdpOffer back: btnkQHkgxTC_DGreAAAD
RoomRTC : Peer btnkQHkgxTC_DGreAAAD [ ERROR ] sendSdpToPeer error: InvalidStateError: busy
    at klass (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/errors.js:9:4)
    at RTCPeerConnectionPlanB.createOffer (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:202:26)
    at Peer.sendSdpOffer (/home/vunb/roomrtc/mediaserver-2/peer.js:88:24)
    at RTCPeerConnectionPlanB.pc.on (/home/vunb/roomrtc/mediaserver-2/peer.js:109:18)
    at emitNone (events.js:91:20)
    at RTCPeerConnectionPlanB.emit (events.js:185:7)
    at Timeout._negotiationNeededTimer.setTimeout [as _onTimeout] (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:508:10)
    at ontimeout (timers.js:365:14)
    at tryOnTimeout (timers.js:237:5)
    at Timer.listOnTimeout (timers.js:207:5)
RoomRTC : Peer btnkQHkgxTC_DGreAAAD [ ERROR ] sendSdpToPeer error: InvalidStateError: busy
    at klass (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/errors.js:9:4)
    at RTCPeerConnectionPlanB.createOffer (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:202:26)
    at Peer.sendSdpOffer (/home/vunb/roomrtc/mediaserver-2/peer.js:88:24)
    at RTCPeerConnectionPlanB.pc.on (/home/vunb/roomrtc/mediaserver-2/peer.js:109:18)
    at emitNone (events.js:91:20)
    at RTCPeerConnectionPlanB.emit (events.js:185:7)
    at Timeout._negotiationNeededTimer.setTimeout [as _onTimeout] (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:508:10)
    at ontimeout (timers.js:365:14)
    at tryOnTimeout (timers.js:237:5)
    at Timer.listOnTimeout (timers.js:207:5)
RoomRTC : Peer btnkQHkgxTC_DGreAAAD [ ERROR ] sendSdpToPeer error: InvalidStateError: busy
    at klass (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/errors.js:9:4)
    at RTCPeerConnectionPlanB.createOffer (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:202:26)
    at Peer.sendSdpOffer (/home/vunb/roomrtc/mediaserver-2/peer.js:88:24)
    at RTCPeerConnectionPlanB.pc.on (/home/vunb/roomrtc/mediaserver-2/peer.js:109:18)
    at emitNone (events.js:91:20)
    at RTCPeerConnectionPlanB.emit (events.js:185:7)
    at Timeout._negotiationNeededTimer.setTimeout [as _onTimeout] (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:508:10)
    at ontimeout (timers.js:365:14)
    at tryOnTimeout (timers.js:237:5)
    at Timer.listOnTimeout (timers.js:207:5)
RoomRTC : Peer Agi9JgQTZ7pAnzaSAAAC [ INFO ] pc.setLocalDescription(desc); ....
RoomRTC : Peer btnkQHkgxTC_DGreAAAD [ INFO ] pc.setLocalDescription(desc); ....
RoomRTC : Peer Agi9JgQTZ7pAnzaSAAAC [ INFO ] Preparing sendSdpOffer to peer
RoomRTC : Peer btnkQHkgxTC_DGreAAAD [ INFO ] Preparing sendSdpOffer to peer
RoomRTC : Peer Q9X4CRsiFIYB_sJPAAAB [ INFO ] negotiationneeded sendSdpOffer back: Q9X4CRsiFIYB_sJPAAAB
RoomRTC : Peer Q9X4CRsiFIYB_sJPAAAB [ INFO ] negotiationneeded sendSdpOffer back: Q9X4CRsiFIYB_sJPAAAB
RoomRTC : Peer Q9X4CRsiFIYB_sJPAAAB [ ERROR ] sendSdpToPeer error: InvalidStateError: busy
    at klass (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/errors.js:9:4)
    at RTCPeerConnectionPlanB.createOffer (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:202:26)
    at Peer.sendSdpOffer (/home/vunb/roomrtc/mediaserver-2/peer.js:88:24)
    at RTCPeerConnectionPlanB.pc.on (/home/vunb/roomrtc/mediaserver-2/peer.js:109:18)
    at emitNone (events.js:91:20)
    at RTCPeerConnectionPlanB.emit (events.js:185:7)
    at Timeout._negotiationNeededTimer.setTimeout [as _onTimeout] (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:508:10)
    at ontimeout (timers.js:365:14)
    at tryOnTimeout (timers.js:237:5)
    at Timer.listOnTimeout (timers.js:207:5)
RoomRTC : Peer Q9X4CRsiFIYB_sJPAAAB [ ERROR ] sendSdpToPeer error: TypeError: Cannot read property 'dtlsLocalParameters' of undefined
    at RTCPeerConnectionPlanB._createLocalDescription (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionPlanB.js:260:43)
    at _setUpOffer.then (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:225:33)
    at runMicrotasksCallback (internal/process/next_tick.js:58:5)
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

Use template-literal instead of EJS

Template Literal is fastest, smallest and simplest template engine, because it use JS's literal template feature.

It's 55 times faster than EJS, and it also use less CPU and RAM ressources, so it may be a good idea to use it instead of EJS ๐Ÿ˜€

InvalidStateError: capabilities are ready set

vunb@ubuntu:~/roomrtc/mediaserver-2$ npm start

> @roomrtc/[email protected] start /home/vunb/roomrtc/mediaserver-2
> node server.js

RoomRTC : Media Room [ INFO ] Config info  { autoInitServer: true }
RoomRTC : Media Server [ INFO ] Server is running at:  8123
RoomRTC : Media Room [ INFO ] New client connect:  g4QKS3hfal5ZUQy1AAAA
RoomRTC : Media Room [ INFO ] Client request to join room:  g4QKS3hfal5ZUQy1AAAA abc
RoomRTC : Media Room [ INFO ] getPeer, id: g4QKS3hfal5ZUQy1AAAA
RoomRTC : Media Room [ INFO ] setPeer, id: g4QKS3hfal5ZUQy1AAAA
RoomRTC : Media Room [ INFO ] Client send a message:  g4QKS3hfal5ZUQy1AAAA offer
RoomRTC : Media Room [ INFO ] getPeer, id: g4QKS3hfal5ZUQy1AAAA
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] Preparing process msg, type: offer
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] setCapabilities ok !
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] pc.setLocalDescription(desc); ....
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] Preparing sendSdpOffer to peer
RoomRTC : Media Room [ INFO ] Client send a message:  g4QKS3hfal5ZUQy1AAAA answer
RoomRTC : Media Room [ INFO ] getPeer, id: g4QKS3hfal5ZUQy1AAAA
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] Preparing process msg, type: answer
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] setRemoteDescription for answer OK id= g4QKS3hfal5ZUQy1AAAA
RoomRTC : Media Room [ INFO ] New client connect:  k6QhQlVRca6E5IdbAAAB
RoomRTC : Media Room [ INFO ] Client request to join room:  k6QhQlVRca6E5IdbAAAB abc
RoomRTC : Media Room [ INFO ] getPeer, id: k6QhQlVRca6E5IdbAAAB
RoomRTC : Media Room [ INFO ] setPeer, id: k6QhQlVRca6E5IdbAAAB
RoomRTC : Media Room [ INFO ] Client send a message:  k6QhQlVRca6E5IdbAAAB offer
RoomRTC : Media Room [ INFO ] getPeer, id: k6QhQlVRca6E5IdbAAAB
RoomRTC : Peer k6QhQlVRca6E5IdbAAAB [ INFO ] Preparing process msg, type: offer
RoomRTC : Peer k6QhQlVRca6E5IdbAAAB [ INFO ] setCapabilities ok !
RoomRTC : Peer k6QhQlVRca6E5IdbAAAB [ INFO ] pc.setLocalDescription(desc); ....
RoomRTC : Peer k6QhQlVRca6E5IdbAAAB [ INFO ] Preparing sendSdpOffer to peer
RoomRTC : Media Room [ INFO ] A client leave:  k6QhQlVRca6E5IdbAAAB
RoomRTC : Media Room [ INFO ] New client connect:  PywXuUK9_9wKK6Y4AAAC
RoomRTC : Media Room [ INFO ] Client request to join room:  PywXuUK9_9wKK6Y4AAAC abc
RoomRTC : Media Room [ INFO ] getPeer, id: PywXuUK9_9wKK6Y4AAAC
RoomRTC : Media Room [ INFO ] setPeer, id: PywXuUK9_9wKK6Y4AAAC
RoomRTC : Media Room [ INFO ] Client send a message:  PywXuUK9_9wKK6Y4AAAC offer
RoomRTC : Media Room [ INFO ] getPeer, id: PywXuUK9_9wKK6Y4AAAC
RoomRTC : Peer PywXuUK9_9wKK6Y4AAAC [ INFO ] Preparing process msg, type: offer
RoomRTC : Peer PywXuUK9_9wKK6Y4AAAC [ INFO ] setCapabilities ok !
RoomRTC : Peer PywXuUK9_9wKK6Y4AAAC [ INFO ] pc.setLocalDescription(desc); ....
RoomRTC : Peer PywXuUK9_9wKK6Y4AAAC [ INFO ] Preparing sendSdpOffer to peer
RoomRTC : Media Room [ INFO ] Client send a message:  PywXuUK9_9wKK6Y4AAAC iceCandidate
RoomRTC : Media Room [ INFO ] getPeer, id: PywXuUK9_9wKK6Y4AAAC
RoomRTC : Peer PywXuUK9_9wKK6Y4AAAC [ INFO ] Preparing process msg, type: iceCandidate
RoomRTC : Peer PywXuUK9_9wKK6Y4AAAC [ INFO ] Do not process ice message iceCandidate
RoomRTC : Media Room [ INFO ] Client send a message:  PywXuUK9_9wKK6Y4AAAC iceCandidate
RoomRTC : Media Room [ INFO ] getPeer, id: PywXuUK9_9wKK6Y4AAAC
RoomRTC : Peer PywXuUK9_9wKK6Y4AAAC [ INFO ] Preparing process msg, type: iceCandidate
RoomRTC : Peer PywXuUK9_9wKK6Y4AAAC [ INFO ] Do not process ice message iceCandidate
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] negotiationneeded sendSdpOffer back: g4QKS3hfal5ZUQy1AAAA
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] pc.setLocalDescription(desc); ....
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] Preparing sendSdpOffer to peer
RoomRTC : Media Room [ INFO ] Client send a message:  g4QKS3hfal5ZUQy1AAAA answer
RoomRTC : Media Room [ INFO ] getPeer, id: g4QKS3hfal5ZUQy1AAAA
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] Preparing process msg, type: answer
RoomRTC : Peer g4QKS3hfal5ZUQy1AAAA [ INFO ] setRemoteDescription for answer OK id= g4QKS3hfal5ZUQy1AAAA
RoomRTC : Media Room [ INFO ] Client send a message:  PywXuUK9_9wKK6Y4AAAC offer
RoomRTC : Media Room [ INFO ] getPeer, id: PywXuUK9_9wKK6Y4AAAC
RoomRTC : Peer PywXuUK9_9wKK6Y4AAAC [ INFO ] Preparing process msg, type: offer
/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:134
			throw new InvalidStateError('capabilities are ready set');
			^

InvalidStateError: capabilities are ready set
    at klass (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/errors.js:9:4)
    at RTCPeerConnectionPlanB.setCapabilities (/home/vunb/roomrtc/mediaserver-2/node_modules/mediasoup/lib/webrtc/RTCPeerConnection/RTCPeerConnectionCommon.js:134:10)
    at Peer._handleMsgOffer (/home/vunb/roomrtc/mediaserver-2/peer.js:113:24)
    at Peer.processMessage (/home/vunb/roomrtc/mediaserver-2/peer.js:57:18)
    at MediaRoom.onClientMessage (/home/vunb/roomrtc/mediaserver-2/media.js:176:14)
    at emitTwo (events.js:106:13)
    at MediaRoom.emit (events.js:191:7)
    at Signaling.<anonymous> (/home/vunb/roomrtc/mediaserver-2/node_modules/roomrtc/lib/roomrtc_server.js:45:23)
    at Signaling.EventEmitter.emit (/home/vunb/roomrtc/mediaserver-2/node_modules/signaling/node_modules/eventemitter2/lib/eventemitter2.js:324:22)
    at Socket.<anonymous> (/home/vunb/roomrtc/mediaserver-2/node_modules/signaling/signaling.js:65:36)

npm ERR! Linux 4.2.0-27-generic
npm ERR! argv "/home/vunb/.nvm/versions/node/v6.9.1/bin/node" "/home/vunb/.nvm/versions/node/v6.9.1/bin/npm" "start"
npm ERR! node v6.9.1
npm ERR! npm  v3.10.8
npm ERR! code ELIFECYCLE
npm ERR! @roomrtc/[email protected] start: `node server.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the @roomrtc/[email protected] start script 'node server.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the @roomrtc/mediaserver package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node server.js
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs @roomrtc/mediaserver
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls @roomrtc/mediaserver
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/vunb/roomrtc/mediaserver-2/npm-debug.log

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.