ruby_onvif_client 0.0.3 → 0.0.4
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/lib/ruby_onvif_client.rb +1 -0
- data/lib/ruby_onvif_client/action.rb +8 -0
- data/lib/ruby_onvif_client/media/get_audio_encoder_configuration.rb +1 -1
- data/lib/ruby_onvif_client/media/get_audio_encoder_configuration_options.rb +1 -1
- data/lib/ruby_onvif_client/media/get_audio_encoder_configurations.rb +1 -1
- data/lib/ruby_onvif_client/media/get_audio_source_configurations.rb +1 -1
- data/lib/ruby_onvif_client/media/get_profiles.rb +269 -0
- data/lib/ruby_onvif_client/media/get_stream_uri.rb +1 -1
- data/lib/ruby_onvif_client/media/get_video_encoder_configuration.rb +14 -48
- data/lib/ruby_onvif_client/media/get_video_encoder_configuration_options.rb +16 -13
- data/lib/ruby_onvif_client/media/get_video_source_configuration.rb +1 -1
- data/lib/ruby_onvif_client/media/get_video_source_configurations.rb +1 -1
- data/ruby-onvif-client.gemspec +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26111b2bbab6d053cd761d5e8f3ce694555a3820
|
4
|
+
data.tar.gz: 177d799002e666078f5e9745597e991b335bbb59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebefbbcb4ad636628332356be467704039375cc343402a05a8ee717731f512d93c8b92280ebff1d69d9712e3271e5eed4bfa10e43583e6d06aa7bc1918b61416
|
7
|
+
data.tar.gz: de0d5b0cdf6eca5792d6eb5d46fcbd9c165590d477c8adf3b6846727f168fc0e97777b7411b9e2a2b71079107929bce4f50507c1eedabad3befa72792e5d9203
|
data/lib/ruby_onvif_client.rb
CHANGED
@@ -27,5 +27,13 @@ module ONVIF
|
|
27
27
|
return node unless node.nil?
|
28
28
|
''
|
29
29
|
end
|
30
|
+
|
31
|
+
def create_media_onvif_message options = {}
|
32
|
+
namespaces = {
|
33
|
+
:'xmlns:wsdl' => "http://www.onvif.org/ver10/media/wsdl"
|
34
|
+
}.merge(options[:namespaces] || {})
|
35
|
+
options[:namespaces] = namespaces
|
36
|
+
Message.new options
|
37
|
+
end
|
30
38
|
end
|
31
39
|
end
|
@@ -7,7 +7,7 @@ module ONVIF
|
|
7
7
|
# c_token //[ReferenceToken] Token of the requested audio encoder configuration.
|
8
8
|
#
|
9
9
|
def run c_token, cb
|
10
|
-
message =
|
10
|
+
message = create_media_onvif_message
|
11
11
|
message.body = ->(xml) do
|
12
12
|
xml.wsdl(:GetAudioEncoderConfiguration) do
|
13
13
|
xml.wsdl :ConfigurationToken, c_token
|
@@ -9,7 +9,7 @@ module ONVIF
|
|
9
9
|
# p_token: "xxxxxxx" //[ReferenceToken] Optional ProfileToken that specifies an existing media profile that the options shall be compatible with.
|
10
10
|
# }
|
11
11
|
def run options, cb
|
12
|
-
message =
|
12
|
+
message = create_media_onvif_message
|
13
13
|
message.body = ->(xml) do
|
14
14
|
xml.wsdl(:GetAudioEncoderConfigurationOptions) do
|
15
15
|
xml.wsdl :ConfigurationToken, options["c_token"]
|
@@ -0,0 +1,269 @@
|
|
1
|
+
require_relative '../action'
|
2
|
+
|
3
|
+
module ONVIF
|
4
|
+
module MediaAction
|
5
|
+
class GetProfiles < Action
|
6
|
+
def run cb
|
7
|
+
message = create_media_onvif_message
|
8
|
+
message.body = ->(xml) do
|
9
|
+
xml.wsdl(:GetProfiles)
|
10
|
+
end
|
11
|
+
send_message message do |success, result|
|
12
|
+
if success
|
13
|
+
xml_doc = Nokogiri::XML(result[:content])
|
14
|
+
profiles = []
|
15
|
+
xml_doc.xpath('//trt:Profiles').each do |root_node|
|
16
|
+
video_source = root_node.at_xpath("tt:VideoSourceConfiguration")
|
17
|
+
audio_source = root_node.at_xpath("tt:AudioSourceConfiguration")
|
18
|
+
video_encoder = root_node.at_xpath("tt:VideoEncoderConfiguration")
|
19
|
+
audio_encoder = root_node.at_xpath("tt:AudioEncoderConfiguration")
|
20
|
+
video_analytics = root_node.at_xpath("tt:VideoAnalyticsConfiguration")
|
21
|
+
ptz = root_node.at_xpath("tt:PTZConfiguration")
|
22
|
+
metadata = root_node.at_xpath("tt:MetadataConfiguration")
|
23
|
+
success_result = {
|
24
|
+
name: _get_name(root_node),
|
25
|
+
token: _get_token(root_node),
|
26
|
+
fixed: attribute(root_node, "fixed"),
|
27
|
+
extension: ""
|
28
|
+
}
|
29
|
+
success_result["video_source_configuration"] = _get_video_source_configuration(video_source) unless video_source.nil?
|
30
|
+
success_result["audio_source_configuration"] = _get_audio_source_configuration(audio_source) unless audio_source.nil?
|
31
|
+
success_result["video_encoder_configuration"] = _get_video_encoder_configuration(video_encoder) unless video_encoder.nil?
|
32
|
+
success_result["audio_encoder_configuration"] = _get_audio_encoder_configuration(audio_encoder) unless audio_encoder.nil?
|
33
|
+
success_result["video_analytics_configuration"] = _get_video_analytics_configuration(video_analytics) unless video_analytics.nil?
|
34
|
+
success_result["ptz_configuration"] = _get_ptz_configuration(ptz) unless ptz.nil?
|
35
|
+
success_result["metadata_configuration"] = _get_metadata_configuration(metadata) unless metadata.nil?
|
36
|
+
profiles << success_result
|
37
|
+
end
|
38
|
+
callback cb, success, profiles
|
39
|
+
else
|
40
|
+
callback cb, success, result
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def _get_node parent_node, node_name
|
46
|
+
parent_node.at_xpath(node_name)
|
47
|
+
end
|
48
|
+
def _get_name parent_node
|
49
|
+
value(parent_node, "tt:Name")
|
50
|
+
end
|
51
|
+
def _get_use_count parent_node
|
52
|
+
value(parent_node, "tt:UseCount")
|
53
|
+
end
|
54
|
+
def _get_token parent_node
|
55
|
+
attribute(parent_node, "token")
|
56
|
+
end
|
57
|
+
def _get_min_max xml_doc, parent_name
|
58
|
+
this_node = xml_doc
|
59
|
+
unless parent_name.nil?
|
60
|
+
this_node = xml_doc.at_xpath(parent_name)
|
61
|
+
end
|
62
|
+
return {
|
63
|
+
min: value(this_node, "tt:Min"),
|
64
|
+
max: value(this_node, "tt:Max")
|
65
|
+
}
|
66
|
+
end
|
67
|
+
def _get_public_sector parent_node
|
68
|
+
{
|
69
|
+
name: _get_name(parent_node),
|
70
|
+
token: _get_token(parent_node),
|
71
|
+
use_count: _get_use_count(parent_node)
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
def _get_video_source_configuration parent_node
|
76
|
+
configuration = _get_public_sector(parent_node)
|
77
|
+
configuration["source_token"] = value(parent_node, "tt:SourceToken")
|
78
|
+
bounds = parent_node.at_xpath("tt:Bounds")
|
79
|
+
configuration["bounds"] = {
|
80
|
+
x: attribute(bounds, "x"),
|
81
|
+
y: attribute(bounds, "y"),
|
82
|
+
width: attribute(bounds, "width"),
|
83
|
+
height: attribute(bounds, "height")
|
84
|
+
}
|
85
|
+
return configuration
|
86
|
+
end
|
87
|
+
|
88
|
+
def _get_audio_source_configuration parent_node
|
89
|
+
configuration = _get_public_sector(parent_node)
|
90
|
+
configuration["source_token"] = value(parent_node, "tt:SourceToken")
|
91
|
+
return configuration
|
92
|
+
end
|
93
|
+
|
94
|
+
def _get_video_encoder_configuration parent_node
|
95
|
+
configuration = _get_public_sector(parent_node)
|
96
|
+
configuration["encoding"] = value(parent_node, "tt:Encoding")
|
97
|
+
configuration["resolution"] = {
|
98
|
+
width: value(_get_node(parent_node, "tt:Resolution"), "tt:Width"),
|
99
|
+
height: value(_get_node(parent_node, "tt:Resolution"), "tt:Height")
|
100
|
+
}
|
101
|
+
configuration["quality"] = value(parent_node, "tt:Quality")
|
102
|
+
configuration["rate_control"] = {
|
103
|
+
frame_rate_limit: value(_get_node(parent_node, "tt:RateControl"), "tt:FrameRateLimit"),
|
104
|
+
encoding_interval: value(_get_node(parent_node, "tt:RateControl"), "tt:EncodingInterval"),
|
105
|
+
bitrate_limit: value(_get_node(parent_node, "tt:RateControl"), "tt:BitrateLimit")
|
106
|
+
}
|
107
|
+
unless parent_node.at_xpath('//tt:MPEG4').nil?
|
108
|
+
configuration["MPEG4"] = {
|
109
|
+
gov_length: value(_get_node(parent_node, "tt:MPEG4"), "tt:GovLength"),
|
110
|
+
mpeg4_profile: value(_get_node(parent_node, "tt:MPEG4"), "tt:Mpeg4Profile")
|
111
|
+
}
|
112
|
+
end
|
113
|
+
unless parent_node.at_xpath('//tt:H264').nil?
|
114
|
+
configuration["H264"] = {
|
115
|
+
gov_length: value(_get_node(parent_node, "tt:H264"), "tt:GovLength"),
|
116
|
+
h264_profile: value(_get_node(parent_node, "tt:H264"), "tt:H264Profile")
|
117
|
+
}
|
118
|
+
end
|
119
|
+
configuration["multicast"] = _get_multicast(parent_node)
|
120
|
+
configuration["session_timeout"] = value(parent_node, "tt:SessionTimeout")
|
121
|
+
return configuration
|
122
|
+
end
|
123
|
+
|
124
|
+
def _get_audio_encoder_configuration parent_node
|
125
|
+
configuration = _get_public_sector(parent_node)
|
126
|
+
configuration["encoding"] = value(parent_node, "tt:Encoding")
|
127
|
+
configuration["bitrate"] = value(parent_node, "tt:Bitrate")
|
128
|
+
configuration["sample_rate"] = value(parent_node, "tt:SampleRate")
|
129
|
+
configuration["multicast"] = _get_multicast(parent_node)
|
130
|
+
configuration["session_timeout"] = value(parent_node, "tt:SessionTimeout")
|
131
|
+
return configuration
|
132
|
+
end
|
133
|
+
|
134
|
+
def _get_video_analytics_configuration parent_node
|
135
|
+
configuration = _get_public_sector(parent_node)
|
136
|
+
analytics_module = []; rule = []
|
137
|
+
parent_node.at_xpath("tt:AnalyticsEngineConfiguration//tt:AnalyticsModule").each do |node|
|
138
|
+
analytics_module << {
|
139
|
+
name: attribute(node, "Name"),
|
140
|
+
type: attribute(node, "Type"),
|
141
|
+
parameters: _get_parameters(node)
|
142
|
+
}
|
143
|
+
end
|
144
|
+
parent_node.at_xpath("tt:AnalyticsEngineConfiguration//tt:RuleEngineConfiguration").each do |node|
|
145
|
+
rule << {
|
146
|
+
name: attribute(node, "Name"),
|
147
|
+
type: attribute(node, "Type"),
|
148
|
+
parameters: _get_parameters(node)
|
149
|
+
}
|
150
|
+
end
|
151
|
+
configuration["analytics_engine_configuration"] = {
|
152
|
+
analytics_module: analytics_module,
|
153
|
+
extension: ""
|
154
|
+
}
|
155
|
+
configuration["rule_engine_configuration"] = {
|
156
|
+
rule: rule,
|
157
|
+
extension: ""
|
158
|
+
}
|
159
|
+
return configuration
|
160
|
+
end
|
161
|
+
|
162
|
+
def _get_ptz_configuration parent_node
|
163
|
+
configuration = _get_public_sector(parent_node)
|
164
|
+
configuration["node_token"] = value(parent_node, "tt:NodeToken")
|
165
|
+
configuration["default_absolute_pant_tilt_position_space"] = value(parent_node, "tt:DefaultAbsolutePantTiltPositionSpace")
|
166
|
+
configuration["default_absolute_zoom_position_space"] = value(parent_node, "tt:DefaultAbsoluteZoomPositionSpace")
|
167
|
+
configuration["default_relative_pan_tilt_translation_space"] = value(parent_node, "tt:DefaultRelativePanTiltTranslationSpace")
|
168
|
+
configuration["default_relative_zoom_translation_space"] = value(parent_node, "tt:DefaultRelativeZoomTranslationSpace")
|
169
|
+
configuration["default_continuous_pan_tilt_velocity_space"] = value(parent_node, "tt:DefaultContinuousPanTiltVelocitySpace")
|
170
|
+
configuration["default_continuous_zoom_velocity_space"] = value(parent_node, "tt:DefaultContinuousZoomVelocitySpace")
|
171
|
+
pan_tilt = _get_node(parent_node,"//tt:DefaultPTZSpeed//tt:PanTilt")
|
172
|
+
zoom = _get_node(parent_node,"//tt:DefaultPTZSpeed//tt:Zoom")
|
173
|
+
configuration["default_ptz_speed"] = {
|
174
|
+
pan_tilt:{
|
175
|
+
x: attribute(pan_tilt, "x"),
|
176
|
+
y: attribute(pan_tilt, "y"),
|
177
|
+
space: attribute(pan_tilt, "space")
|
178
|
+
},
|
179
|
+
zoom: {
|
180
|
+
x: attribute(zoom, "x"),
|
181
|
+
space: attribute(zoom, "space")
|
182
|
+
}
|
183
|
+
}
|
184
|
+
configuration["fefault_ptz_timeout"] = value(parent_node, "tt:DefaultPTZTimeout")
|
185
|
+
configuration["pan_tilt_limits"] = {
|
186
|
+
range: {
|
187
|
+
uri: value(_get_node(parent_node, "tt:PanTiltLimits//tt:Range"), "tt:URI"),
|
188
|
+
x_range: _get_min_max(_get_node(parent_node,"tt:PanTiltLimits//tt:Range"), "tt:XRange"),
|
189
|
+
y_range: _get_min_max(_get_node(parent_node,"tt:PanTiltLimits//tt:Range"), "tt:YRange")
|
190
|
+
}
|
191
|
+
}
|
192
|
+
configuration["zoom_limits"] = {
|
193
|
+
range: {
|
194
|
+
uri: value(_get_node(parent_node, "tt:PanTiltLimits//tt:Range"), "tt:URI"),
|
195
|
+
x_range: _get_min_max(_get_node(parent_node,"tt:PanTiltLimits//tt:Range"), "tt:XRange"),
|
196
|
+
}
|
197
|
+
}
|
198
|
+
configuration["extension"] = ""
|
199
|
+
return configuration
|
200
|
+
end
|
201
|
+
|
202
|
+
def _get_metadata_configuration parent_node
|
203
|
+
configuration = _get_public_sector(parent_node)
|
204
|
+
configuration["ptz_status"] = {
|
205
|
+
status: value(_get_node(parent_node, "tt:PTZStatus"), "tt:Status"),
|
206
|
+
sosition: value(_get_node(parent_node, "tt:PTZStatus"), "tt:Position")
|
207
|
+
}
|
208
|
+
configuration["events"] = {
|
209
|
+
filter: value(_get_node(parent_node, "tt:Events"), "tt:Filter"),
|
210
|
+
subscription_policy: value(_get_node(parent_node, "tt:Events"), "tt:SubscriptionPolicy")
|
211
|
+
}
|
212
|
+
configuration["analytics"] = value(parent_node, "tt:Analytics")
|
213
|
+
configuration["multicast"] = _get_multicast(parent_node)
|
214
|
+
configuration["session_timeout"] = value(parent_node, "tt:SessionTimeout")
|
215
|
+
unless parent_node.at_xpath("tt:AnalyticsEngineConfiguration//tt:AnalyticsModule").nil?
|
216
|
+
analytics_module = []
|
217
|
+
parent_node.at_xpath("tt:AnalyticsEngineConfiguration//tt:AnalyticsModule").each do |node|
|
218
|
+
analytics_module << {
|
219
|
+
name: attribute(node, "Name"),
|
220
|
+
type: attribute(node, "Type"),
|
221
|
+
parameters: _get_parameters(node)
|
222
|
+
}
|
223
|
+
end
|
224
|
+
configuration["analytics_engine_configuration"] = {
|
225
|
+
analytics_module: analytics_module,
|
226
|
+
extension: ""
|
227
|
+
}
|
228
|
+
end
|
229
|
+
configuration["extension"] = ""
|
230
|
+
return configuration
|
231
|
+
end
|
232
|
+
|
233
|
+
def _get_multicast parent_node
|
234
|
+
{
|
235
|
+
address: {
|
236
|
+
type: value(_get_node(parent_node, "//tt:Multicast//tt:Address"), '//tt:Type'),
|
237
|
+
ipv4_address: value(_get_node(parent_node, "//tt:Multicast//tt:Address"), '//tt:IPv4Address'),
|
238
|
+
ipv6_address: value(_get_node(parent_node, "//tt:Multicast//tt:Address"), '//tt:IPv6Address')
|
239
|
+
},
|
240
|
+
port: value(_get_node(parent_node, "//tt:Multicast"), "tt:Port"),
|
241
|
+
ttl: value(_get_node(parent_node, "//tt:Multicast"), "tt:TTL"),
|
242
|
+
auto_start: value(_get_node(parent_node, "//tt:Multicast"), "tt:AutoStart")
|
243
|
+
}
|
244
|
+
end
|
245
|
+
|
246
|
+
def _get_parameters parent_node
|
247
|
+
simple_item = []
|
248
|
+
element_item = []
|
249
|
+
parent_node.at_xpath("tt:SimpleItem").each do |node|
|
250
|
+
simple_item << {
|
251
|
+
name: attribute(node, "Name"),
|
252
|
+
value: attribute(node, "Value")
|
253
|
+
}
|
254
|
+
end
|
255
|
+
parent_node.at_xpath("tt:ElementItem").each do |node|
|
256
|
+
element_item << {
|
257
|
+
xsd_any: value(node, "tt:xsd:any"),
|
258
|
+
name: attribute(node, "Name")
|
259
|
+
}
|
260
|
+
end
|
261
|
+
return {
|
262
|
+
simple_item: simple_item,
|
263
|
+
element_item: element_item,
|
264
|
+
extension: ""
|
265
|
+
}
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
@@ -17,7 +17,7 @@ module ONVIF
|
|
17
17
|
# profile_token: "xxxxxxx" // [ReferenceToken]
|
18
18
|
# }
|
19
19
|
def run options, cb
|
20
|
-
message =
|
20
|
+
message = create_media_onvif_message namespaces: {:'xmlns:sch' => 'http://www.onvif.org/ver10/schema'}
|
21
21
|
message.body = ->(xml) do
|
22
22
|
xml.wsdl(:GetStreamUri) do
|
23
23
|
xml.wsdl(:StreamSetup) do
|
@@ -5,7 +5,7 @@ module ONVIF
|
|
5
5
|
class GetVideoEncoderConfiguration < Action
|
6
6
|
# c_token 的结构 // [ReferenceToken] Token of the requested video encoder configuration.
|
7
7
|
def run c_token, cb
|
8
|
-
message =
|
8
|
+
message = create_media_onvif_message
|
9
9
|
message.body = ->(xml) do
|
10
10
|
xml.wsdl(:GetVideoEncoderConfiguration) do
|
11
11
|
xml.wsdl :ConfigurationToken, c_token
|
@@ -31,14 +31,6 @@ module ONVIF
|
|
31
31
|
encoding_interval: value(rcl, "tt:EncodingInterval"),
|
32
32
|
bitrate_limit: value(rcl, "tt:BitrateLimit")
|
33
33
|
},
|
34
|
-
mpeg4: {
|
35
|
-
gov_length: value(_get_node(xml_doc, "//tt:MPEG4"), "//tt:GovLength"),
|
36
|
-
mpeg4_profile: value(_get_node(xml_doc, "//tt:MPEG4"), "//tt:Mpeg4Profile")
|
37
|
-
},
|
38
|
-
h264: {
|
39
|
-
gov_length: value(_get_node(xml_doc, "//tt:H264"), "//tt:GovLength"),
|
40
|
-
h264_profile: value(_get_node(xml_doc, "//tt:H264"), "//tt:H264Profile")
|
41
|
-
},
|
42
34
|
multicast: {
|
43
35
|
address: {
|
44
36
|
type: value(_get_node(xml_doc, "//tt:Multicast//tt:Address"), '//tt:Type'),
|
@@ -51,54 +43,28 @@ module ONVIF
|
|
51
43
|
},
|
52
44
|
session_timeout: value(xml_doc, "//tt:SessionTimeout")
|
53
45
|
}
|
54
|
-
|
46
|
+
unless xml_doc.at_xpath('//tt:MPEG4').nil?
|
47
|
+
configuration["mpeg4"] = {
|
48
|
+
gov_length: value(_get_node(xml_doc, "//tt:MPEG4"), "//tt:GovLength"),
|
49
|
+
mpeg4_profile: value(_get_node(xml_doc, "//tt:MPEG4"), "//tt:Mpeg4Profile")
|
50
|
+
}
|
51
|
+
end
|
52
|
+
unless xml_doc.at_xpath('//tt:H264').nil?
|
53
|
+
configuration["h264"] = {
|
54
|
+
gov_length: value(_get_node(xml_doc, "//tt:H264"), "//tt:GovLength"),
|
55
|
+
h264_profile: value(_get_node(xml_doc, "//tt:H264"), "//tt:H264Profile")
|
56
|
+
}
|
57
|
+
end
|
55
58
|
callback cb, success, configuration
|
56
59
|
else
|
57
60
|
callback cb, success, result
|
58
61
|
end
|
59
62
|
end
|
60
63
|
end
|
61
|
-
|
62
|
-
this_node = xml_doc.at_xpath(parent_name)
|
63
|
-
result_val = []
|
64
|
-
this_node.each do |node|
|
65
|
-
result_val << node.content
|
66
|
-
end
|
67
|
-
return result_val
|
68
|
-
end
|
64
|
+
|
69
65
|
def _get_node parent_node, node_name
|
70
66
|
parent_node.at_xpath(node_name)
|
71
67
|
end
|
72
|
-
|
73
|
-
def _get_each_val xml_doc, parent_name
|
74
|
-
result_val = []
|
75
|
-
xml_doc.each do |node|
|
76
|
-
result_val << _get_width_height(node, parent_name)
|
77
|
-
end
|
78
|
-
return result_val
|
79
|
-
end
|
80
|
-
|
81
|
-
def _get_min_max xml_doc, parent_name
|
82
|
-
this_node = xml_doc
|
83
|
-
unless parent_name.nil?
|
84
|
-
this_node = xml_doc.at_xpath(parent_name)
|
85
|
-
end
|
86
|
-
return {
|
87
|
-
min: value(this_node, "tt:Min"),
|
88
|
-
max: value(this_node, "tt:Max")
|
89
|
-
}
|
90
|
-
end
|
91
|
-
|
92
|
-
def _get_width_height xml_doc, parent_name
|
93
|
-
this_node = xml_doc
|
94
|
-
unless parent_name.nil?
|
95
|
-
this_node = xml_doc.at_xpath(parent_name)
|
96
|
-
end
|
97
|
-
return {
|
98
|
-
width: value(this_node, "tt:Width"),
|
99
|
-
height: value(this_node, "tt:Height")
|
100
|
-
}
|
101
|
-
end
|
102
68
|
end
|
103
69
|
end
|
104
70
|
end
|
@@ -9,7 +9,7 @@ module ONVIF
|
|
9
9
|
# p_token: "xxxxxxx" //[ReferenceToken] Optional ProfileToken that specifies an existing media profile that the options shall be compatible with.
|
10
10
|
# }
|
11
11
|
def run options, cb
|
12
|
-
message =
|
12
|
+
message = create_media_onvif_message
|
13
13
|
message.body = ->(xml) do
|
14
14
|
xml.wsdl(:GetVideoEncoderConfigurationOptions) do
|
15
15
|
xml.wsdl :ConfigurationToken, options["c_token"]
|
@@ -26,23 +26,26 @@ module ONVIF
|
|
26
26
|
frame_rate_range: _get_min_max(_get_node(xml_doc, "//tt:JPEG"), "//tt:FrameRateRange"),
|
27
27
|
rncoding_interval_range: _get_min_max(_get_node(xml_doc, "//tt:JPEG"), "//tt:FrameRateRange")
|
28
28
|
},
|
29
|
-
|
29
|
+
extension: ""
|
30
|
+
}
|
31
|
+
unless xml_doc.at_xpath('//tt:MPEG4').nil?
|
32
|
+
options["mpeg4"] = {
|
30
33
|
resolutions_available: _get_each_val(_get_node(xml_doc, "//tt:MPEG4"), "//tt:ResolutionsAvailable"),
|
31
34
|
gov_length_range: _get_min_max(_get_node(xml_doc, "//tt:MPEG4"), "//tt:GovLengthRange"),
|
32
35
|
frame_rate_range: _get_min_max(_get_node(xml_doc, "//tt:MPEG4"), "//tt:FrameRateRange"),
|
33
36
|
rncoding_interval_range: _get_min_max(_get_node(xml_doc, "//tt:MPEG4"), "//tt:EncodingIntervalRange"),
|
34
37
|
mpeg4_profiles_supported: _get_profiles_supported(_get_node(xml_doc, "//tt:MPEG4"), "//tt:Mpeg4ProfilesSupported")
|
35
|
-
}
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
38
|
+
}
|
39
|
+
end
|
40
|
+
unless xml_doc.at_xpath('//tt:H264').nil?
|
41
|
+
options["h264"] = {
|
42
|
+
resolutions_available: _get_each_val(_get_node(xml_doc, "//tt:H264"), "//tt:ResolutionsAvailable"),
|
43
|
+
gov_length_range: _get_min_max(_get_node(xml_doc, "//tt:H264"), "//tt:GovLengthRange"),
|
44
|
+
frame_rate_range: _get_min_max(_get_node(xml_doc, "//tt:H264"), "//tt:FrameRateRange"),
|
45
|
+
rncoding_interval_range: _get_min_max(_get_node(xml_doc, "//tt:H264"), "//tt:EncodingIntervalRange"),
|
46
|
+
h264_profiles_supported: _get_profiles_supported(_get_node(xml_doc, "//tt:H264"), "//tt:H264ProfilesSupported")
|
47
|
+
}
|
48
|
+
end
|
46
49
|
callback cb, success, options
|
47
50
|
else
|
48
51
|
callback cb, success, result
|
@@ -7,7 +7,7 @@ module ONVIF
|
|
7
7
|
# c_token //[ReferenceToken] Token of the requested audio encoder configuration.
|
8
8
|
#
|
9
9
|
def run c_token, cb
|
10
|
-
message =
|
10
|
+
message = create_media_onvif_message
|
11
11
|
message.body = ->(xml) do
|
12
12
|
xml.wsdl(:GetVideoSourceConfiguration) do
|
13
13
|
xml.wsdl :ConfigurationToken, c_token
|
data/ruby-onvif-client.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_onvif_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jimxl
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- lib/ruby_onvif_client/media/get_audio_encoder_configurations.rb
|
94
94
|
- lib/ruby_onvif_client/media/get_audio_encoder_configuration_options.rb
|
95
95
|
- lib/ruby_onvif_client/media/get_audio_encoder_configuration.rb
|
96
|
+
- lib/ruby_onvif_client/media/get_profiles.rb
|
96
97
|
- lib/ruby_onvif_client/media/get_video_source_configuration.rb
|
97
98
|
- lib/ruby_onvif_client/media/get_video_source_configurations.rb
|
98
99
|
- lib/ruby_onvif_client/media/get_audio_source_configurations.rb
|