opentok 3.0.3 → 4.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/metrics.yml +17 -0
- data/.travis.yml +3 -1
- data/CODE_OF_CONDUCT.md +128 -0
- data/README.md +312 -28
- data/lib/opentok/archive.rb +45 -4
- data/lib/opentok/archives.rb +73 -5
- data/lib/opentok/broadcast.rb +118 -0
- data/lib/opentok/broadcasts.rb +149 -0
- data/lib/opentok/client.rb +212 -7
- data/lib/opentok/connections.rb +28 -0
- data/lib/opentok/constants.rb +1 -1
- data/lib/opentok/exceptions.rb +6 -0
- data/lib/opentok/opentok.rb +44 -10
- data/lib/opentok/session.rb +5 -0
- data/lib/opentok/signals.rb +47 -0
- data/lib/opentok/sip.rb +33 -0
- data/lib/opentok/stream.rb +46 -0
- data/lib/opentok/stream_list.rb +18 -0
- data/lib/opentok/streams.rb +79 -0
- data/lib/opentok/version.rb +1 -1
- data/opentok.gemspec +9 -8
- data/sample/Broadcast/Gemfile +4 -0
- data/sample/Broadcast/README.md +201 -0
- data/sample/Broadcast/broadcast_sample.rb +97 -0
- data/sample/Broadcast/public/css/sample.css +64 -0
- data/sample/Broadcast/public/js/host.js +185 -0
- data/sample/Broadcast/public/js/participant.js +85 -0
- data/sample/Broadcast/views/host.erb +82 -0
- data/sample/Broadcast/views/index.erb +32 -0
- data/sample/Broadcast/views/layout.erb +29 -0
- data/sample/Broadcast/views/participant.erb +27 -0
- data/sample/HelloWorld/public/js/helloworld.js +4 -10
- data/sample/HelloWorld/views/index.erb +1 -3
- data/spec/cassettes/OpenTok_Archives/calls_layout_on_archive_object.yml +47 -0
- data/spec/cassettes/OpenTok_Archives/changes_the_layout_of_an_archive.yml +38 -0
- data/spec/cassettes/OpenTok_Archives/http_client_errors/.yml +34 -0
- data/spec/cassettes/OpenTok_Archives/should_create_archives.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/should_create_audio_only_archives.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/should_create_custom_layout_archives.yml +50 -0
- data/spec/cassettes/OpenTok_Archives/should_create_hd_archives.yml +54 -0
- data/spec/cassettes/OpenTok_Archives/should_create_individual_archives.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/should_create_named_archives.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/should_delete_an_archive_by_id.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/should_find_archives_by_id.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/should_find_archives_with_unknown_properties.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/should_find_expired_archives.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/should_find_paused_archives_by_id.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/should_stop_archives.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_all_archives.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_archives_with_an_offset.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_count_number_of_archives.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_part_of_the_archives_when_using_offset_and_count.yml +3 -1
- data/spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_session_archives.yml +3 -1
- data/spec/cassettes/OpenTok_Broadcasts/calls_layout_on_broadcast_object.yml +57 -0
- data/spec/cassettes/OpenTok_Broadcasts/changes_the_layout_of_a_broadcast.yml +38 -0
- data/spec/cassettes/OpenTok_Broadcasts/fetches_a_hls_broadcast_url.yml +52 -0
- data/spec/cassettes/OpenTok_Broadcasts/finds_a_broadcast.yml +57 -0
- data/spec/cassettes/OpenTok_Broadcasts/starts_a_rtmp_broadcast.yml +61 -0
- data/spec/cassettes/OpenTok_Broadcasts/stops_a_broadcast.yml +47 -0
- data/spec/cassettes/OpenTok_Connections/forces_a_connection_to_be_terminated.yml +38 -0
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_always_archived_sessions.yml +3 -1
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_default_sessions.yml +3 -1
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_relayed_media_sessions.yml +3 -1
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_relayed_media_sessions_for_invalid_media_modes.yml +3 -1
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_relayed_media_sessions_with_a_location_hint.yml +3 -1
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_routed_media_sessions.yml +3 -1
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_routed_media_sessions_with_a_location_hint.yml +3 -1
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/_create_session/creates_sessions_with_a_location_hint.yml +3 -1
- data/spec/cassettes/OpenTok_OpenTok/when_initialized_properly/with_an_addendum_to_the_user_agent_string/should_append_the_addendum_to_the_user_agent_header.yml +3 -1
- data/spec/cassettes/OpenTok_Signals/receives_a_valid_response_for_a_connection.yml +39 -0
- data/spec/cassettes/OpenTok_Signals/receives_a_valid_response_for_all_connections.yml +39 -0
- data/spec/cassettes/OpenTok_Sip/receives_a_valid_response.yml +3 -1
- data/spec/cassettes/OpenTok_Streams/get_all_streams_information.yml +55 -0
- data/spec/cassettes/OpenTok_Streams/get_specific_stream_information.yml +44 -0
- data/spec/cassettes/OpenTok_Streams/layout_working_on_two_stream_list.yml +38 -0
- data/spec/opentok/archives_spec.rb +84 -1
- data/spec/opentok/broadcasts_spec.rb +171 -0
- data/spec/opentok/client_spec.rb +51 -0
- data/spec/opentok/connection_spec.rb +38 -0
- data/spec/opentok/opentok_spec.rb +21 -0
- data/spec/opentok/signal_spec.rb +50 -0
- data/spec/opentok/streams_spec.rb +75 -0
- data/spec/spec_helper.rb +2 -0
- metadata +84 -22
@@ -10,7 +10,9 @@ http_interactions:
|
|
10
10
|
User-Agent:
|
11
11
|
- OpenTok-Ruby-SDK/<%= version %>
|
12
12
|
X-Opentok-Auth:
|
13
|
-
-
|
13
|
+
- eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
|
14
|
+
Accept-Encoding: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
15
|
+
Accept: "*/*"
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
@@ -10,7 +10,9 @@ http_interactions:
|
|
10
10
|
User-Agent:
|
11
11
|
- OpenTok-Ruby-SDK/<%= version %>
|
12
12
|
X-Opentok-Auth:
|
13
|
-
-
|
13
|
+
- eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
|
14
|
+
Accept-Encoding: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
15
|
+
Accept: "*/*"
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
@@ -10,7 +10,9 @@ http_interactions:
|
|
10
10
|
User-Agent:
|
11
11
|
- OpenTok-Ruby-SDK/<%= version %>
|
12
12
|
X-Opentok-Auth:
|
13
|
-
-
|
13
|
+
- eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
|
14
|
+
Accept-Encoding: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
15
|
+
Accept: "*/*"
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
@@ -10,7 +10,9 @@ http_interactions:
|
|
10
10
|
User-Agent:
|
11
11
|
- OpenTok-Ruby-SDK/<%= version %>
|
12
12
|
X-Opentok-Auth:
|
13
|
-
-
|
13
|
+
- eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
|
14
|
+
Accept-Encoding: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
15
|
+
Accept: "*/*"
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
@@ -10,7 +10,9 @@ http_interactions:
|
|
10
10
|
User-Agent:
|
11
11
|
- OpenTok-Ruby-SDK/<%= version %>
|
12
12
|
X-Opentok-Auth:
|
13
|
-
-
|
13
|
+
- eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
|
14
|
+
Accept-Encoding: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
15
|
+
Accept: "*/*"
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
@@ -10,7 +10,9 @@ http_interactions:
|
|
10
10
|
User-Agent:
|
11
11
|
- OpenTok-Ruby-SDK/<%= version %>
|
12
12
|
X-Opentok-Auth:
|
13
|
-
-
|
13
|
+
- eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
|
14
|
+
Accept-Encoding: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
15
|
+
Accept: "*/*"
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
@@ -10,7 +10,9 @@ http_interactions:
|
|
10
10
|
User-Agent:
|
11
11
|
- OpenTok-Ruby-SDK/<%= version %> BOOYAH
|
12
12
|
X-Opentok-Auth:
|
13
|
-
-
|
13
|
+
- eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
|
14
|
+
Accept-Encoding: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
15
|
+
Accept: "*/*"
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
@@ -0,0 +1,39 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/connection/CONNID/signal
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"type":"chat","data":"Hello"}'
|
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: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
17
|
+
Accept: "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 204
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Tue, 28 Aug 2018 22:01:54 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/xml
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Content-Length:
|
32
|
+
- '177'
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><errorPayload><code>-1</code><message>Issuer
|
36
|
+
not found</message><description>Issuer not found</description></errorPayload>
|
37
|
+
http_version:
|
38
|
+
recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
|
39
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,39 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/signal
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"type":"chat","data":"Hello"}'
|
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: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
17
|
+
Accept: "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 204
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Tue, 28 Aug 2018 21:31:02 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/xml
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Content-Length:
|
32
|
+
- '177'
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><errorPayload><code>-1</code><message>Issuer
|
36
|
+
not found</message><description>Issuer not found</description></errorPayload>
|
37
|
+
http_version:
|
38
|
+
recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
|
39
|
+
recorded_with: VCR 2.8.0
|
@@ -10,9 +10,11 @@ http_interactions:
|
|
10
10
|
User-Agent:
|
11
11
|
- OpenTok-Ruby-SDK/<%= version %>
|
12
12
|
X-Opentok-Auth:
|
13
|
-
-
|
13
|
+
- eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
|
14
14
|
Content-Type:
|
15
15
|
- application/json
|
16
|
+
Accept-Encoding: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
17
|
+
Accept: "*/*"
|
16
18
|
response:
|
17
19
|
status:
|
18
20
|
code: 200
|
@@ -0,0 +1,55 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/stream
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
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: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
17
|
+
Accept: "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Mon, 24 Sep 2018 20:41:24 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Content-Length:
|
32
|
+
- '73'
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: |-
|
36
|
+
{
|
37
|
+
"count": 2,
|
38
|
+
"items": [
|
39
|
+
{
|
40
|
+
"id": "1234356-0a06-46a2-8ea8-074e64d43422",
|
41
|
+
"videoType": "camera",
|
42
|
+
"name": "",
|
43
|
+
"layoutClassList": ["full", "focus"]
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"id": "8b732909-0a06-46a2-8ea8-074e64d43422",
|
47
|
+
"videoType": "screen",
|
48
|
+
"name": "",
|
49
|
+
"layoutClassList": ["full"]
|
50
|
+
}
|
51
|
+
]
|
52
|
+
}
|
53
|
+
http_version:
|
54
|
+
recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
|
55
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/stream/STREAMID
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
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: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
17
|
+
Accept: "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Mon, 24 Sep 2018 20:41:24 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Content-Length:
|
32
|
+
- '0'
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: |-
|
36
|
+
{
|
37
|
+
"id": "8b732909-0a06-46a2-8ea8-074e64d43422",
|
38
|
+
"videoType": "camera",
|
39
|
+
"name": "",
|
40
|
+
"layoutClassList": ["full"]
|
41
|
+
}
|
42
|
+
http_version:
|
43
|
+
recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
|
44
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: put
|
5
|
+
uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/stream
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"items":[{"id":"8b732909-0a06-46a2-8ea8-074e64d43422","layoutClassList":["full"]},{"id":"8b732909-0a06-46a2-8ea8-074e64d43423","layoutClassList":["full","focus"]}]}'
|
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: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
|
17
|
+
Accept: "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Wed, 26 Sep 2018 22:48:29 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Content-Length:
|
32
|
+
- '73'
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: '{"code":-1,"message":"Issuer not found","description":"Issuer not found"}'
|
36
|
+
http_version:
|
37
|
+
recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
|
38
|
+
recorded_with: VCR 2.8.0
|
@@ -57,6 +57,16 @@ describe OpenTok::Archives do
|
|
57
57
|
expect(archive.output_mode).to eq :individual
|
58
58
|
end
|
59
59
|
|
60
|
+
it "should create custom layout archives", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
|
61
|
+
custom_layout = {
|
62
|
+
:type => "custom",
|
63
|
+
:stylesheet => "stream:last-child{display: block;margin: 0;top: 0;left: 0;width: 1px;height: 1px;}stream:first-child{display: block;margin: 0;top: 0;left: 0;width: 100%;height: 100%;}"
|
64
|
+
}
|
65
|
+
archive = archives.create session_id, :layout => custom_layout
|
66
|
+
expect(archive).to be_an_instance_of OpenTok::Archive
|
67
|
+
expect(archive.session_id).to eq session_id
|
68
|
+
end
|
69
|
+
|
60
70
|
it "should stop archives", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
|
61
71
|
archive = archives.stop_by_id started_archive_id
|
62
72
|
expect(archive).to be_an_instance_of OpenTok::Archive
|
@@ -78,7 +88,7 @@ describe OpenTok::Archives do
|
|
78
88
|
|
79
89
|
it "should delete an archive by id", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
|
80
90
|
success = archives.delete_by_id deletable_archive_id
|
81
|
-
expect(success).to
|
91
|
+
expect(success).to be_truthy
|
82
92
|
# expect(archive.status).to eq ""
|
83
93
|
end
|
84
94
|
|
@@ -93,6 +103,79 @@ describe OpenTok::Archives do
|
|
93
103
|
expect(archive).to be_an_instance_of OpenTok::Archive
|
94
104
|
end
|
95
105
|
|
106
|
+
it "should create hd archives", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
|
107
|
+
archive = archives.create session_id, { :output_mode => :composed, :resolution => "1280x720" }
|
108
|
+
expect(archive).to be_an_instance_of OpenTok::Archive
|
109
|
+
expect(archive.session_id).to eq session_id
|
110
|
+
expect(archive.output_mode).to eq :composed
|
111
|
+
expect(archive.resolution).to eq "1280x720"
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should create archives throws exception", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
|
115
|
+
opts = {
|
116
|
+
:output_mode => :individual,
|
117
|
+
:resolution => "1280x720"
|
118
|
+
}
|
119
|
+
|
120
|
+
expect { archives.create session_id, opts }.to raise_exception
|
121
|
+
end
|
122
|
+
|
123
|
+
it "raise an error if layout options are empty" do
|
124
|
+
expect {
|
125
|
+
archives.layout(started_archive_id, {})
|
126
|
+
}.to raise_error(ArgumentError)
|
127
|
+
end
|
128
|
+
|
129
|
+
it "raise an error if archive id is not provided" do
|
130
|
+
expect {
|
131
|
+
archives.layout("", {
|
132
|
+
type: "custom",
|
133
|
+
stylesheet: "the layout stylesheet (only used with type == custom)"
|
134
|
+
})
|
135
|
+
}.to raise_error(ArgumentError)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "raise an error if custom type has no style sheet" do
|
139
|
+
expect {
|
140
|
+
archives.layout(started_archive_id, {
|
141
|
+
type: "custom",
|
142
|
+
})
|
143
|
+
}.to raise_error(ArgumentError)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "raise an error if non-custom type has style sheet" do
|
147
|
+
expect {
|
148
|
+
archives.layout(started_archive_id, {
|
149
|
+
type: "pip",
|
150
|
+
stylesheet: "the layout stylesheet (only used with type == custom)"
|
151
|
+
})
|
152
|
+
}.to raise_error(ArgumentError)
|
153
|
+
end
|
154
|
+
|
155
|
+
it "raise an error if invalid layout type" do
|
156
|
+
expect {
|
157
|
+
archives.layout(started_archive_id, {
|
158
|
+
type: "pip1"
|
159
|
+
})
|
160
|
+
}.to raise_error(ArgumentError)
|
161
|
+
end
|
162
|
+
it "calls layout on archive object", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
|
163
|
+
archive = archives.find findable_archive_id
|
164
|
+
expect(archive).to be_an_instance_of OpenTok::Archive
|
165
|
+
expect(archive.id).to eq findable_archive_id
|
166
|
+
expect {
|
167
|
+
archive.layout(
|
168
|
+
type: 'pip1',
|
169
|
+
)
|
170
|
+
}.to raise_error(ArgumentError)
|
171
|
+
end
|
172
|
+
it "changes the layout of an archive", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
|
173
|
+
response = archives.layout(started_archive_id, {
|
174
|
+
type: "pip"
|
175
|
+
})
|
176
|
+
expect(response).not_to be_nil
|
177
|
+
end
|
178
|
+
|
96
179
|
# TODO: context "with a session that has no participants" do
|
97
180
|
# let(:session_id) { "" }
|
98
181
|
# it "should refuse to create archives with appropriate error" do
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require "opentok/broadcast"
|
2
|
+
require "opentok/broadcasts"
|
3
|
+
require "opentok/opentok"
|
4
|
+
require "opentok/version"
|
5
|
+
require "spec_helper"
|
6
|
+
|
7
|
+
describe OpenTok::Broadcasts do
|
8
|
+
before(:each) do
|
9
|
+
now = Time.parse("2017-04-18 20:17:40 +1000")
|
10
|
+
allow(Time).to receive(:now) { now }
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:api_key) { "123456" }
|
14
|
+
let(:api_secret) { "1234567890abcdef1234567890abcdef1234567890" }
|
15
|
+
let(:session_id) { "SESSIONID" }
|
16
|
+
let(:broadcast_id) { "BROADCASTID" }
|
17
|
+
let(:started_broadcast_id) { "13dbcc23-af92-4862-9184-74b21815a814" }
|
18
|
+
let(:opentok) { OpenTok::OpenTok.new api_key, api_secret }
|
19
|
+
let(:broadcast) { opentok.broadcasts }
|
20
|
+
|
21
|
+
subject { broadcast }
|
22
|
+
|
23
|
+
it 'raise an error on empty sessionId' do
|
24
|
+
opts = {
|
25
|
+
:outputs => {
|
26
|
+
:hls => {}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
expect {
|
30
|
+
broadcast.create('', opts)
|
31
|
+
}.to raise_error(ArgumentError)
|
32
|
+
end
|
33
|
+
it 'raise an error on nil sessionId' do
|
34
|
+
opts = {
|
35
|
+
:outputs => {
|
36
|
+
:hls => {}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
expect {
|
40
|
+
broadcast.create(nil, opts)
|
41
|
+
}.to raise_error(ArgumentError)
|
42
|
+
end
|
43
|
+
it 'raise an error on empty options' do
|
44
|
+
expect {
|
45
|
+
broadcast.create(nil, {})
|
46
|
+
}.to raise_error(ArgumentError)
|
47
|
+
end
|
48
|
+
it 'fetches a hls broadcast url', :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
|
49
|
+
opts = {
|
50
|
+
:outputs => {
|
51
|
+
:hls => {}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
b_hls = broadcast.create(session_id, opts)
|
55
|
+
expect(b_hls).to be_an_instance_of OpenTok::Broadcast
|
56
|
+
expect(b_hls.id).to eq broadcast_id
|
57
|
+
expect(b_hls.broadcastUrls['hls']).to eq "https://cdn-broadcast001-pdx.tokbox.com/14787/14787_b930bf08-1c9f-4c55-ab04-7d192578c057.smil/playlist.m3u8"
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'starts a rtmp broadcast', :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
|
61
|
+
opts = {
|
62
|
+
:outputs => {
|
63
|
+
:hls => {},
|
64
|
+
:rtmp => [
|
65
|
+
{
|
66
|
+
:id => "rubyTestStream",
|
67
|
+
:serverUrl => "rtmp://x.rtmp.youtube.com/live2",
|
68
|
+
:streamName => "66c9-jwuh-pquf-9x18"
|
69
|
+
}
|
70
|
+
]
|
71
|
+
}
|
72
|
+
}
|
73
|
+
b_rtmp = broadcast.create(session_id, opts)
|
74
|
+
expect(b_rtmp).to be_an_instance_of OpenTok::Broadcast
|
75
|
+
expect(b_rtmp.id).to eq broadcast_id
|
76
|
+
expect(b_rtmp.broadcastUrls["rtmp"][0]["serverUrl"]).to eq "rtmp://x.rtmp.youtube.com/live2"
|
77
|
+
expect(b_rtmp.broadcastUrls["rtmp"].count).to eq 1
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'finds a broadcast', :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
|
81
|
+
b = broadcast.find started_broadcast_id
|
82
|
+
expect(b).to be_an_instance_of OpenTok::Broadcast
|
83
|
+
expect(b.id).to eq started_broadcast_id
|
84
|
+
expect(b.broadcastUrls["rtmp"][0]["serverUrl"]).to eq "rtmp://x.rtmp.youtube.com/live2"
|
85
|
+
expect(b.broadcastUrls["rtmp"].count).to eq 1
|
86
|
+
end
|
87
|
+
it 'raise an error on empty broadcastId in find' do
|
88
|
+
expect {
|
89
|
+
broadcast.find("")
|
90
|
+
}.to raise_error(ArgumentError)
|
91
|
+
end
|
92
|
+
it 'raise an error on nil broadcastId in find' do
|
93
|
+
expect {
|
94
|
+
broadcast.find(nil)
|
95
|
+
}.to raise_error(ArgumentError)
|
96
|
+
end
|
97
|
+
it 'raise an error on empty broadcastId stop' do
|
98
|
+
expect {
|
99
|
+
broadcast.stop("")
|
100
|
+
}.to raise_error(ArgumentError)
|
101
|
+
end
|
102
|
+
it 'raise an error on nil broadcastId stop' do
|
103
|
+
expect {
|
104
|
+
broadcast.stop(nil)
|
105
|
+
}.to raise_error(ArgumentError)
|
106
|
+
end
|
107
|
+
it 'stops a broadcast', :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
|
108
|
+
b = broadcast.stop(started_broadcast_id)
|
109
|
+
expect(b).to be_an_instance_of OpenTok::Broadcast
|
110
|
+
expect(b.id).to eq started_broadcast_id
|
111
|
+
expect(b.broadcastUrls).to be_nil
|
112
|
+
expect(b.status).to eq "stopped"
|
113
|
+
end
|
114
|
+
|
115
|
+
it "raise an error if layout options are empty" do
|
116
|
+
expect {
|
117
|
+
broadcast.layout(started_broadcast_id, {})
|
118
|
+
}.to raise_error(ArgumentError)
|
119
|
+
end
|
120
|
+
|
121
|
+
it "raise an error if broadcast id is not provided" do
|
122
|
+
expect {
|
123
|
+
broadcast.layout("", {
|
124
|
+
type: "custom",
|
125
|
+
stylesheet: "the layout stylesheet (only used with type == custom)"
|
126
|
+
})
|
127
|
+
}.to raise_error(ArgumentError)
|
128
|
+
end
|
129
|
+
|
130
|
+
it "raise an error if custom type has no style sheet" do
|
131
|
+
expect {
|
132
|
+
broadcast.layout(started_broadcast_id, {
|
133
|
+
type: "custom",
|
134
|
+
})
|
135
|
+
}.to raise_error(ArgumentError)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "raise an error if non-custom type has style sheet" do
|
139
|
+
expect {
|
140
|
+
broadcast.layout(started_broadcast_id, {
|
141
|
+
type: "pip",
|
142
|
+
stylesheet: "the layout stylesheet (only used with type == custom)"
|
143
|
+
})
|
144
|
+
}.to raise_error(ArgumentError)
|
145
|
+
end
|
146
|
+
|
147
|
+
it "raise an error if invalid layout type" do
|
148
|
+
expect {
|
149
|
+
broadcast.layout(started_broadcast_id, {
|
150
|
+
type: "pip1"
|
151
|
+
})
|
152
|
+
}.to raise_error(ArgumentError)
|
153
|
+
end
|
154
|
+
it "calls layout on broadcast object", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
|
155
|
+
b = broadcast.find started_broadcast_id
|
156
|
+
expect(b).to be_an_instance_of OpenTok::Broadcast
|
157
|
+
expect(b.id).to eq started_broadcast_id
|
158
|
+
expect {
|
159
|
+
b.layout(
|
160
|
+
:type => 'pip1',
|
161
|
+
)
|
162
|
+
}.to raise_error(ArgumentError)
|
163
|
+
end
|
164
|
+
it "changes the layout of a broadcast", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
|
165
|
+
response = broadcast.layout(started_broadcast_id, {
|
166
|
+
:type => "verticalPresentation"
|
167
|
+
})
|
168
|
+
expect(response).not_to be_nil
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|