janus_gateway 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -2
- data/lib/janus_gateway.rb +0 -1
- data/lib/janus_gateway/client.rb +5 -8
- data/lib/janus_gateway/error.rb +7 -13
- data/lib/janus_gateway/plugin/rtpbroadcast.rb +0 -3
- data/lib/janus_gateway/plugin/rtpbroadcast/mountpoint.rb +25 -33
- data/lib/janus_gateway/resource.rb +9 -15
- data/lib/janus_gateway/resource/plugin.rb +11 -20
- data/lib/janus_gateway/resource/session.rb +15 -24
- data/lib/janus_gateway/transport.rb +9 -12
- data/lib/janus_gateway/transport/websocket.rb +18 -18
- data/lib/janus_gateway/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc4b9beb3a1785cdd57969399012134c3d9cf1f6
|
4
|
+
data.tar.gz: 6f0f36f3d20e628ce3e71a9bba8048e29c7e0fcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61469d3bf261e225d482a2a1a5ad7fe06c6e475125ad7bf106d1106361617e4a0aa8a23f9432bcd23669ba15203e405cfd80ebda369fe4b1899eaefe007b3962
|
7
|
+
data.tar.gz: b8105fbd4c6e7a56939d4667c031d8356e245d531b311747a3df0bb59702c1febffcf5c786081ee8eacd5deedf6ec90dfc8a389bfe29884b41b32a48f7658f27
|
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
janus-gateway-ruby
|
1
|
+
janus-gateway-ruby
|
2
2
|
==================
|
3
|
-
Minimalistic [
|
3
|
+
Minimalistic client for the [Janus](https://github.com/meetecho/janus-gateway) WebRTC gateway.
|
4
|
+
|
5
|
+
[](https://travis-ci.org/cargomedia/janus-gateway-ruby)
|
6
|
+
[](https://rubygems.org/gems/janus_gateway)
|
4
7
|
|
5
8
|
Installation
|
6
9
|
------------
|
data/lib/janus_gateway.rb
CHANGED
data/lib/janus_gateway/client.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
module JanusGateway
|
2
|
-
|
3
2
|
class Client
|
4
|
-
|
5
3
|
attr_accessor :transport
|
6
4
|
|
7
5
|
# @param [JanusGateway::Transport]
|
@@ -9,8 +7,8 @@ module JanusGateway
|
|
9
7
|
def initialize(transport, options = {})
|
10
8
|
@transport = transport
|
11
9
|
@options = {
|
12
|
-
:
|
13
|
-
:
|
10
|
+
token: nil,
|
11
|
+
admin_secret: nil
|
14
12
|
}.merge(options)
|
15
13
|
end
|
16
14
|
|
@@ -29,13 +27,13 @@ module JanusGateway
|
|
29
27
|
# @param [Hash] data
|
30
28
|
# @return [Concurrent::Promise]
|
31
29
|
def send_transaction(data)
|
32
|
-
extra_fields = @options.delete_if { |
|
30
|
+
extra_fields = @options.delete_if { |_, v| v.nil? }
|
33
31
|
@transport.send_transaction(data.merge(extra_fields))
|
34
32
|
end
|
35
33
|
|
36
34
|
# @return [TrueClass, FalseClass]
|
37
|
-
def
|
38
|
-
@transport.
|
35
|
+
def connected?
|
36
|
+
@transport.connected?
|
39
37
|
end
|
40
38
|
|
41
39
|
# @param [Symbol, String] event
|
@@ -43,6 +41,5 @@ module JanusGateway
|
|
43
41
|
def on(event, &block)
|
44
42
|
@transport.on(event, &block)
|
45
43
|
end
|
46
|
-
|
47
44
|
end
|
48
45
|
end
|
data/lib/janus_gateway/error.rb
CHANGED
@@ -1,24 +1,18 @@
|
|
1
1
|
module JanusGateway
|
2
|
-
|
3
2
|
class Error < StandardError
|
3
|
+
# @return [Integer]
|
4
|
+
attr_reader :code
|
5
|
+
|
6
|
+
# @return [String]
|
7
|
+
attr_reader :info
|
4
8
|
|
5
9
|
# @param [Integer] error_code
|
6
10
|
# @param [String] error_info
|
7
11
|
def initialize(error_code, error_info)
|
8
|
-
@code
|
12
|
+
@code = error_code
|
13
|
+
@info = error_info
|
9
14
|
|
10
15
|
super("<Code: #{code}> <Info: #{info}>")
|
11
16
|
end
|
12
|
-
|
13
|
-
# @return [Integer]
|
14
|
-
def code
|
15
|
-
@code
|
16
|
-
end
|
17
|
-
|
18
|
-
# @return [String]
|
19
|
-
def info
|
20
|
-
@info
|
21
|
-
end
|
22
|
-
|
23
17
|
end
|
24
18
|
end
|
@@ -1,12 +1,9 @@
|
|
1
1
|
module JanusGateway::Plugin
|
2
|
-
|
3
2
|
class Rtpbroadcast < JanusGateway::Resource::Plugin
|
4
|
-
|
5
3
|
# @param [JanusGateway::Client] client
|
6
4
|
# @param [JanusGateway::Resource::Session] session
|
7
5
|
def initialize(client, session)
|
8
6
|
super(client, session, 'janus.plugin.cm.rtpbroadcast')
|
9
7
|
end
|
10
|
-
|
11
8
|
end
|
12
9
|
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
module JanusGateway::Plugin
|
2
|
-
|
3
2
|
class Rtpbroadcast::Mountpoint < JanusGateway::Resource
|
3
|
+
# @return [JanusGateway::Resource::Plugin]
|
4
|
+
attr_reader :plugin
|
5
|
+
|
6
|
+
# @return [Hash, NilClass]
|
7
|
+
attr_reader :data
|
4
8
|
|
5
9
|
# @param [JanusGateway::Client] client
|
6
10
|
# @param [JanusGateway::Plugin::Rtpbroadcast] plugin
|
@@ -14,12 +18,12 @@ module JanusGateway::Plugin
|
|
14
18
|
|
15
19
|
@streams = streams || [
|
16
20
|
{
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
21
|
+
audio: 'yes',
|
22
|
+
video: 'yes',
|
23
|
+
audiopt: 111,
|
24
|
+
audiortpmap: 'opus/48000/2',
|
25
|
+
videopt: 100,
|
26
|
+
videortpmap: 'VP8/90000'
|
23
27
|
}
|
24
28
|
]
|
25
29
|
|
@@ -31,19 +35,17 @@ module JanusGateway::Plugin
|
|
31
35
|
promise = Concurrent::Promise.new
|
32
36
|
|
33
37
|
client.send_transaction(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
:
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
:channel_data => @channel_data
|
46
|
-
}
|
38
|
+
janus: 'message',
|
39
|
+
session_id: plugin.session.id,
|
40
|
+
handle_id: plugin.id,
|
41
|
+
body: {
|
42
|
+
request: 'create',
|
43
|
+
id: id,
|
44
|
+
name: id,
|
45
|
+
description: id,
|
46
|
+
recorded: true,
|
47
|
+
streams: @streams,
|
48
|
+
channel_data: @channel_data
|
47
49
|
}
|
48
50
|
).then do |data|
|
49
51
|
plugindata = data['plugindata']['data']
|
@@ -85,20 +87,10 @@ module JanusGateway::Plugin
|
|
85
87
|
plugin.session
|
86
88
|
end
|
87
89
|
|
88
|
-
# @return [JanusGateway::Resource::Plugin]
|
89
|
-
def plugin
|
90
|
-
@plugin
|
91
|
-
end
|
92
|
-
|
93
|
-
# @return [Hash, NilClass]
|
94
|
-
def data
|
95
|
-
@data
|
96
|
-
end
|
97
|
-
|
98
90
|
private
|
99
91
|
|
100
92
|
def _on_error(error)
|
101
|
-
|
93
|
+
emit :error, error
|
102
94
|
end
|
103
95
|
|
104
96
|
def _on_created(data)
|
@@ -108,11 +100,11 @@ module JanusGateway::Plugin
|
|
108
100
|
destroy
|
109
101
|
end
|
110
102
|
|
111
|
-
|
103
|
+
emit :create
|
112
104
|
end
|
113
105
|
|
114
106
|
def _on_destroyed
|
115
|
-
|
107
|
+
emit :destroy
|
116
108
|
end
|
117
109
|
end
|
118
110
|
end
|
@@ -1,9 +1,14 @@
|
|
1
1
|
module JanusGateway
|
2
|
-
|
3
2
|
class Resource
|
4
|
-
|
5
3
|
include Events::Emitter
|
6
4
|
|
5
|
+
# @return [String, NilClass]
|
6
|
+
attr_reader :id
|
7
|
+
|
8
|
+
# @return [JanusGateway::Client]
|
9
|
+
attr_reader :client
|
10
|
+
|
11
|
+
# @return [String]
|
7
12
|
attr_accessor :id
|
8
13
|
|
9
14
|
# @param [JanusGateway::Client] client
|
@@ -13,25 +18,14 @@ module JanusGateway
|
|
13
18
|
@id = id
|
14
19
|
end
|
15
20
|
|
16
|
-
# @return [String, NilClass]
|
17
|
-
def id
|
18
|
-
@id
|
19
|
-
end
|
20
|
-
|
21
|
-
# @return [JanusGateway::Client]
|
22
|
-
def client
|
23
|
-
@client
|
24
|
-
end
|
25
|
-
|
26
21
|
# @return [Concurrent::Promise]
|
27
22
|
def create
|
28
|
-
|
23
|
+
fail("`#{__method__}` is not implemented for `#{self.class.name}`")
|
29
24
|
end
|
30
25
|
|
31
26
|
# @return [Concurrent::Promise]
|
32
27
|
def destroy
|
33
|
-
|
28
|
+
fail("`#{__method__}` is not implemented for `#{self.class.name}`")
|
34
29
|
end
|
35
|
-
|
36
30
|
end
|
37
31
|
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
module JanusGateway
|
2
|
-
|
3
2
|
class Resource::Plugin < Resource
|
3
|
+
# @return [JanusGateway::Resource::Session]
|
4
|
+
attr_reader :session
|
5
|
+
|
6
|
+
# @return [String]
|
7
|
+
attr_reader :name
|
4
8
|
|
5
9
|
# @param [JanusGateway::Client] client
|
6
10
|
# @param [JanusGateway::Resource::Session] session
|
@@ -12,21 +16,14 @@ module JanusGateway
|
|
12
16
|
super(client)
|
13
17
|
end
|
14
18
|
|
15
|
-
# @return [String]
|
16
|
-
def name
|
17
|
-
@name
|
18
|
-
end
|
19
|
-
|
20
19
|
# @return [Concurrent::Promise]
|
21
20
|
def create
|
22
21
|
promise = Concurrent::Promise.new
|
23
22
|
|
24
23
|
client.send_transaction(
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
:session_id => @session.id
|
29
|
-
}
|
24
|
+
janus: 'attach',
|
25
|
+
plugin: name,
|
26
|
+
session_id: @session.id
|
30
27
|
).then do |*args|
|
31
28
|
_on_created(*args)
|
32
29
|
|
@@ -47,26 +44,20 @@ module JanusGateway
|
|
47
44
|
promise
|
48
45
|
end
|
49
46
|
|
50
|
-
# @return [JanusGateway::Resource::Session]
|
51
|
-
def session
|
52
|
-
@session
|
53
|
-
end
|
54
|
-
|
55
47
|
private
|
56
48
|
|
57
49
|
def _on_created(data)
|
58
50
|
@id = data['data']['id']
|
59
51
|
|
60
|
-
session.on :destroy do |
|
52
|
+
session.on :destroy do |_data|
|
61
53
|
destroy
|
62
54
|
end
|
63
55
|
|
64
|
-
|
56
|
+
emit :create
|
65
57
|
end
|
66
58
|
|
67
59
|
def _on_destroyed
|
68
|
-
|
60
|
+
emit :destroy
|
69
61
|
end
|
70
|
-
|
71
62
|
end
|
72
63
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module JanusGateway
|
2
|
-
|
3
2
|
class Resource::Session < Resource
|
4
|
-
|
5
3
|
# @param [JanusGateway::Client] client
|
6
4
|
def initialize(client)
|
7
5
|
@heartbeat_thread = nil
|
@@ -14,9 +12,7 @@ module JanusGateway
|
|
14
12
|
promise = Concurrent::Promise.new
|
15
13
|
|
16
14
|
client.send_transaction(
|
17
|
-
|
18
|
-
:janus => 'create'
|
19
|
-
}
|
15
|
+
janus: 'create'
|
20
16
|
).then do |*args|
|
21
17
|
_on_created(*args)
|
22
18
|
heartbeat
|
@@ -34,11 +30,9 @@ module JanusGateway
|
|
34
30
|
promise = Concurrent::Promise.new
|
35
31
|
|
36
32
|
client.send_transaction(
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
}
|
41
|
-
).then do |*args|
|
33
|
+
janus: 'destroy',
|
34
|
+
session_id: id
|
35
|
+
).then do |*_args|
|
42
36
|
_on_destroyed
|
43
37
|
|
44
38
|
promise.set(self).execute
|
@@ -55,16 +49,14 @@ module JanusGateway
|
|
55
49
|
|
56
50
|
@heartbeat_thread = Thread.new do
|
57
51
|
sleep_time = 5
|
58
|
-
|
52
|
+
loop do
|
59
53
|
sleep(sleep_time)
|
60
54
|
client.send_transaction(
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
}
|
65
|
-
).then do |*args|
|
55
|
+
janus: 'keepalive',
|
56
|
+
session_id: id
|
57
|
+
).then do |*_args|
|
66
58
|
sleep_time = 30
|
67
|
-
end.rescue do |
|
59
|
+
end.rescue do |_error|
|
68
60
|
sleep_time = 1
|
69
61
|
end
|
70
62
|
end
|
@@ -77,27 +69,26 @@ module JanusGateway
|
|
77
69
|
def _on_created(data)
|
78
70
|
@id = data['data']['id']
|
79
71
|
|
80
|
-
client.on :message do |
|
81
|
-
if
|
72
|
+
client.on :message do |message|
|
73
|
+
if message['janus'] == 'timeout' && message['session_id'] == id
|
82
74
|
send(:_on_destroyed)
|
83
75
|
end
|
84
76
|
end
|
85
77
|
|
86
78
|
client.on :close do
|
87
|
-
|
79
|
+
emit :destroy
|
88
80
|
end
|
89
81
|
|
90
82
|
client.on :error do
|
91
|
-
|
83
|
+
emit :destroy
|
92
84
|
end
|
93
85
|
|
94
|
-
|
86
|
+
emit :create
|
95
87
|
end
|
96
88
|
|
97
89
|
def _on_destroyed
|
98
90
|
@heartbeat_thread.exit unless @heartbeat_thread.nil?
|
99
|
-
|
91
|
+
emit :destroy
|
100
92
|
end
|
101
|
-
|
102
93
|
end
|
103
94
|
end
|
@@ -1,35 +1,33 @@
|
|
1
1
|
module JanusGateway
|
2
|
-
|
3
2
|
class Transport
|
4
|
-
|
5
3
|
include Events::Emitter
|
6
4
|
|
7
5
|
def run
|
8
|
-
|
6
|
+
fail("`#{__method__}` is not implemented for `#{self.class.name}`")
|
9
7
|
end
|
10
8
|
|
11
9
|
def connect
|
12
|
-
|
10
|
+
fail("`#{__method__}` is not implemented for `#{self.class.name}`")
|
13
11
|
end
|
14
12
|
|
15
13
|
def disconnect
|
16
|
-
|
14
|
+
fail("`#{__method__}` is not implemented for `#{self.class.name}`")
|
17
15
|
end
|
18
16
|
|
19
17
|
# @param [Hash] data
|
20
|
-
def send(
|
21
|
-
|
18
|
+
def send(_data)
|
19
|
+
fail("`#{__method__}` is not implemented for `#{self.class.name}`")
|
22
20
|
end
|
23
21
|
|
24
22
|
# @param [Hash] data
|
25
23
|
# @return [Concurrent::Promise]
|
26
|
-
def send_transaction(
|
27
|
-
|
24
|
+
def send_transaction(_data)
|
25
|
+
fail("`#{__method__}` is not implemented for `#{self.class.name}`")
|
28
26
|
end
|
29
27
|
|
30
28
|
# @return [TrueClass, FalseClass]
|
31
|
-
def
|
32
|
-
|
29
|
+
def connected?
|
30
|
+
fail("`#{__method__}` is not implemented for `#{self.class.name}`")
|
33
31
|
end
|
34
32
|
|
35
33
|
# @return [String]
|
@@ -40,6 +38,5 @@ module JanusGateway
|
|
40
38
|
end
|
41
39
|
transaction_id
|
42
40
|
end
|
43
|
-
|
44
41
|
end
|
45
42
|
end
|
@@ -2,9 +2,7 @@ require 'eventmachine'
|
|
2
2
|
require 'faye/websocket'
|
3
3
|
|
4
4
|
module JanusGateway
|
5
|
-
|
6
5
|
class Transport::WebSocket < Transport
|
7
|
-
|
8
6
|
attr_reader :transaction_queue
|
9
7
|
|
10
8
|
# @param [String] url
|
@@ -13,23 +11,23 @@ module JanusGateway
|
|
13
11
|
@url = url
|
14
12
|
@protocol = protocol
|
15
13
|
@client = nil
|
16
|
-
@transaction_queue =
|
14
|
+
@transaction_queue = {}
|
17
15
|
end
|
18
16
|
|
19
17
|
def run
|
20
18
|
EventMachine.run do
|
21
|
-
EM.error_handler { |e|
|
19
|
+
EM.error_handler { |e| fail(e) }
|
22
20
|
connect
|
23
21
|
end
|
24
22
|
end
|
25
23
|
|
26
24
|
def connect
|
27
|
-
|
25
|
+
fail('WebSocket client already exists!') unless @client.nil?
|
28
26
|
|
29
27
|
@client = _create_client(@url, @protocol)
|
30
28
|
|
31
29
|
client.on :open do
|
32
|
-
|
30
|
+
emit :open
|
33
31
|
end
|
34
32
|
|
35
33
|
client.on :message do |event|
|
@@ -41,7 +39,7 @@ module JanusGateway
|
|
41
39
|
unless transaction_id.nil?
|
42
40
|
promise = transaction_list[transaction_id]
|
43
41
|
unless promise.nil?
|
44
|
-
if
|
42
|
+
if %w(success ack).include?(data['janus'])
|
45
43
|
promise.set(data).execute
|
46
44
|
else
|
47
45
|
error_data = data['error']
|
@@ -51,11 +49,11 @@ module JanusGateway
|
|
51
49
|
end
|
52
50
|
end
|
53
51
|
|
54
|
-
|
52
|
+
emit :message, data
|
55
53
|
end
|
56
54
|
|
57
55
|
client.on :close do
|
58
|
-
|
56
|
+
emit :close
|
59
57
|
end
|
60
58
|
end
|
61
59
|
|
@@ -81,8 +79,14 @@ module JanusGateway
|
|
81
79
|
promise.fail(error).execute
|
82
80
|
end
|
83
81
|
|
84
|
-
promise.then
|
85
|
-
|
82
|
+
promise.then do
|
83
|
+
@transaction_queue.remove(transaction)
|
84
|
+
thread.exit
|
85
|
+
end
|
86
|
+
promise.rescue do
|
87
|
+
@transaction_queue.remove(transaction)
|
88
|
+
thread.exit
|
89
|
+
end
|
86
90
|
|
87
91
|
promise
|
88
92
|
end
|
@@ -92,14 +96,12 @@ module JanusGateway
|
|
92
96
|
end
|
93
97
|
|
94
98
|
# @return [TrueClass, FalseClass]
|
95
|
-
def
|
96
|
-
!client.nil?
|
99
|
+
def connected?
|
100
|
+
!client.nil? && (client.ready_state == Faye::WebSocket::API::OPEN)
|
97
101
|
end
|
98
102
|
|
99
103
|
# @return [Faye::WebSocket::Client, NilClass]
|
100
|
-
|
101
|
-
@client
|
102
|
-
end
|
104
|
+
attr_reader :client
|
103
105
|
|
104
106
|
private
|
105
107
|
|
@@ -114,7 +116,5 @@ module JanusGateway
|
|
114
116
|
def _transaction_timeout
|
115
117
|
30
|
116
118
|
end
|
117
|
-
|
118
119
|
end
|
119
|
-
|
120
120
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: janus_gateway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cargo Media
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-
|
14
|
+
date: 2015-12-06 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: faye-websocket
|
@@ -97,6 +97,20 @@ dependencies:
|
|
97
97
|
- - "~>"
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '2.0'
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: rubocop
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0.35'
|
107
|
+
type: :development
|
108
|
+
prerelease: false
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - "~>"
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0.35'
|
100
114
|
description: janus-gateway API client
|
101
115
|
email: tech@cargomedia.ch
|
102
116
|
executables: []
|
@@ -136,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
150
|
version: '0'
|
137
151
|
requirements: []
|
138
152
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
153
|
+
rubygems_version: 2.4.8
|
140
154
|
signing_key:
|
141
155
|
specification_version: 4
|
142
156
|
summary: janus-gateway client
|