rtsp_server 0.0.1 → 0.0.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 +4 -4
- data/lib/rtsp/common.rb +1 -1
- data/lib/rtsp/server.rb +15 -7
- data/lib/rtsp/socat_streaming.rb +28 -17
- data/lib/rtsp/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 151ab5a38e1667cf874f111ee48c7d94743a4b05
|
4
|
+
data.tar.gz: fe1958651325fb1ca9321202f4b47c7d276136cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03c9d9c6038029902871d95ca7e8c6c04e71059b607a6e30d67bbc2569632c27954ed96ed81547d5eb8820f841faf7f31a608c66a33258611a656abd69857dd3
|
7
|
+
data.tar.gz: 737f15c8a7cb198e27faedf9a47f72e7e6b30bde6d929773cb91f2ca2a2e7d672ceb47d7b916b9bc51de5fdd4b50b1dac8ae612883083d087fe9caa2fb572d54
|
data/lib/rtsp/common.rb
CHANGED
data/lib/rtsp/server.rb
CHANGED
@@ -155,10 +155,11 @@ module RTSP
|
|
155
155
|
def setup(request)
|
156
156
|
RTSP::Server.log "Received SETUP request from #{request.remote_host}"
|
157
157
|
@session = @session.next
|
158
|
+
multicast_check = request.transport.include?('multicast')
|
158
159
|
server_port = @stream_server.setup_streamer(@session,
|
159
|
-
request.transport_url, request.stream_index)
|
160
|
+
request.transport_url, request.stream_index, multicast_check)
|
160
161
|
response = []
|
161
|
-
transport = generate_transport(request, server_port)
|
162
|
+
transport = generate_transport(request, server_port, request.stream_index)
|
162
163
|
response << "Transport: #{transport.join}"
|
163
164
|
response << "Session: #{@session}"
|
164
165
|
response << "\r\n"
|
@@ -289,13 +290,20 @@ module RTSP
|
|
289
290
|
#
|
290
291
|
# @param [RTSP::Request] Request object.
|
291
292
|
# @param [Fixnum] server_port Port on which the stream_server is streaming from.
|
292
|
-
def generate_transport request, server_port
|
293
|
-
port_specifier =
|
293
|
+
def generate_transport request, server_port, index=1
|
294
|
+
port_specifier = 'client_port'
|
294
295
|
transport = request.transport.split(port_specifier)
|
295
|
-
transport[0] << "destination=#{request.remote_host};"
|
296
|
-
transport[0] << "source=#{@stream_server.interface_ip};"
|
297
296
|
transport[1] = port_specifier + transport[1]
|
298
|
-
|
297
|
+
|
298
|
+
if request.transport.include?("unicast")
|
299
|
+
transport[0] << "destination=#{request.remote_host};"
|
300
|
+
transport[1] << ";server_port=#{server_port}-#{server_port+1}"
|
301
|
+
else
|
302
|
+
transport[0] << "destination=#{@stream_server.source_ip[index - 1]};"
|
303
|
+
transport[1] << ";ttl=10"
|
304
|
+
end
|
305
|
+
|
306
|
+
transport[0] << "source=#{@stream_server.interface_ip};"
|
299
307
|
|
300
308
|
transport
|
301
309
|
end
|
data/lib/rtsp/socat_streaming.rb
CHANGED
@@ -68,26 +68,34 @@ module RTSP
|
|
68
68
|
# @param [String] transport_url Destination IP:port.
|
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)
|
71
|
+
def setup_streamer(sid, transport_url, index=1, multicast=false)
|
72
72
|
dest_ip, dest_port = transport_url.split ":"
|
73
|
-
@rtcp_source_identifier ||= RTCP_SOURCE.pack("H*")
|
74
|
-
local_port = free_port(true)
|
75
|
-
|
76
|
-
@rtcp_threads[sid] = Thread.start do
|
77
|
-
s = UDPSocket.new
|
78
|
-
s.bind(@interface_ip, local_port+1)
|
79
73
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
74
|
+
@rtcp_source_identifier ||= RTCP_SOURCE.pack("H*")
|
75
|
+
local_port = multicast ? @source_port[index - 1] : free_port(true)
|
76
|
+
|
77
|
+
unless multicast
|
78
|
+
@rtcp_threads[sid] = Thread.start do
|
79
|
+
s = UDPSocket.new
|
80
|
+
s.bind(@interface_ip, local_port+1)
|
81
|
+
|
82
|
+
loop do
|
83
|
+
begin
|
84
|
+
_, sender = s.recvfrom(36)
|
85
|
+
s.send(@rtcp_source_identifier, 0, sender[3], sender[1])
|
86
|
+
end
|
84
87
|
end
|
85
88
|
end
|
86
89
|
end
|
87
90
|
|
88
91
|
@cleaner ||= Thread.start { cleanup_defunct }
|
89
92
|
@processes ||= Sys::ProcTable.ps.map { |p| p.cmdline }
|
90
|
-
|
93
|
+
|
94
|
+
if multicast
|
95
|
+
@sessions[sid] = :multicast
|
96
|
+
else
|
97
|
+
@sessions[sid] = build_socat(dest_ip, dest_port, local_port, index)
|
98
|
+
end
|
91
99
|
|
92
100
|
local_port
|
93
101
|
end
|
@@ -100,7 +108,7 @@ module RTSP
|
|
100
108
|
#
|
101
109
|
# @param [String] session ID.
|
102
110
|
def start_streaming sid
|
103
|
-
spawn_socat(sid, @sessions[sid])
|
111
|
+
spawn_socat(sid, @sessions[sid]) unless @sessions[sid] == :multicast
|
104
112
|
end
|
105
113
|
|
106
114
|
# Stop streaming for the requested session.
|
@@ -128,15 +136,15 @@ module RTSP
|
|
128
136
|
v=0\r
|
129
137
|
o=- 1345481255966282 1 IN IP4 #{@interface_ip}\r
|
130
138
|
s=Session streamed by "Streaming Server"\r
|
131
|
-
i=stream1\r
|
139
|
+
i=stream1#{multicast ? 'm' : ''}\r
|
132
140
|
t=0 0\r
|
133
141
|
a=tool:LIVE555 Streaming Media v2007.07.09\r
|
134
142
|
a=type:broadcast\r
|
135
143
|
a=control:*\r
|
136
144
|
a=range:npt=0-\r
|
137
145
|
a=x-qt-text-nam:Session streamed by "Streaming Server"\r
|
138
|
-
a=x-qt-text-inf:stream1\r
|
139
|
-
m=video 0 RTP/AVP 96\r
|
146
|
+
a=x-qt-text-inf:stream1#{multicast ? 'm' : ''}\r
|
147
|
+
m=video #{multicast ? @source_port[stream_index - 1] : 0} RTP/AVP 96\r
|
140
148
|
c=IN IP4 #{multicast ? "#{multicast_ip(stream_index)}/10" : "0.0.0.0"}\r
|
141
149
|
a=rtpmap:#{rtp_map}\r
|
142
150
|
a=fmtp:#{fmtp}\r
|
@@ -219,7 +227,10 @@ EOF
|
|
219
227
|
|
220
228
|
# Disconnects all streams that are currently streaming.
|
221
229
|
def disconnect_all_streams
|
222
|
-
@pids.values.each
|
230
|
+
@pids.values.each do |pid|
|
231
|
+
Process.kill(9, pid.to_i) if pid.to_i > 1000 rescue Errno::ESRCH
|
232
|
+
end
|
233
|
+
|
223
234
|
@sessions.clear
|
224
235
|
@pids.clear
|
225
236
|
end
|
data/lib/rtsp/version.rb
CHANGED