pili 1.0.1 → 1.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d391f0a344f58f8005ca7d9280ada460e944985a
4
- data.tar.gz: fd7f36ef373fb59bfd12dfb85852e040b046ba50
3
+ metadata.gz: cb22831f58fe2ba275e403086a5d6f582db1b276
4
+ data.tar.gz: 666a132c978cca3be0e787d7e5ce71c408019d52
5
5
  SHA512:
6
- metadata.gz: 7787e2bbd30689fcb4b30ee4490a799df75d572ec7070c66aa3605fa4a24d4e230c051c72e90749c280465ebdf912de8c0556606d894bab2e8982d82b0bc3425
7
- data.tar.gz: d10c030ea7a1be5f76cf9f13d4c52c522e9244e95bd23d3dac0d24faf2fb3d0187a097e3ead8cde07bd16e6afae896948f04a5f8ba5495c7d036e9f8327036d6
6
+ metadata.gz: 2f502768f7388d7bff3fa9af451282fcdc3080266ca13581cb3c51e4c8592e71fde7bde1be864d081cb4038c235b82596ee4f339acc6b33a049124925be3f55d
7
+ data.tar.gz: 185233ddbda8853da59537e5ce5f87f720cc40e33b05c71ac1fa3cb713d3db4eca2ceaf970a4e6de02e87faba0483fe1f6823bed6fcfcc97098d88d35fb1f2b3
data/README.md CHANGED
@@ -1,7 +1,36 @@
1
- # pili-ruby
2
- =========
3
-
4
- Pili SDK for Ruby.
1
+ # Pili server-side library for Ruby
2
+
3
+ ## Features
4
+
5
+ - [x] Stream operations (Create, Delete, Update, Get)
6
+ - [x] Get Streams list
7
+ - [x] Get Stream status
8
+ - [x] Get Stream segments
9
+ - [x] Generate RTMP publish URL
10
+ - [x] Generate RTMP / HLS live play URL
11
+ - [x] Generate HLS playback URL
12
+
13
+ ## Content
14
+
15
+ - [Installation](#installation)
16
+ - [Usage](#usage)
17
+ - [Configuration](#configuration)
18
+ - [Client](#client)
19
+ - [Create a Pili client](#create-a-pili-client)
20
+ - [Create a stream](#create-a-stream)
21
+ - [Get a stream](#get-a-stream)
22
+ - [List streams](#list-streams)
23
+ - [Stream](#stream)
24
+ - [Update a stream](#update-a-stream)
25
+ - [Delete a stream](#delete-a-stream)
26
+ - [Get stream segments](#get-stream-segments)
27
+ - [Get stream status](#get-stream-status)
28
+ - [Generate RTMP publish URL](#generate-rtmp-publish-url)
29
+ - [Generate RTMP live play URL](#generate-rtmp-live-play-urls)
30
+ - [Generate HLS live play URL](#generate-hls-live-play-url)
31
+ - [Generate HLS playback URL](#generate-hls-playback-url)
32
+ - [To JSON String](#to-json-string)
33
+ - [History](#history)
5
34
 
6
35
  ## Installation
7
36
 
@@ -17,6 +46,7 @@ Or install it yourself as:
17
46
 
18
47
  $ gem install pili
19
48
 
49
+
20
50
  ## Usage
21
51
 
22
52
  ### Configuration
@@ -24,134 +54,160 @@ Or install it yourself as:
24
54
  ```ruby
25
55
  require 'pili'
26
56
 
27
- Pili.setup! access_key: '<YOUR_APP_ACCESS_KEY>',
28
- secret_key: '<YOUR_APP_SECRET_KEY>'
29
- ```
30
-
31
- #### with rails:
57
+ ACCESS_KEY = 'qiniu_access_key'
58
+ SECRETE_KEY = 'qiniu_secret_key'
32
59
 
33
- You'll need to configure it in config/initializes/pili.rb
60
+ HUB_NAME = 'hub_name'
61
+ ```
34
62
 
63
+ ### Client
35
64
 
36
- ### Example
65
+ #### Create a Pili client
37
66
 
38
67
  ```ruby
39
- # Replace with your customized domains
40
- RTMP_PUBLISH_HOST = "xxx.pub.z1.pili.qiniup.com"
41
- RTMP_PLAY_HOST = "xxx.live1.z1.pili.qiniucdn.com"
42
- HLS_PLAY_HOST = "xxx.hls1.z1.pili.qiniucdn.com"
43
-
44
- # Replace with your hub name
45
- HUB_NAME = "hub_name"
68
+ client = Pili::Client.new(ACCESS_KEY, SECRETE_KEY, HUB_NAME)
69
+ # return client object...
46
70
  ```
47
71
 
48
-
49
- #### Create Stream
72
+ #### Create a stream
50
73
 
51
74
  ```ruby
52
- # HUB_NAME: string, required
53
75
  # title: optional, default is auto-generated
54
76
  # publish_key: optional, a secret key for signing the <publishToken>
55
77
  # publish_security: optional, can be "dynamic" or "static", default is "dynamic"
56
- Pili.create_stream(HUB_NAME, title: "test", publish_key: "werqwedsf", publish_security: "static")
78
+ client.create_stream(title: "title", publish_key: "publish_key", publish_security: "static")
79
+ # return stream object...
57
80
  ```
58
81
 
59
- #### Get Stream
82
+ #### Get a stream
60
83
 
61
84
  ```ruby
62
85
  # stream_id: string, required
63
- Pili.get_stream(stream_id)
86
+ client.get_stream(stream_id)
87
+ # return stream object...
64
88
  ```
65
89
 
66
- #### Get Stream Status
90
+ #### List streams
67
91
 
68
92
  ```ruby
69
- # stream_id: string, required
70
- Pili.get_stream_status(stream_id)
93
+ # marker: string, optional
94
+ # limit: integer, optional
95
+ client.list_streams(marker: "marker", limit: 1000)
71
96
  ```
72
97
 
73
- #### Update Stream
98
+ ### Stream
99
+
100
+ #### Update a stream
74
101
 
75
102
  ```ruby
76
- # stream_id: string, required
77
103
  # publish_key: optional, a secret key for signing the <publishToken>
78
104
  # publish_security: optional, can be "dynamic" or "static", default is "dynamic"
79
105
  # disabled: optional, can be true or false
80
- Pili.update_stream(stream_id, publish_key: "new_key", publish_security: "dynamic", disabled: true)
106
+ stream.update(publish_key: "new_key", publish_security: "dynamic", disabled: true)
107
+ # return updated stream object...
81
108
  ```
82
109
 
83
- #### Get Stream List
110
+ #### Delete a stream
84
111
 
85
112
  ```ruby
86
- # HUB_NAME: string, required
87
- # marker: string, optional
88
- # limit: integer, optional
89
- Pili.stream_list(HUB_NAME, marker: "marker", limit: 50)
113
+ stream.delete()
90
114
  ```
91
115
 
92
- #### Delete Stream
116
+ #### Get stream segments
93
117
 
94
118
  ```ruby
95
- # stream_id: string, required
96
- Pili.delete_stream(stream_id)
119
+ # start_second: integer, optional
120
+ # end_second: integer, optional
121
+ stream.segments(start_second, end_second)
122
+
123
+ # [
124
+ # {
125
+ # "start": <StartSecond>,
126
+ # "end": <EndSecond>
127
+ # },
128
+ # {
129
+ # "start": <StartSecond>,
130
+ # "end": <EndSecond>
131
+ # },
132
+ # ...
133
+ # ]
97
134
  ```
98
135
 
99
- #### Get Stream Segments
136
+ #### Get stream status
100
137
 
101
138
  ```ruby
102
- # stream_id: string, required
103
- # start_second, end_second: integer, optional
104
- Pili.get_stream_segments(stream_id, start_second: 1429678551, end_second: 1429689551)
139
+ stream.status()
140
+ # {
141
+ # "addr": "106.187.43.211:51393",
142
+ # "status": "disconnected"
143
+ # }
105
144
  ```
106
145
 
107
- #### Get Stream Publish URL
146
+ #### Generate RTMP publish URL
108
147
 
109
148
  ```ruby
110
- # RTMP_PUBLISH_HOST, string, required
111
- # stream_id: string, required
112
- # publish_key: string, required
113
- # publish_security: string, required
114
- # nonce: unix timestamp, optional
115
- Pili.get_stream_publish_url(RTMP_PUBLISH_HOST, stream_id, publish_key, publish_security, nonce)
149
+ stream.rtmp_publish_url()
150
+ # return a rtmp publish url, eg. "rtmp://test.qiniucdn.com/hubname/test?key=publish_test_key"
116
151
  ```
117
152
 
118
- #### Get Stream RTMP Live URL
153
+ #### Generate RTMP live play URLs
119
154
 
120
155
  ```ruby
121
- # RTMP_PLAY_HOST, string, required
122
- # stream_id: string, required
123
- # profile: string, optional
124
- Pili.get_stream_rtmp_live_url(RTMP_PLAY_HOST, stream_id, profile)
156
+ stream.rtmp_live_urls()
157
+ # return rtmp live play urls, eg.
158
+ # {
159
+ # "ORIGIN" => "rtmp://test.qiniucdn.com/hubname/test",
160
+ # "240p" => "rtmp://test.qiniucdn.com/hubname/test@240p",
161
+ # ...
162
+ # }
125
163
  ```
126
164
 
127
- #### Get Stream HLS Live URL
165
+ #### Generate HLS live play URLs
128
166
 
129
167
  ```ruby
130
- # HLS_PLAY_HOST, string, required
131
- # stream_id: string, required
132
- # profile: string, optional
133
- Pili.get_stream_hls_live_url(HLS_PLAY_HOST, stream_id, profile)
168
+ stream.hls_live_urls()
169
+ # return hls live play urls, eg.
170
+ # {
171
+ # "ORIGIN" => "http://test.qiniucdn.com/hubname/test.m3u8",
172
+ # "240p" => "http://test.qiniucdn.com/hubname/test@240p.m3u8"
173
+ # ...
174
+ # }
134
175
  ```
135
176
 
136
- #### Get Stream HLS Playback URL
177
+ #### Generate HLS playback URLs
137
178
 
138
179
  ```ruby
139
- # HLS_PLAY_HOST, string, required
140
- # stream_id: string, required
141
- # start_second, end_second: integer, required
142
- # profile: string, optional
143
- Pili.get_stream_hls_playback_url(HLS_PLAY_HOST, stream_id, start_second, end_second, profile)
180
+ stream.hls_playback_urls(start_second, end_second)
181
+ # return hls playback urls, eg.
182
+ # {
183
+ # "ORIGIN" => "http://test.qiniucdn.com/hubname/test.m3u8?start=1436843430&end=1436846938",
184
+ # "240p" => "http://test.qiniucdn.com/hubname/test@240p.m3u8?start=1436843430&end=1436846938"
185
+ # ...
186
+ # }
144
187
  ```
145
188
 
189
+ #### To JSON String
190
+ ```ruby
191
+ stream.to_json()
192
+ ```
146
193
 
147
- ## Contributing
148
-
149
- 1. Fork it
150
- 2. Create your feature branch (`git checkout -b my-new-feature`)
151
- 3. Commit your changes (`git commit -am 'Added some feature'`)
152
- 4. Push to the branch (`git push origin my-new-feature`)
153
- 5. Create new Pull Request
154
-
155
- ## Contributors
156
-
157
- See the [Contributors List](https://github.com/pili-io/pili-sdk-ruby/graphs/contributors).
194
+ ## History
195
+
196
+ - 2.0.0
197
+ - Add Client, Stream class
198
+ - 1.0.1
199
+ - Add get stream status method.
200
+ - Update update_stream method.
201
+ - 1.0.0
202
+ - Update README create stream example code.
203
+ - 0.1.3
204
+ - Update README create stream example code.
205
+ - 0.1.2
206
+ - Fix stream list method parameter type.
207
+ - 0.1.0
208
+ - Update README
209
+ - Update get milliseconds method
210
+ - 0.0.1
211
+ - Init SDK
212
+ - Add Stream API
213
+ - Add publish and play policy
data/lib/pili/api.rb ADDED
@@ -0,0 +1,74 @@
1
+ # coding: utf-8
2
+ require 'httparty'
3
+
4
+ module Pili
5
+ module API
6
+ class << self
7
+
8
+ def get(access_key, secret_key, url)
9
+ signature_options = {
10
+ :url => url,
11
+ :method => "GET"
12
+ }
13
+
14
+ encoded_sign = Auth.sign(secret_key, Auth.generate_signature(signature_options))
15
+
16
+ headers = { "Authorization" => "Qiniu #{access_key}:#{encoded_sign}" }
17
+
18
+ response = HTTParty.get(url, :headers => headers)
19
+
20
+ if response.code == 200
21
+ response.parsed_response
22
+ else
23
+ raise ResponseError.new("Pili API Request Error", response)
24
+ end
25
+ end
26
+
27
+
28
+ def post(access_key, secret_key, url, body)
29
+ signature_options = {
30
+ :url => url,
31
+ :content_type => "application/json",
32
+ :method => "POST",
33
+ :body => body
34
+ }
35
+
36
+ encoded_sign = Auth.sign(secret_key, Auth.generate_signature(signature_options))
37
+
38
+ headers = {
39
+ "Authorization" => "Qiniu #{access_key}:#{encoded_sign}",
40
+ "Content-Type" => "application/json"
41
+ }
42
+
43
+ response = HTTParty.post(url, :headers => headers, :body => body.to_json)
44
+
45
+ if response.code == 200
46
+ response.parsed_response
47
+ else
48
+ raise ResponseError.new("Pili API Request Error", response)
49
+ end
50
+ end
51
+
52
+
53
+ def delete(access_key, secret_key, url)
54
+ signature_options = {
55
+ :url => url,
56
+ :method => "DELETE"
57
+ }
58
+
59
+ encoded_sign = Auth.sign(secret_key, Auth.generate_signature(signature_options))
60
+
61
+ headers = { "Authorization" => "Qiniu #{access_key}:#{encoded_sign}" }
62
+
63
+ response = HTTParty.delete(url, :headers => headers)
64
+
65
+ if response.code == 204
66
+ response.parsed_response
67
+ else
68
+ raise ResponseError.new("Pili API Request Error", response)
69
+ end
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,48 @@
1
+ # coding: utf-8
2
+ module Pili
3
+ class Client
4
+
5
+ attr_reader :access_key, :secret_key, :hub_name
6
+
7
+
8
+ def initialize(access_key, secret_key, hub_name)
9
+ @access_key = access_key
10
+ @secret_key = secret_key
11
+ @hub_name = hub_name
12
+ end
13
+
14
+
15
+ def create_stream(options = {})
16
+ url = Config.api_base_url + "/streams"
17
+
18
+ body = {
19
+ :hub => @hub_name,
20
+ :title => options[:title],
21
+ :publishKey => options[:publish_key],
22
+ :publishSecurity => options[:publish_security] == "static" ? "static" : "dynamic",
23
+ :clientIp => options[:client_ip]
24
+ }
25
+
26
+ body.delete_if { |k, v| v.nil? }
27
+
28
+ Stream.new self, API.post(@access_key, @secret_key, url, body)
29
+ end
30
+
31
+
32
+ def get_stream(stream_id)
33
+ url = Config.api_base_url + "/streams/" + stream_id
34
+ Stream.new self, API.get(@access_key, @secret_key, url)
35
+ end
36
+
37
+
38
+ def list_streams(options = {})
39
+ url = Config.api_base_url + "/streams?hub=#{@hub_name}"
40
+
41
+ url += "&marker=#{options[:marker]}" unless Utils.blank?(options[:marker])
42
+ url += "&limit=#{options[:limit]}" if options[:limit].is_a?(Fixnum)
43
+
44
+ API.get(@access_key, @secret_key, url)
45
+ end
46
+
47
+ end
48
+ end
data/lib/pili/config.rb CHANGED
@@ -3,34 +3,20 @@ module Pili
3
3
  module Config
4
4
  class << self
5
5
 
6
- DEFAULT_OPTIONS = {
7
- :api_version => "v1",
8
- :api_scheme => "http",
9
- :api_host => "pili.qiniuapi.com"
10
- }
11
-
12
- REQUIRED_OPTION_KEYS = [:access_key, :secret_key]
13
-
14
- attr_reader :settings
15
-
16
- def init(options = {})
17
- @settings = DEFAULT_OPTIONS.merge!(options)
18
- REQUIRED_OPTION_KEYS.each do |opt|
19
- raise("You did not provide both required args. Please provide the #{opt}.") unless @settings.has_key?(opt)
20
- end
21
- @settings
22
- end
6
+ API_SCHEME = "http"
7
+ API_HOST = "pili.qiniuapi.com"
8
+ API_VERSION = "v1"
9
+
10
+ # def init(options = {})
11
+ # @settings = DEFAULT_OPTIONS.merge!(options)
12
+ # REQUIRED_OPTION_KEYS.each do |opt|
13
+ # raise("You did not provide both required args. Please provide the #{opt}.") unless @settings.has_key?(opt)
14
+ # end
15
+ # @settings
16
+ # end
23
17
 
24
18
  def api_base_url
25
- "#{settings[:api_scheme]}://#{settings[:api_host]}/#{settings[:api_version]}"
26
- end
27
-
28
- def access_key
29
- settings[:access_key]
30
- end
31
-
32
- def secret_key
33
- settings[:secret_key]
19
+ "#{API_SCHEME}://#{API_HOST}/#{API_VERSION}"
34
20
  end
35
21
 
36
22
  end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ module Pili
3
+ class ResponseError < Exception
4
+
5
+ attr_reader :response
6
+
7
+ def initialize(message, response = nil)
8
+ @response = response
9
+ super(message)
10
+ end
11
+
12
+ def http_code
13
+ @response.code if @response
14
+ end
15
+
16
+ def error_code
17
+ @response.parsed_response["error"] if @response
18
+ end
19
+
20
+ def error_message
21
+ @response.parsed_response["message"] if @response
22
+ end
23
+
24
+ def http_body
25
+ @response.body if @response
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,141 @@
1
+ # coding: utf-8
2
+ module Pili
3
+ class Stream
4
+
5
+ LIVE_URL_ORIGIN_KEY = "ORIGIN"
6
+
7
+ attr_reader :client
8
+ attr_reader :id, :created_at, :updated_at, :title, :hub, :profiles, :hosts
9
+
10
+ attr_accessor :publish_key, :publish_security, :disabled
11
+
12
+
13
+ def initialize(client, options = {})
14
+ @client = client
15
+ @id = options["id"]
16
+ @title = options["title"]
17
+ @hub = options["hub"]
18
+ @profiles = options["profiles"] || []
19
+ @publish_key = options["publishKey"]
20
+ @publish_security = options["publishSecurity"]
21
+ @disabled = options["disabled"]
22
+ @hosts = options["hosts"]
23
+
24
+ @created_at = options["createdAt"]
25
+ @updated_at = options["updatedAt"]
26
+ end
27
+
28
+
29
+ def status
30
+ url = Config.api_base_url + "/streams/#{@id}/status"
31
+ API.get(@client.access_key, @client.secret_key, url)
32
+ end
33
+
34
+
35
+ def update(options = {})
36
+ url = Config.api_base_url + "/streams/" + @id
37
+
38
+ body = {}
39
+ body[:publishKey] = options[:publish_key]
40
+ body[:publishSecurity] = options[:publish_security] == "static" ? "static" : "dynamic"
41
+ body[:disabled] = options[:disabled]
42
+
43
+ body.delete_if { |k, v| v.nil? }
44
+
45
+ stream = API.post(@client.access_key, @client.secret_key, url, body)
46
+
47
+ @publish_key = stream["publishKey"]
48
+ @publish_security = stream["publishSecurity"]
49
+ @disabled = stream["disabled"]
50
+ @updated_at = stream["updatedAt"]
51
+
52
+ self
53
+ end
54
+
55
+
56
+ def delete
57
+ url = Config.api_base_url + "/streams/" + @id
58
+ API.delete(@client.access_key, @client.secret_key, url)
59
+ end
60
+
61
+
62
+ def segments(options = {})
63
+ url = Config.api_base_url + "/streams/#{@id}/segments"
64
+
65
+ url += "?start=#{options[:start]}" if options[:start].is_a?(Fixnum)
66
+ url += "&end=#{options[:end]}" if options[:end].is_a?(Fixnum)
67
+
68
+ response = API.get(@client.access_key, @client.secret_key, url)
69
+ response["segments"] || []
70
+ end
71
+
72
+
73
+ def rtmp_publish_url
74
+ rtmp_publish_host = @hosts["publish"]["rtmp"]
75
+
76
+ if @publish_security == "static"
77
+ return "rtmp://#{rtmp_publish_host}/#{@hub}/#{@title}?key=#{@publish_key}"
78
+ else
79
+ nonce = (Time.now.to_f * 1000.0).to_i
80
+ token = Auth.sign(publish_key, "/#{@hub}/#{@title}?nonce=#{nonce}")
81
+ return "rtmp://#{rtmp_publish_host}/#{@hub}/#{@title}?nonce=#{nonce}&token=#{token}"
82
+ end
83
+ end
84
+
85
+
86
+ def rtmp_live_urls
87
+ rtmp_play_host = @hosts["play"]["rtmp"]
88
+
89
+ urls = { LIVE_URL_ORIGIN_KEY => "rtmp://#{rtmp_play_host}/#{@hub}/#{@title}" }
90
+
91
+ @profiles.each do |profile|
92
+ urls[profile] = "rtmp://#{rtmp_play_host}/#{@hub}/#{@title}@#{profile}"
93
+ end
94
+
95
+ urls
96
+ end
97
+
98
+
99
+ def hls_live_urls
100
+ hls_play_host = @hosts["play"]["hls"]
101
+
102
+ urls = { LIVE_URL_ORIGIN_KEY => "http://#{hls_play_host}/#{@hub}/#{@title}.m3u8" }
103
+
104
+ @profiles.each do |profile|
105
+ urls[profile] = "http://#{hls_play_host}/#{@hub}/#{@title}@#{profile}.m3u8"
106
+ end
107
+
108
+ urls
109
+ end
110
+
111
+
112
+ def hls_playback_urls(start_second, end_second)
113
+ hls_play_host = @hosts["play"]["hls"]
114
+
115
+ urls = { LIVE_URL_ORIGIN_KEY => "http://#{hls_play_host}/#{@hub}/#{@title}.m3u8?start=#{start_second}&end=#{end_second}" }
116
+
117
+ @profiles.each do |profile|
118
+ urls[profile] = "http://#{hls_play_host}/#{@hub}/#{@title}@#{profile}.m3u8?start=#{start_second}&end=#{end_second}"
119
+ end
120
+
121
+ urls
122
+ end
123
+
124
+
125
+ def to_json
126
+ {
127
+ id: @id,
128
+ title: @title,
129
+ hub: @hub,
130
+ profiles: @profiles,
131
+ publish_key: @publish_key,
132
+ publish_security: @publish_security,
133
+ disabled: @disabled,
134
+ hosts: @hosts,
135
+ created_at: @created_at,
136
+ updated_at: @updated_at
137
+ }.to_json
138
+ end
139
+
140
+ end
141
+ end
data/lib/pili/utils.rb CHANGED
@@ -8,11 +8,6 @@ module Pili
8
8
  arg.to_s.strip.length == 0
9
9
  end
10
10
 
11
- def get_stream_hub_and_title(stream_id)
12
- a = stream_id.split(".")
13
- [a[1], a[2]]
14
- end
15
-
16
11
  end
17
12
  end
18
13
  end
data/lib/pili/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pili
2
- VERSION = "1.0.1"
2
+ VERSION = "1.2.0"
3
3
  end
data/lib/pili.rb CHANGED
@@ -4,143 +4,12 @@ require 'httparty'
4
4
  require "pili/version"
5
5
 
6
6
  module Pili
7
- autoload :Auth, 'pili/auth'
8
- autoload :Config, 'pili/config'
9
- autoload :HTTP, 'pili/http'
10
- autoload :Utils, 'pili/utils'
11
-
12
- class << self
13
-
14
- def setup!(options = {})
15
- Config.init(options)
16
- end
17
-
18
-
19
- def stream_list(hub, options = {})
20
- url = Config.api_base_url + "/streams?hub=#{hub}"
21
-
22
- url += "&marker=#{options[:marker]}" unless Utils.blank?(options[:marker])
23
- url += "&limit=#{options[:limit]}" if options[:limit].is_a?(Fixnum)
24
-
25
- response = HTTP.api_get(url)
26
- response.parsed_response
27
- end
28
-
29
-
30
- def create_stream(hub, options = {})
31
- url = Config.api_base_url + "/streams"
32
-
33
- body = {
34
- :hub => hub,
35
- :title => options[:title],
36
- :publishKey => options[:publish_key],
37
- :publishSecurity => options[:publish_security] == "static" ? "static" : "dynamic",
38
- :clientIp => options[:client_ip]
39
- }
40
-
41
- body.delete_if { |k, v| v.nil? }
42
-
43
- response = HTTP.api_post(url, body)
44
- response.parsed_response
45
- end
46
-
47
-
48
- def get_stream(stream_id)
49
- url = Config.api_base_url + "/streams/" + stream_id
50
- response = HTTP.api_get(url)
51
- response.parsed_response
52
- end
53
-
54
-
55
- def get_stream_status(stream_id)
56
- url = Config.api_base_url + "/streams/#{stream_id}/status"
57
- response = HTTP.api_get(url)
58
- response.parsed_response
59
- end
60
-
61
-
62
- def update_stream(stream_id, options = {})
63
- url = Config.api_base_url + "/streams/" + stream_id
64
-
65
- body = {
66
- :publishKey => options[:publish_key],
67
- :publishSecurity => options[:publish_security] == "static" ? "static" : "dynamic",
68
- :disabled => options[:disabled]
69
- }
70
-
71
- body.delete_if { |k, v| v.nil? }
72
-
73
- response = HTTP.api_post(url, body)
74
- response.parsed_response
75
- end
76
-
77
-
78
- def delete_stream(stream_id)
79
- url = Config.api_base_url + "/streams/" + stream_id
80
- response = HTTP.api_delete(url)
81
- response.parsed_response
82
- end
83
-
84
-
85
- def get_stream_segments(stream_id, options = {})
86
- url = Config.api_base_url + "/streams/#{stream_id}/segments"
87
-
88
- url += "?start=#{options[:start]}" if options[:start].is_a?(Fixnum)
89
- url += "&end=#{options[:end]}" if options[:end].is_a?(Fixnum)
90
-
91
- response = HTTP.api_get(url)
92
- response.parsed_response
93
- end
94
-
95
-
96
- def get_stream_publish_url(publish_host, stream_id, publish_key, publish_security, nonce = nil)
97
- nonce = nonce.to_i
98
- nonce = (Time.now.to_f * 1000.0).to_i if nonce == 0
99
-
100
- hub, title = Utils.get_stream_hub_and_title(stream_id)
101
-
102
- if publish_security == "static"
103
- return "rtmp://#{publish_host}/#{hub}/#{title}?key=#{publish_key}"
104
- else
105
- token = Auth.sign(publish_key, "/#{hub}/#{title}?nonce=#{nonce}")
106
- return "rtmp://#{publish_host}/#{hub}/#{title}?nonce=#{nonce}&token=#{token}"
107
- end
108
- end
109
-
110
-
111
- def get_stream_rtmp_live_url(play_host, stream_id, preset = nil)
112
- hub, title = Utils.get_stream_hub_and_title(stream_id)
113
-
114
- if Utils.blank? preset
115
- return "rtmp://#{play_host}/#{hub}/#{title}"
116
- else
117
- return "rtmp://#{play_host}/#{hub}/#{title}@#{preset}"
118
- end
119
- end
120
-
121
-
122
- def get_stream_hls_live_url(play_host, stream_id, preset = nil)
123
- hub, title = Utils.get_stream_hub_and_title(stream_id)
124
-
125
- if Utils.blank? preset
126
- return "http://#{play_host}/#{hub}/#{title}.m3u8"
127
- else
128
- return "http://#{play_host}/#{hub}/#{title}@#{preset}.m3u8"
129
- end
130
- end
131
-
132
-
133
- def get_stream_hls_playback_url(play_host, stream_id, start_second, end_second, preset = nil)
134
- hub, title = Utils.get_stream_hub_and_title(stream_id)
135
-
136
- if Utils.blank? preset
137
- return "http://#{play_host}/#{hub}/#{title}.m3u8?start=#{start_second}&end=#{end_second}"
138
- else
139
- return "http://#{play_host}/#{hub}/#{title}@#{preset}.m3u8?start=#{start_second}&end=#{end_second}"
140
- end
141
- end
142
-
143
-
144
- end
145
-
146
- end
7
+ autoload :Auth, 'pili/auth'
8
+ autoload :Config, 'pili/config'
9
+ autoload :API, 'pili/api'
10
+ autoload :Utils, 'pili/utils'
11
+ autoload :ResponseError, 'pili/exceptions'
12
+
13
+ autoload :Client, 'pili/client'
14
+ autoload :Stream, 'pili/stream'
15
+ end
data/pili.gemspec CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Miclle"]
10
10
  spec.email = ["pili@qiniu.com"]
11
11
  spec.summary = %q{Pili SDK for Ruby.}
12
- spec.description = %q{Pili SDK for Ruby. https://github.com/pili-io/pili-sdk-ruby}
13
- spec.homepage = "https://github.com/pili-io/pili-sdk-ruby"
12
+ spec.description = %q{Pili SDK for Ruby. https://github.com/pili-engineering/pili-sdk-ruby}
13
+ spec.homepage = "https://github.com/pili-engineering/pili-sdk-ruby"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pili
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miclle
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-26 00:00:00.000000000 Z
11
+ date: 2015-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.13.3
55
- description: Pili SDK for Ruby. https://github.com/pili-io/pili-sdk-ruby
55
+ description: Pili SDK for Ruby. https://github.com/pili-engineering/pili-sdk-ruby
56
56
  email:
57
57
  - pili@qiniu.com
58
58
  executables: []
@@ -66,13 +66,16 @@ files:
66
66
  - README.md
67
67
  - Rakefile
68
68
  - lib/pili.rb
69
+ - lib/pili/api.rb
69
70
  - lib/pili/auth.rb
71
+ - lib/pili/client.rb
70
72
  - lib/pili/config.rb
71
- - lib/pili/http.rb
73
+ - lib/pili/exceptions.rb
74
+ - lib/pili/stream.rb
72
75
  - lib/pili/utils.rb
73
76
  - lib/pili/version.rb
74
77
  - pili.gemspec
75
- homepage: https://github.com/pili-io/pili-sdk-ruby
78
+ homepage: https://github.com/pili-engineering/pili-sdk-ruby
76
79
  licenses:
77
80
  - MIT
78
81
  metadata: {}
data/lib/pili/http.rb DELETED
@@ -1,62 +0,0 @@
1
- # coding: utf-8
2
- require 'httparty'
3
-
4
- module Pili
5
- class HTTP
6
-
7
- include HTTParty
8
- format :json
9
-
10
- class << self
11
-
12
- def api_get(url)
13
- signature_options = {
14
- :url => url,
15
- :method => "GET"
16
- }
17
-
18
- encoded_sign = Auth.sign(Config.secret_key, Auth.generate_signature(signature_options))
19
-
20
- headers = { "Authorization" => "Qiniu #{Config.access_key}:#{encoded_sign}" }
21
-
22
- get(url, :headers => headers)
23
- end
24
-
25
-
26
- def api_post(url, body)
27
- signature_options = {
28
- :url => url,
29
- :content_type => "application/json",
30
- :method => "POST",
31
- :body => body
32
- }
33
-
34
- encoded_sign = Auth.sign(Config.secret_key, Auth.generate_signature(signature_options))
35
-
36
- headers = {
37
- "Authorization" => "Qiniu #{Config.access_key}:#{encoded_sign}",
38
- "Content-Type" => "application/json"
39
- }
40
-
41
- post(url, :headers => headers, :body => body.to_json)
42
- end
43
-
44
-
45
- def api_delete(url)
46
- signature_options = {
47
- :url => url,
48
- :method => "DELETE"
49
- }
50
-
51
- encoded_sign = Auth.sign(Config.secret_key, Auth.generate_signature(signature_options))
52
-
53
- headers = { "Authorization" => "Qiniu #{Config.access_key}:#{encoded_sign}" }
54
-
55
- delete(url, :headers => headers)
56
- end
57
-
58
-
59
- end
60
-
61
- end
62
- end