opentok 4.5.0 → 4.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +11 -0
- data/README.md +12 -3
- data/lib/opentok/client.rb +29 -0
- data/lib/opentok/exceptions.rb +2 -1
- data/lib/opentok/opentok.rb +6 -0
- data/lib/opentok/version.rb +1 -1
- data/lib/opentok/websocket.rb +37 -0
- data/opentok.gemspec +1 -0
- data/spec/cassettes/OpenTok_WebSocket/receives_a_valid_response.yml +37 -0
- data/spec/opentok/websocket_spec.rb +26 -0
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0021225949fed3de846b22c82a91de9a62d5b6a1dd3c272377cd96d0ebe0dffc'
|
4
|
+
data.tar.gz: acdc9387e49e85384f25970be630fcbd7a3d6d2e6abe335ed062c2b670eeaed9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8d9704ef411eae5a133ab8bd69846f6fc2f9a671e5480e033400abf157e984b2f3e06efbe5e57eac15a832baa95b7ce6b85e28b2fd5c46039a9407c764ab5e4
|
7
|
+
data.tar.gz: 63e762828405233f30260842206f837ef25ea1e3156dc5cc3ff339fc6fa46b5ce4eb99f0ebbf096e707c35719c191b2f419a0c31f06fb01e1332b6d8339e1c8c
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# 4.6.0
|
2
|
+
|
3
|
+
* Adds functionality for working with the Audio Connector feature [#247](https://github.com/opentok/OpenTok-Ruby-SDK/pull/247)
|
4
|
+
|
5
|
+
# 4.5.1
|
6
|
+
|
7
|
+
* Fixes issue with uninitialized constant by adding missing `require` statement [#256](https://github.com/opentok/OpenTok-Ruby-SDK/pull/256)
|
8
|
+
* Fixes RubyGems info by adding repo link to gemspec [#255](https://github.com/opentok/OpenTok-Ruby-SDK/pull/255)
|
9
|
+
|
10
|
+
Thanks to [`@sailor`](https://github.com/sailor) for the contributions! :raised_hands:
|
11
|
+
|
1
12
|
# 4.5.0
|
2
13
|
|
3
14
|
* Adds support for multiple archives and records feature [#248](https://github.com/opentok/OpenTok-Ruby-SDK/pull/248)
|
data/README.md
CHANGED
@@ -18,6 +18,7 @@ The OpenTok Ruby SDK provides methods for:
|
|
18
18
|
* [Disconnecting clients from sessions](https://tokbox.com/developer/guides/moderation/rest/)
|
19
19
|
* [Forcing clients in a session to disconnect or mute published audio](https://tokbox.com/developer/guides/moderation/)
|
20
20
|
* Working with OpenTok [Experience Composers](https://tokbox.com/developer/guides/experience-composer)
|
21
|
+
* Working with OpenTok [Audio Connector](https://tokbox.com/developer/guides/audio-connector)
|
21
22
|
|
22
23
|
## Installation
|
23
24
|
|
@@ -188,7 +189,10 @@ archive = opentok.archives.create session_id :output_mode => :individual
|
|
188
189
|
The `:output_mode => :composed` setting (the default) causes all streams in the archive to be
|
189
190
|
recorded to a single (composed) file.
|
190
191
|
|
191
|
-
For composed archives you can set the resolution of the archive, either "640x480"
|
192
|
+
For composed archives you can set the resolution of the archive, either "640x480"
|
193
|
+
(SD landscape, the default), "1280x720" (HD landscape), "1920x1080" (FHD landscape),
|
194
|
+
"480x640" (SD portrait), "720x1280" (HD portrait), or "1080x1920" (FHD portrait).
|
195
|
+
The `resolution` parameter is optional and could be included in the options
|
192
196
|
hash (second argument) of the `opentok.archives.create()` method.
|
193
197
|
|
194
198
|
```ruby
|
@@ -322,7 +326,7 @@ For more information on archiving, see the
|
|
322
326
|
|
323
327
|
### Signaling
|
324
328
|
|
325
|
-
You can send a signal using the `opentok.signals.send(session_id, connection_id, opts)` method.
|
329
|
+
You can send a signal using the `opentok.signals.send(session_id, connection_id, opts)` method.
|
326
330
|
If `connection_id` is nil or an empty string, then the signal is send to all valid connections in
|
327
331
|
the session.
|
328
332
|
|
@@ -457,7 +461,7 @@ You can cause a client to be forced to disconnect from a session by using the
|
|
457
461
|
|
458
462
|
### Forcing clients in a session to mute published audio
|
459
463
|
|
460
|
-
You can force the publisher of a specific stream to stop publishing audio using the
|
464
|
+
You can force the publisher of a specific stream to stop publishing audio using the
|
461
465
|
`opentok.streams.force_mute(session_id, stream_id)` method.
|
462
466
|
|
463
467
|
You can force the publisher of all streams in a session (except for an optional list of streams)
|
@@ -495,6 +499,11 @@ You can stop an Experience Composer by calling the `opentok.renders.stop(render_
|
|
495
499
|
You can get information about Experience Composers by calling the `opentok.renders.find(render_id)`
|
496
500
|
and `opentok.renders.list(options)` methods.
|
497
501
|
|
502
|
+
### Working with Audio Connector
|
503
|
+
|
504
|
+
You can start an [Audio Connector](https://tokbox.com/developer/guides/audio-connector) WebSocket
|
505
|
+
by calling the `opentok.websocket.connect()` method.
|
506
|
+
|
498
507
|
## Samples
|
499
508
|
|
500
509
|
There are three sample applications included in this repository. To get going as fast as possible, clone the whole
|
data/lib/opentok/client.rb
CHANGED
@@ -298,6 +298,35 @@ module OpenTok
|
|
298
298
|
raise OpenTokError, "Failed to connect to OpenTok. Response code: #{e.message}"
|
299
299
|
end
|
300
300
|
|
301
|
+
def connect_websocket(session_id, token, websocket_uri, opts)
|
302
|
+
opts.extend(HashExtensions)
|
303
|
+
body = { "sessionId" => session_id,
|
304
|
+
"token" => token,
|
305
|
+
"websocket" => { "uri" => websocket_uri }.merge(opts.camelize_keys!)
|
306
|
+
}
|
307
|
+
|
308
|
+
response = self.class.post("/v2/project/#{@api_key}/connect", {
|
309
|
+
:body => body.to_json,
|
310
|
+
:headers => generate_headers("Content-Type" => "application/json")
|
311
|
+
})
|
312
|
+
case response.code
|
313
|
+
when 200
|
314
|
+
response
|
315
|
+
when 400
|
316
|
+
raise ArgumentError, "One of the properties is invalid."
|
317
|
+
when 403
|
318
|
+
raise OpenTokAuthenticationError, "You are not authorized to start the call, check your authentication information."
|
319
|
+
when 409
|
320
|
+
raise OpenTokWebSocketError, "Conflict. Only routed sessions are allowed to initiate Connect Calls."
|
321
|
+
when 500
|
322
|
+
raise OpenTokError, "OpenTok server error."
|
323
|
+
else
|
324
|
+
raise OpenTokWebSocketError, "The WebSocket could not be connected"
|
325
|
+
end
|
326
|
+
rescue StandardError => e
|
327
|
+
raise OpenTokError, "Failed to connect to OpenTok. Response code: #{e.message}"
|
328
|
+
end
|
329
|
+
|
301
330
|
def dial(session_id, token, sip_uri, opts)
|
302
331
|
opts.extend(HashExtensions)
|
303
332
|
body = { "sessionId" => session_id,
|
data/lib/opentok/exceptions.rb
CHANGED
@@ -14,7 +14,8 @@ module OpenTok
|
|
14
14
|
class OpenTokStreamLayoutError < OpenTokError; end
|
15
15
|
# Defines errors raised when you perform Broadcast operations.
|
16
16
|
class OpenTokBroadcastError < OpenTokError; end
|
17
|
+
# Defines errors raised when connecting to WebSocket URIs.
|
18
|
+
class OpenTokWebSocketError < OpenTokError; end
|
17
19
|
# Defines errors raised when you perform Experience Composer render operations.
|
18
20
|
class OpenTokRenderError < OpenTokError; end
|
19
|
-
|
20
21
|
end
|
data/lib/opentok/opentok.rb
CHANGED
@@ -11,6 +11,7 @@ require "opentok/sip"
|
|
11
11
|
require "opentok/streams"
|
12
12
|
require "opentok/signals"
|
13
13
|
require "opentok/broadcasts"
|
14
|
+
require "opentok/renders"
|
14
15
|
|
15
16
|
module OpenTok
|
16
17
|
# Contains methods for creating OpenTok sessions and generating tokens. It also includes
|
@@ -217,6 +218,11 @@ module OpenTok
|
|
217
218
|
@connections ||= Connections.new client
|
218
219
|
end
|
219
220
|
|
221
|
+
# A WebSocket object, which lets you connect OpenTok streams to a WebSocket URI.
|
222
|
+
def websocket
|
223
|
+
@websocket ||= WebSocket.new client
|
224
|
+
end
|
225
|
+
|
220
226
|
protected
|
221
227
|
def client
|
222
228
|
@client ||= Client.new api_key, api_secret, api_url, ua_addendum, timeout_length: @timeout_length
|
data/lib/opentok/version.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require "opentok/client"
|
2
|
+
|
3
|
+
# An object that lets you work with Audio Connector WebSocket connections.
|
4
|
+
module OpenTok
|
5
|
+
class WebSocket
|
6
|
+
# Starts an Audio Connector WebSocket connection to send audio from a Vonage Video API session to a WebSocket URI.
|
7
|
+
# See the {https://tokbox.com/developer/guides/audio-connector/ OpenTok Audio Connector developer guide}.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# opts = {
|
11
|
+
# "streams" => ["STREAMID1", "STREAMID2"],
|
12
|
+
# "headers" => {
|
13
|
+
# "key1" => "val1",
|
14
|
+
# "key2" => "val2"
|
15
|
+
# }
|
16
|
+
# }
|
17
|
+
# response = opentok.websocket.connect(SESSIONID, TOKEN, "ws://service.com/wsendpoint", opts)
|
18
|
+
#
|
19
|
+
# @param [String] session_id (required) The OpenTok session ID that includes the OpenTok streams you want to include in
|
20
|
+
# the WebSocket stream.
|
21
|
+
# @param [String] token (required) The OpenTok token to be used for the Audio Connector connection to the. OpenTok session.
|
22
|
+
# @param [String] websocket_uri (required) A publicly reachable WebSocket URI to be used for the destination of the audio
|
23
|
+
# stream (such as "wss://service.com/ws-endpoint").
|
24
|
+
# @param [Hash] opts (optional) A hash defining options for the Audio Connector WebSocket connection. For example:
|
25
|
+
# @option opts [Array] :streams (optional) An array of stream IDs for the OpenTok streams you want to include in the WebSocket stream.
|
26
|
+
# If you omit this property, all streams in the session will be included.
|
27
|
+
# @option opts [Hash] :headers (optional) A hash of key-value pairs of headers to be sent to your WebSocket server with each message,
|
28
|
+
# with a maximum length of 512 bytes.
|
29
|
+
def connect(session_id, token, websocket_uri, opts = {})
|
30
|
+
response = @client.connect_websocket(session_id, token, websocket_uri, opts)
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(client)
|
34
|
+
@client = client
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/opentok.gemspec
CHANGED
@@ -10,6 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.description = %q{OpenTok is an API from TokBox that enables websites to weave live group video communication into their online experience. With OpenTok you have the freedom and flexibility to create the most engaging web experience for your users. This gem lets you generate sessions and tokens for OpenTok applications. It also includes support for working with OpenTok 2.0 archives. See <http://tokbox.com/opentok/platform> for more details.}
|
11
11
|
# TODO: this homepage isn't set up just yet
|
12
12
|
spec.homepage = "https://opentok.github.io/opentok-ruby-sdk"
|
13
|
+
spec.metadata = { "source_code_uri" => "https://github.com/opentok/OpenTok-Ruby-SDK" }
|
13
14
|
spec.license = "MIT"
|
14
15
|
|
15
16
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -0,0 +1,37 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.opentok.com/v2/project/123456/connect
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"sessionId":"SESSIONID","token":"TOKENID","websocket":{"uri":"ws://service.com/wsendpoint"}}'
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- OpenTok-Ruby-SDK/<%= version %>
|
12
|
+
X-Opentok-Auth:
|
13
|
+
- eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 200
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Sat, 06 Aug 2022 18:10:28 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json
|
29
|
+
Content-Length:
|
30
|
+
- '73'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: '{"id":"2299ba24-a6de-417c-88f7-28da54a441cf","connectionId":"833a7182-61a5-49d4-baae-c324b09953af"}'
|
36
|
+
recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
|
37
|
+
recorded_with: VCR 6.0.0
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "opentok/opentok"
|
2
|
+
require "opentok/websocket"
|
3
|
+
require "opentok/version"
|
4
|
+
require "spec_helper"
|
5
|
+
|
6
|
+
describe OpenTok::WebSocket do
|
7
|
+
before(:each) do
|
8
|
+
now = Time.parse("2017-04-18 20:17:40 +1000")
|
9
|
+
allow(Time).to receive(:now) { now }
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:api_key) { "123456" }
|
13
|
+
let(:api_secret) { "1234567890abcdef1234567890abcdef1234567890" }
|
14
|
+
let(:session_id) { "SESSIONID" }
|
15
|
+
let(:connection_id) { "CONNID" }
|
16
|
+
let(:expiring_token) { "TOKENID" }
|
17
|
+
let(:websocket_uri) { "ws://service.com/wsendpoint" }
|
18
|
+
let(:opentok) { OpenTok::OpenTok.new api_key, api_secret }
|
19
|
+
let(:websocket) { opentok.websocket }
|
20
|
+
subject { websocket }
|
21
|
+
|
22
|
+
it "receives a valid response", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
|
23
|
+
response = websocket.connect(session_id, expiring_token, websocket_uri)
|
24
|
+
expect(response).not_to be_nil
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opentok
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stijn Mathysen
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2023-03-09 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: bundler
|
@@ -206,6 +206,7 @@ files:
|
|
206
206
|
- lib/opentok/streams.rb
|
207
207
|
- lib/opentok/token_generator.rb
|
208
208
|
- lib/opentok/version.rb
|
209
|
+
- lib/opentok/websocket.rb
|
209
210
|
- opentok.gemspec
|
210
211
|
- sample/Archiving/Gemfile
|
211
212
|
- sample/Archiving/README.md
|
@@ -308,6 +309,7 @@ files:
|
|
308
309
|
- spec/cassettes/OpenTok_Streams/get_all_streams_information.yml
|
309
310
|
- spec/cassettes/OpenTok_Streams/get_specific_stream_information.yml
|
310
311
|
- spec/cassettes/OpenTok_Streams/layout_working_on_two_stream_list.yml
|
312
|
+
- spec/cassettes/OpenTok_WebSocket/receives_a_valid_response.yml
|
311
313
|
- spec/matchers/token.rb
|
312
314
|
- spec/opentok/archives_spec.rb
|
313
315
|
- spec/opentok/broadcasts_spec.rb
|
@@ -319,13 +321,15 @@ files:
|
|
319
321
|
- spec/opentok/signal_spec.rb
|
320
322
|
- spec/opentok/sip_spec.rb
|
321
323
|
- spec/opentok/streams_spec.rb
|
324
|
+
- spec/opentok/websocket_spec.rb
|
322
325
|
- spec/shared/opentok_generates_tokens.rb
|
323
326
|
- spec/shared/session_generates_tokens.rb
|
324
327
|
- spec/spec_helper.rb
|
325
328
|
homepage: https://opentok.github.io/opentok-ruby-sdk
|
326
329
|
licenses:
|
327
330
|
- MIT
|
328
|
-
metadata:
|
331
|
+
metadata:
|
332
|
+
source_code_uri: https://github.com/opentok/OpenTok-Ruby-SDK
|
329
333
|
post_install_message:
|
330
334
|
rdoc_options: []
|
331
335
|
require_paths:
|
@@ -417,6 +421,7 @@ test_files:
|
|
417
421
|
- spec/cassettes/OpenTok_Streams/get_all_streams_information.yml
|
418
422
|
- spec/cassettes/OpenTok_Streams/get_specific_stream_information.yml
|
419
423
|
- spec/cassettes/OpenTok_Streams/layout_working_on_two_stream_list.yml
|
424
|
+
- spec/cassettes/OpenTok_WebSocket/receives_a_valid_response.yml
|
420
425
|
- spec/matchers/token.rb
|
421
426
|
- spec/opentok/archives_spec.rb
|
422
427
|
- spec/opentok/broadcasts_spec.rb
|
@@ -428,6 +433,7 @@ test_files:
|
|
428
433
|
- spec/opentok/signal_spec.rb
|
429
434
|
- spec/opentok/sip_spec.rb
|
430
435
|
- spec/opentok/streams_spec.rb
|
436
|
+
- spec/opentok/websocket_spec.rb
|
431
437
|
- spec/shared/opentok_generates_tokens.rb
|
432
438
|
- spec/shared/session_generates_tokens.rb
|
433
439
|
- spec/spec_helper.rb
|