watson / airplay-protocol

A low level protocol wrapper on top of the AirPlay HTTP API
MIT License
109 stars 12 forks source link

airplay-protocol

A low level protocol wrapper on top of the AirPlay HTTP API used to connect to an Apple TV.

For a proper AirPlay client, see airplayer instead.

Currently only the video API is implemented.

Build status js-standard-style

Installation

npm install airplay-protocol --save

Example Usage

var AirPlay = require('airplay-protocol')

var airplay = new AirPlay('apple-tv.local')

airplay.play('http://example.com/video.m4v', function (err) {
  if (err) throw err

  airplay.playbackInfo(function (err, res, body) {
    if (err) throw err
    console.log('Playback info:', body)
  })
})

API

new AirPlay(host[, port])

Initiate a connection to a specific AirPlay server given a host or IP address and a port. If no port is given, the default port 7000 is used.

Returns an instance of the AirPlay object.

var AirPlay = require('airplay-protocol')

var airplay = new AirPlay('192.168.0.42', 7000)

Event: event

function (event) {}

Emitted every time the AirPlay server sends an event. Events can hold different types of data, but will among other things be used to send updates to the playback state.

Example event object indicating the state of the playback have changed:

{
  category: 'video',
  params: {
    uuid: 'D90C289F-DE6A-480C-A741-1DA92CEEE8C3-40-00000004654E2487'
  },
  sessionID: 3,
  state: 'loading'
}

The event.params property can potentially hold a lot more data than shown in this example.

Example event object indicating an update to the access log:

{
  params: {
    uuid: '96388EC8-05C8-4BC4-A8EB-E9B6FCEB1A55-41-000000135E436A63'
  },
  sessionID: 0,
  type: 'accessLogChanged'
}

airplay.state

Property holding the latest playback state emitted by the event event. Will be null if no event event have been emitted yet.

Possible states: loading, playing, paused or stopped.

airplay.serverInfo(callback)

Get the AirPlay server info.

Arguments:

airplay.play(url[, position][, callback])

Start video playback.

Arguments:

airplay.scrub(callback)

Retrieve the current playback position.

Arguments:

airplay.scrub(position[, callback])

Seek to an arbitrary location in the video.

Arguments:

airplay.rate(speed[, callback])

Change the playback rate.

Arguments:

airplay.pause([callback])

Pause playback.

Alias for airplay.rate(0, callback).

airplay.resume([callback])

Resume playback.

Alias for airplay.rate(1, callback).

airplay.stop([callback])

Stop playback.

Arguments:

airplay.playbackInfo(callback)

Retrieve playback informations such as position, duration, rate, buffering status and more.

Arguments:

airplay.property(name, callback)

Get playback property.

Arguments:

airplay.property(name, value[, callback])

Set playback property.

Arguments:

airplay.destroy()

Destroy the reverse-http server set up to receive AirPlay events.

License

MIT