11 |
11 |
Listens on port for fitspipe network clients. Clients can either |
12 |
12 |
"put" images into particular feed, or "get" images from one. |
13 |
13 |
Protocol is handled by fitspipe-put and fitspipe-get respectively. |
14 |
14 |
By default, fitspipe becomes a background process. This can be |
15 |
15 |
prevented by adding "daemon=false". There are no other options |
16 |
16 |
for the server. Make sure your firewall protects "port" adequately. |
17 |
17 |
}}} |
18 |
18 |
Typing "help" on the socket of a running fitspipe produces: |
19 |
19 |
{{{ |
20 |
20 |
help |
21 |
21 |
+ fitspipe v2.01 Feb 03 2012 (compiled Feb 03 2012) commands: |
22 |
22 |
+ <Dump in a FITS file> - Same as "put feed=default" |
23 |
23 |
+ version - Show fitspipe server version |
24 |
24 |
+ put feed=<feedname> - To submit a FITS file |
25 |
25 |
+ get feed=<feedname> [frame=<frameno>] - To retrieve a FITS frame |
26 |
26 |
+ list or ls - List available feeds |
27 |
27 |
+ composite compenable=<true|false> [compgeom=wxh compfeeds=<feed1,feed2,feed3...>] - Set up composite of multiple feeds |
28 |
28 |
+ shutdown - Make this server exit |
29 |
29 |
+ exit or quit or q - Close the connection |
30 |
30 |
. OK |
31 |
31 |
}}} |
32 |
32 |
== Starting the Service == |
33 |
33 |
The "fitspipe" service is started at boot time from rc.local. Typically, the rc.local script of a host offering fitspipe service will include a single line: |
34 |
34 |
{{{ |
35 |
35 |
fitspipe 9999 |
36 |
36 |
}}} |
37 |
37 |
By default the server becomes a daemon/background process after the listening socket is open. |
38 |
38 |
== Creating Feeds == |
39 |
39 |
Feeds are created when a data provider produces the first frame. In the future, we intend to implement a way to create feeds with nothing in them to ease startup problems resulting from not being able to start "fitspipe-get" to get video from a feed until the first frame has arrived. |
40 |
40 |
== Putting Frames In (fitspipe-put) == |
41 |
41 |
Only 2D (NAXIS3=1), Basic FITS (no extensions), at 16 bits per pixel is accepted. The simplest form of a client which produces frames for the "default" feed would be one which makes a socket connection to port 9999 (or whichever port the server is using) and writes an entire FITS file on the socket. The server knows this method is being used when the conversation begins with "SIMPLE=T". The client may leave the connection open and send the next frame when it is ready in the same manner. Normally, the client used for this purpose is the program '''fitspipe-put'''. This client uses a more complete version of the protocol which sends a "put feed=<feedname>" on a single line before each FITS frame. The feedname, host, and port can be specified on the '''fitspipe-put''' command line, as in this example: |
42 |
42 |
{{{ |
43 |
43 |
grasp_vidgrab ... | fitspipe-put localhost:9999/default |
44 |
44 |
}}} |
45 |
45 |
Or the equivalent: |
46 |
46 |
{{{ |
47 |
47 |
grasp_vidgrab ... | fitspipe-put server=localhost port=9999 feed=default |
48 |
48 |
}}} |
49 |
49 |
The feed name can be any identifier (avoid spaces though) and grasp_vidgrab can be replaced by anything which produces concatenated FITS on its stdout. |
50 |
50 |
== Getting Frames Out (fitspipe-get) == |
51 |
51 |
Once a "feed" exists, the '''fitspipe-get''' tool is used to handle making a socket connection to the fitspipe server and converting the stream of FITS images something which can be read from stdout (just as the original output of grasp_vidgrab, but it doesn't have to be on the same host as grasp_vidgrab. Also, multiple clients can register to receive the video. In this way, fitspipe plus fitspipe-get can function as a tee, and way of distributing FITS data to different hosts. |
52 |
52 |
The '''fitspipe-get''' tool takes the same parameters as '''fitspipe-put''' plus an additional parameter called '''fullheader=true|false''' which is described below |
53 |
53 |
{{{ |
54 |
54 |
fitspipe-get server=localhost port=9999 feed=default | ... |
55 |
55 |
}}} |
56 |
56 |
When used together with the '''fitspipe-put''' example from above, this produces the same result that reading the standard output of grasp_vidgrab in the original example would have. In other words, a simple process which only knows how to produce FITS files on its output has been tunneled through the network. |
57 |
57 |
=== fitspipe-get fullheader=true === |
58 |
58 |
By default, the '''fitspipe''' server sends a minimal, abbreviated header with each video frame. This is fine when the connection is being used, for example, to display the images for the user with a graphical display program such as '''zimfits.''' For other connections which may want a complete set of metadata and time stamps in each video frame header, the server should be send a command like "get feed=default fullheader=true" to enable this extra information. The "fullheader=true" command line option to '''fitspipe-get''' does this. |