Giter VIP home page Giter VIP logo

rtsp's Introduction

rtsp

<img src=“https://secure.travis-ci.org/turboladen/rtsp.png” alt=“Build Status” />

DESCRIPTION:

This library intends to follow the RTSP RFC document (2326) to allow for working with RTSP servers. By way of rtp, you can either inspect the RTP packets as they come across the wire or use the file that the data got saved to.

For more information:

FEATURES/PROBLEMS:

  • All standard RTSP methods supported except REDIRECT.

  • Captures RTP data to a file, or yields if a block is passed to #play.

  • One client object can only handle 1 stream; use a client per stream until this functionality gets implemented.

  • Only handles unicast, TCP RTSP communication.

  • RTSP exceptions are all {RTSP::Error}s.

SYNOPSIS:

Basic Usage

RTSP::Client.log?                # => false
RTSP::Client.log = true
client = RTSP::Client.new "rtsp://64.202.98.91/sa.sdp"

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           # => 30
client.capturer.ip_addressing_type  # => :unicast
client.capturer.rtp_port            # => 6970
client.capturer.capture_file        # => #<File:/var/folders/tg/j9jxvvfs4qn9cg4vztzyy2gc0000gp/T/rtp_capture.raw-59901-1l8dgv2>
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.capture_file     # => (Lots of data)

RTP packet inspection

As of RTP 0.1.0, you can now inspect and use packets as they come across the wire:

client = RTSP::Client.new "rtsp://64.202.98.91/sa.sdp"
client.describe
client.setup(client.media_control_tracks.first)
payload_file = File.new('rtp.data', 'wb')

client.play(client.aggregate_control_track) do |packet|
  puts "packet is a #{packet.class}"
  puts "RTP seqence: #{packet.sequence_number}"
  puts "RTP payload type: #{packet.payload_type}"

  # Let's save the payload data while we're at it...
  payload_file.write(packet.rtp_payload)
end

payload_file.close

Take a look at the RTP::Packet docs for more information.

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

    • 1.9.3

  • RubyGems

    • sdp

    • rtp

    • parslet

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.

rtsp's People

Contributors

turboladen avatar mikekirby avatar nolanbrown avatar nmccready avatar greywolf-colorado avatar tindron avatar datacompboy avatar dblommesteijn avatar tg-digineo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.