Ruby RabbitMQ Janus

Ruby Gem for Janus WebRTC Gateway integration using RabbitMQ message queue
This gem is used to communicate to a server Janus through RabbitMQ software
(Message-oriented middleware). It waiting a messages to Rails API who send to
RabbitMQ server in a queue for janus server. janus processes a message and send
to RabbitMQ server in a queue for gem. Once the received message is decoded
and returned through the Rails API.
This gem is product by Dazzl.tv

How to use
Installation
Use rubygem for installing gem in your application. Add in your Gemfile :
gem 'ruby_rabbitmq_janus'
And then execute :
bundle
Or install it yourself as :
gem install ruby_rabbitmq_janus
Install basic configuration :
rails g ruby_rabbitmq_janus:install
Requirements
Configuration
If you want used a customize configuration see ruby-rabbitmq-janus.yml
Janus
Configure one (or many) Janus server.
See janus gateway documentation.
Configure the queue with rabbit with incremental number. So the first instance
take a name to-janus-1
and all queues from
sending in same queue.
Generators
Use generator for complete installation :
rails g -h
RubyRabbitmqJanus:
ruby_rabbitmq_janus:configuration
ruby_rabbitmq_janus:create_request
ruby_rabbitmq_janus:default_request
ruby_rabbitmq_janus:initializer
ruby_rabbitmq_janus:install
Requests
For create an new request is simple. Use a command generator :
rails g ruby_rabbitmq_janus:create_request test info 'transaction:<string>,body:{plugins:false}'
create config/requests/test/info.json
For more explain in requests files see default requests.
Usage
Usage information
This gem use rabbitmq for manage request sending to Janus, so see
documentation Janus and
documentation Rabbitmq. This gem
use bunny gem for create connection with rabbitmq. See many guide :
bunny documentation.
Standard Request
require 'ruby_rabbitmq_janus'
t = RubyRabbitmqJanus::RRJ.new
t.session_endpoint_public do |transaction|
transaction.publish_message('base::info')
end
=> @request={"janus"=>"server_info" ... }
Admin Request
NOTE: The request authentication HMAC-Signed token authentication
is not available.
require 'ruby_rabbitmq_janus'
t = RubyRabbitmqJanus::RRJAdmin.new
options = { instance: 42 }
t.admin_endpoint(options) do |transaction|
transaction.publish_message('admin::sessions', options)
end
=> @request={"janus"=>"success" ... "sessions"=>[123, 456, 789]}
Listen Janus Event
require 'ruby_rabbitmq_janus'
actions = RubyRabbitmqJanus::ActionEvents.new.action
RubyRabbitmqJanus::Janus::Concurrencies::Event.new.run(@actions)
Listen Janus Admin Event
require 'ruby_rabbitmq_janus'
actions = RubyRabbitmqJanus::ActionAdminEvents.new.action
RubyRabbitmqJanus::Janus::Concurrencies::EventAdmin.new.run(@actions)
Upgrade
For upgrade your application read CHANGELOG.md
Development
RSpec test
Use docker for running SPEC
# Prepare images
docker-compose build
# Launch tiers service RabbitMQ
docker-compose up -d rabbit
# Launch tiers service Janus (ensure rabbit is started before and READY)
docker-compose up -d janus janus_token
## Excute ##
# Start for MongoID database
docker-compose run gem env MONGO=true bundle exec rake classic
docker-compose run gem env MONGO=true bundle exec rake concurrency
# Start for SQlite3 database
docker-compose run gem env MONGO=false bundle exec rake classic
docker-compose run gem env MONGO=false bundle exec rake concurrency
## OR ##
# Navigate in container an
docker-compose run gem ash
export MONGO=true
bundle exec rake classic
NOTE : Use SPEC_DEBUG=true bundle exec rake classic
for stopping rspec execution when first test fail.
TIPS: for rspec install janus and rabbitmq server configured by default for user
rabbitmq and use plugin echotest for janus server.
Use tags for rspec :
Internaly function | config | |
Use bunny gem | | rabbit |
Test log functions | | log |
Test configuration function | | config |
Test Gem contains CONSTANTS | | describe |
Level request sending to janus (admin monitor API or classic) | level | |
Request basic. | | base |
Request with admin right in Janus application. | | admin |
Request candidate/jsep | | peer |
Request JSON sending to Rabbitmq -> Janus | request | |
Test request attach type | | attach |
Test request type create | | create |
Test request type detach | | detach |
Test request type janus info | | info |
Test request type test | | test |
Test request type handle list | | handles |
Test request type sesssion list | | sessions |
Test request type handle information | | handle_info |
Test request type (un)locking debug | | set_locking_debug |
Test request type change log level | | set_log_level |
Test request type tokens list | | tokens |
Test request type destroy session | | destroy |
Test request keepalive | | keepalive |
Test request type sdp offer | | offer |
Test request type trickle, send on candidate | | trickle |
Test request type trickles, send array candidate | | trickles |
Event(s) thread | event | |
Test thread public queue | | event |
Test thread admin queue | | event_admin |
Example usage rspec with tags :
rspec --tag --name:config --tag level:base
Documentation
Read documentation
The documentation is accessible in rubydoc
Generate developer documentation
This doc is generated with yard.
# Genereate doc
yard
# Launch server
yard server
See Yard Getting Started
Contributing
Bug reports and pull requests are welcome on GitHub at
https://github.com/dazzl-tv/ruby-rabbitmq-janus This project is intended to be a
safe, welcoming space for collaboration, and contributors are expected to adhere
to the Contributor Covenant code of conduct.