rtsp_server 0.1.1 → 0.1.2

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: 372be55470885f88a585a23224c6ab1515333638
4
- data.tar.gz: 6e48e3604608e14abd2f32fa22f1b5dadd294304
3
+ metadata.gz: e0f0e9d2cff96fa79d01dd739d0ae8758fa3e9e7
4
+ data.tar.gz: 0b9a1cac454571a76821a0fdc32c22caa525990e
5
5
  SHA512:
6
- metadata.gz: ac7589b3ede843f3854fc7288e86cf2dd937cd44bfc641a5c939c8ea6dd2ebe4e79805f67061502a88819c134dc02317becba7196fb7cc31e735845d56ad1ef1
7
- data.tar.gz: b1c6f34f9b02628347f0dd74516759ad47fdf7f0403f77d8b27c88fac087a51b7f7792fb37f986a32dc0b1c3cc60af2aa1067f28dfc613ac8e2353fde6aeab72
6
+ metadata.gz: 71f013548763868491beb43245bc259a7f84f78098239045020d82f5314d9440141ad57c9e4d59b92b771dddac1441dc075ae1a8dbeab457b6c6c2127d7e5fd2
7
+ data.tar.gz: 885711e91338eb3e8d296b862af6f2f60d1ae2b7a1d651ce76c7be27127633852b1a15f4a6562ea7723ca287d85e5604fa56f81d0034cc3b25d1fe0b1b3198ed
@@ -101,11 +101,15 @@ module RTSP
101
101
  end
102
102
 
103
103
  responses = []
104
+ puts "REQUEST **********************************"
105
+ p request_str
104
106
 
105
107
  request_str.split("\r\n\r\n").each do |r|
106
108
  responses << process_request(r, io)
107
109
  end
108
110
 
111
+ puts "RESPONSE **********************************"
112
+ p responses
109
113
  io.send(responses.join, 0)
110
114
  return(-1) if request_str.include?("TEARDOWN")
111
115
  end
@@ -166,7 +170,7 @@ module RTSP
166
170
  @session = @session.next
167
171
  multicast_check = request.transport.include?('multicast')
168
172
  server_port = @stream_server.setup_streamer(@session,
169
- request.transport_url, request.stream_index, multicast_check)
173
+ request, request.stream_index, multicast_check)
170
174
  response = []
171
175
  transport = generate_transport(request, server_port, request.stream_index)
172
176
  response << "Transport: #{transport.join}"
@@ -310,7 +314,9 @@ module RTSP
310
314
  transport = request.transport.split(port_specifier)
311
315
  transport[1] = port_specifier + transport[1]
312
316
  transport[1] = "" if request.transport.include?("multicast")
313
- transport[1] << ";port=#{server_port}-#{server_port + 1}"
317
+ /client_port=(?<p1>\d*)-(?<p2>\d*)/ =~ request.transport
318
+ transport[1] << ";port=#{p1}-#{p2}" unless p1.nil?
319
+ transport[1] << ";port=#{server_port}-#{server_port+1}" if p1.nil?
314
320
  else
315
321
  transport = [request.transport + ';', "port=#{server_port}-#{server_port + 1}"]
316
322
  end
@@ -65,10 +65,11 @@ module RTSP
65
65
  # Creates a RTP streamer using socat.
66
66
  #
67
67
  # @param [String] sid Session ID.
68
- # @param [String] transport_url Destination IP:port.
68
+ # @param [RTSP::Requesti] reuuest RTSP request
69
69
  # @param [Fixnum] index Stream index.
70
70
  # @return [Fixnum] The port the streamer will stream on.
71
- def setup_streamer(sid, transport_url, index=1, multicast=false)
71
+ def setup_streamer(sid, request, index=1, multicast=false)
72
+ transport_url = request.transport_url
72
73
  dest_ip, dest_port = transport_url.split ":" unless multicast
73
74
 
74
75
  @rtcp_source_identifier ||= RTCP_SOURCE.pack("H*")
@@ -92,7 +93,19 @@ module RTSP
92
93
  @processes ||= Sys::ProcTable.ps.map { |p| p.cmdline }
93
94
 
94
95
  if multicast
95
- @sessions[sid] = :multicast
96
+ if request.transport.include?('cleint_port')
97
+ /client_port=(?<p1>\d*)-(?<p2>\d*)/ =~ request.transport
98
+ dest_port = p1
99
+ if dest_port == "64000"
100
+ @sessions[sid] = :multicast
101
+ else
102
+ puts "Request malformed client-port not found #{request.transport}" if dest_port.nil?
103
+ raise "Request malformed client-port not found #{request.transport}" if dest_port.nil?
104
+ @sessions[sid] = build_socat(@source_ip[index - 1], dest_port.to_i, local_port, index)
105
+ end
106
+ else
107
+ @sessions[sid] = :multicast
108
+ end
96
109
  else
97
110
  @sessions[sid] = build_socat(dest_ip, dest_port, local_port, index)
98
111
  end
@@ -272,15 +285,20 @@ EOF
272
285
  # talk to.
273
286
  # @
274
287
 
288
+ # @return [String] IP of the interface that would be used to talk to.
275
289
  # @return [String] IP of the interface that would be used to talk to.
276
290
  def build_socat(target_ip, target_port, server_port, index=1)
277
291
  bsd_options = BSD_OPTIONS if OS.mac?
278
292
  bsd_options ||= ""
293
+ multicast_options = MULTICAST_OPTIONS if target_ip.start_with?("239")
294
+ multicast_options ||= ""
295
+ src_port = "sourceport=#{server_port},"
296
+ src_port = "" if target_ip.start_with?("239")
279
297
 
280
298
  "socat -b #{BLOCK_SIZE} UDP-RECV:#{@source_port[index-1]},reuseaddr," +
281
299
  "#{bsd_options}"+ SOCAT_OPTIONS + ",ip-add-membership=#{@source_ip[index-1]}:" +
282
- "#{@interface_ip} UDP:#{target_ip}:#{target_port},sourceport=#{server_port}," +
283
- SOCAT_OPTIONS
300
+ "#{@interface_ip}#{multicast_options} UDP:#{target_ip}:#{target_port},#{src_port}" +
301
+ SOCAT_OPTIONS + multicast_options
284
302
  end
285
303
 
286
304
  # Attempts to find a random bindable port between 50000-65500
@@ -1,4 +1,4 @@
1
1
  module RTSP
2
2
  # rtsp version
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rtsp_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Loveless, Mike Kirby
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-22 00:00:00.000000000 Z
12
+ date: 2014-08-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parslet
@@ -257,20 +257,20 @@ signing_key:
257
257
  specification_version: 4
258
258
  summary: Library to allow RTSP streaming from RTSP-enabled devices.
259
259
  test_files:
260
+ - spec/rtsp/response_spec.rb
260
261
  - spec/rtsp/message_spec.rb
261
262
  - spec/rtsp/helpers_spec.rb
262
- - spec/rtsp/response_spec.rb
263
- - spec/rtsp/transport_parser_spec.rb
264
263
  - spec/rtsp/client_spec.rb
264
+ - spec/rtsp/transport_parser_spec.rb
265
265
  - spec/rtsp_spec.rb
266
266
  - spec/support/fake_rtsp_server.rb
267
267
  - spec/spec_helper.rb
268
- - features/client_changes_state.feature
269
- - features/control_streams_as_client.feature
270
268
  - features/step_definitions/client_changes_state_steps.rb
271
- - features/step_definitions/control_streams_as_client_steps.rb
272
269
  - features/step_definitions/client_requests_steps.rb
273
- - features/client_requests.feature
274
- - features/support/env.rb
270
+ - features/step_definitions/control_streams_as_client_steps.rb
275
271
  - features/support/hooks.rb
272
+ - features/support/env.rb
273
+ - features/client_changes_state.feature
274
+ - features/control_streams_as_client.feature
275
+ - features/client_requests.feature
276
276
  has_rdoc: