rtsp_server 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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: