Skip to content

greywolf-colorado/rtsp

This branch is 75 commits behind turboladen/rtsp:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

988b855 · Nov 8, 2012
Apr 15, 2011
Mar 9, 2012
Nov 8, 2012
Nov 6, 2012
Sep 19, 2011
Mar 9, 2012
Mar 20, 2011
Jan 23, 2011
Nov 3, 2012
Apr 12, 2011
Mar 9, 2012
Nov 3, 2012
Nov 3, 2012
Feb 6, 2011
Mar 9, 2012
Nov 2, 2011
Sep 21, 2011
Nov 3, 2012
Nov 22, 2011
Nov 22, 2011

Repository files navigation

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::Error+s; 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.options
response.class             # => RTSP::Response
response.code              # => 200
response.message           # => "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.

About

Ruby library to allow RTSP streaming from RTSP-enabled devices

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 95.7%
  • Racket 4.3%