rtsp
DESCRIPTION:
This library intends to follow the RTSP RFC document (2326) to allow for working with RTSP servers. At this point, it’s up to you to parse the data from a play call, but we’ll get there. …eventually.
For more information
RTSP: tools.ietf.org/html/rfc2326
SDP: tools.ietf.org/html/rfc4566
FEATURES/PROBLEMS:
-
All standard RTSP methods supported except REDIRECT.
-
Captures RTP data to a file, but doesn’t ensure RTP sequencing before putting to file.
-
One client object can only handle 1 stream; use a client per stream until this functionality
gets implemented.
-
Only handles unicast, UDP streams.
-
RTSP exceptions are all RTSP::Errors; this will change.
SYNOPSIS:
Basic Usage
RTSP::Client.log? # => true
RTSP::Client.log = false
client = RTSP::Client.new "rtsp://64.202.98.91/sa.sdp" do |connection, capturer|
connection.timeout = 5
capturer.rtp_port = 8554
capturer.rtp_file = File.open("captured_stuff.rtp", "wb")
end
client.server_uri # => #<URI::Generic:0x00000100ba4db0 URL:rtsp://64.202.98.91:554/sa.sdp>
client.session_state # => :init
client.cseq # => 1
client.connection.do_capture # => true
client.connection.interleave # => false
client.connection.timeout # => 5
client.capturer.broadcast_type # => :unicast
client.capturer.rtp_port # => 8554
client.capturer.rtp_file # => #<File:captured_stuff.rtp>
client.capturer.transport_protocol # => :UDP
response = client.
response.class # => RTSP::Response
response.code # => 200
response. # => "OK"
client.cseq # => 2
response = client.describe
response.body.class # => SDP::Description
response.content_type # => "application/sdp"
response.server # => "DSS/5.5 (Build/489.7; Platform/Linux; Release/Darwin; )"
client.aggregate_control_track # => "rtsp://64.202.98.91:554/sa.sdp/"
client.media_control_tracks # => ["rtsp://64.202.98.91:554/sa.sdp/trackID=1"]
client.cseq # => 3
response = client.setup(client.media_control_tracks.first)
response.session[:session_id] # => 7098486223178290313
client.session[:session_id] # => 7098486223178290313
client.cseq # => 4
client.session_state # => :ready
response = client.play(client.aggregate_control_track)
response.range # => "npt=now="
resposne.rtp_info # => "url=rtsp://64.202.98.91:554/sa.sdp/trackID=1"
client.session_state # => :playing
# Wait while the video streams
sleep 5
client.pause(client.aggregate_control_track)
client.session_state # => :ready
# Wait while the video is paused
sleep 2
client.teardown(client.aggregate_control_track)
client.session[:session_id] # => 0
client.session_state # => :init
# Check the streamed file's contents
puts client.capturer.rtp_file # => (Lots of data)
CLI App
RTSP also provides a rtsp_client
executable that allows a little talking to an RTSP server.
Knowing which tracks are available on the server can help you determine which tracks to use in your programmatic use of an RTSP::Client object to try to play. Show the available aggregate control track and media control tracks:
$ rtsp_client --show-tracks rtsp://64.202.98.91/sa.sdp
Or if you want the entire SDP description from the server:
$ rtsp_client --describe rtsp://64.202.98.91/sa.sdp
And then, of course, pull a stream (this assumes you SETUP the first media track and call play on the aggregate track):
$ rtsp_client --stream rtsp://64.202.98.91/sa.sdp
As usual, get help by:
$ rtsp_client --help
REQUIREMENTS:
-
(Tested) Rubies
-
1.9.2-p180
-
-
RubyGems
-
sdp, ‘~> 0.2.2’
-
-
RubyGems (development)
-
bundler, ‘~> 1.0.0’
-
code_statistics, ‘~> 0.2.13’
-
metric_fu, ‘>= 2.0.0’
-
ore, ‘~> 0.7.2’
-
ore-core, ‘~> 0.1.0’
-
ore-tasks, ‘~> 0.3.0’
-
rake, ‘~> 0.8.7’
-
rspec, ‘~> 2.5.0’
-
simplecov, ‘>= 0.4.0’
-
yard, ‘~> 0.6.0’
-
INSTALL:
-
(sudo) gem install rtsp
DEVELOPERS:
After checking out the source, run:
$ bundle install
This task will install any missing dependencies.
LICENSE:
(The MIT License)
Copyright © 2011 Steve Loveless, Mike Kirby
See LICENSE.rdoc for details.