satmap
A feedhunter's visualisation tool.history
In
the nineties, I ran a company called AL Digital, with my
partners Ben Laurie and Dominic Hawken. Our business involved, amongst
other things, recording voice-overs and other audio for AV projects,
and so we built ourselves a studio in our Chiswick office. Dominic was
also a musician, and he had various projects going on which involved
visiting bands and other musicians, so we decided we needed a Green
Room for them to hang out in. This, of course, needed some form of
entertainment in it, so we had a TV with a playstation and satellite
feed etc. Since we had a flat roof, and as Chiswick is on a slight hill
and we were the tallest building around, we had a clear view of
the sky from East to West, so we decided to put up a steerable dish for
the satellite instead of one that only pointed at Astra as would have
been normal...
While setting up the satellite channels, we
quickly discovered the joys of 'feedhunting'. This is the process of
steering your dish to every satellite it can see, and searching for
'feeds'. A 'feed' is a channel that is being used by the broadcasters
to provide raw footage back to the studio, and is not intended for
direct consumer consumption. For example, an outside broadcast van at a
boxing match would 'feed' the fight back to the studio via a dedicated
transponder, where it would have all the graphics and cuts between
cameras added before broadcast. It could also be a test channel,
or a private service that would not normally be listed in your TV
guide.
However, the process was time consuming and
frustrating. Basically, it's like tuning your old analogue TV for the
first time, only with thousands of channels to choose from. You point
the dish at a satellite and tell the receiver to scan for
transponders/channels, and then flick through them looking for
something 'interesting'. After doing this for several hours you'll be
ready for the loony bin (or a cold shower)!
Happily, the
receiver was reasonably high-end and had an external interface so it
could be computer controlled. Unhappily, it was a proprietary interface
and the manufacturers were reluctant do disclose it's inner workings,
but we eventually found a distributor that had a converter which made
it into RS232 serial, and we were in business... The protocol allowed
us to send tuning and steering commands, and read back signal
characteristics so we were able to automate the whole process up to a
point. Effectively, we could steer the dish and search for signals.
Ben
wrote some code that produced this graphic by pointing the dish at each
possible location and scanning all available frequencies:
The
X-Axis is the stepper motor position, and the Y-Axis the frequency in
MHz. The red represents a signal with LOCK, and white signal a without
LOCK.
This, then, is a 'map' of what our dish can see. Each
column represents a satellite, and each blob within the column a
transponder.
The beauty of this is that you can now instantly
see what's going on instead of having to punch meaningless numbers into
a receiver and hope for the best. For example, at 5230 we can see a
series of transponders that runs almost uninterrupted from 10.7MHz to
12.9MHz. This is clearly a commercial satellite with lots of channels.
Compare that to the ones at 5150 or 5560: these both only have one
transponder at around 11.7MHz, so are, by the nature of the fact that
they are out there on their own, 'interesting', and would be almost
impossible to find with traditional feedhunting methods. We still
had to go and inspect each 'interesting' signal by hand, but it was a
good start.
We planned to create an interface that allowed you
to point and click at the interesting blobs which would then
automatically steer and tune, but 'real' work got in the way, and the
project stalled. Eventually we moved out of the Chiswick office, and
the kit was dismantled and forgotten.
A good ten years later, I saw Jim Geovedi's talk 'Hacking a bird in the sky'.
In it, he calls for anyone with similar experiences to come forward and
talk about them, and it reminded me of this project, so I decided to
see if I could revive it. The kit was long gone, and in any case things
had moved on technically, so I decided to start again and see what
could be done with modern hardware. As luck would have it, my own home
satellite receiver (a Dreambox 7020)
turned out to be an embedded Linux box, and therefore gave me access to
the same kind of data as the RS232 interface on our original receiver.
A visit to my local TV supplier followed, and I soon had a steerable
dish on my roof and was ready to go.
After some experimentation
I figured out how to drive the Dreambox via it's HTTP user interface,
and wrote some code that did a similar job to the original project, but
produced a 3D model as the basis of the GUI:
One of the things that came out of the Dreambox version was the ability
to receive not only Video & Audio, but also Data, and in 2008 I gave a talk at DEFCON 16 that explained this in a bit more detail. Updated slides are here.
However,
this also proved to be a somewhat unsatisfactory approach: the Dreambox
is a PowerPC running Tuxbox Linux, so tools need to be cross-compiled
and copied across, which makes development slow/painful. You also need
to disable the main processes to stop it constantly trying to tune to
whatever channel it thinks you are currently watching, so you're
constantly having to reconfigure/reset it and generally fight for
control. Again, a reasonable start, but not the ideal solution, so,
again, the project languished.
In early December 2009, news started to break of video feeds being leaked from combat UAVs in Iraq (Wall Street Journal article). This would be the kind of feed I would describe as 'interesting', so my curiosity was once again aroused...
During
the Christmas 2009 break, I decided to take another look, only
this time using a dedicated DVB card for a PC. That would allow me to
have complete control, and I should be able to do anything I
liked. I looked around, and the hardware/software available is very
comprehensive (see LinuxTV),
so this was clearly the way to go. I was going to take a similar
approach to the Dreambox version, in that I would use existing tools to
provide me with data and just write a front end visualiser, but I soon
found limitations that basically meant I would need to modify those
tools to perform specific functions, so I would again be fighting
against my environment, which was Bad(tm).
So 'skymap' was born...
objectives
The
main objective is to recreate the original project, coded entirely in
python, and without depending on too many existing abstraction layers.
Even though there are probably libraries out there that would provide
me with a python DVB API, I prefer to write it from scratch, as that
leads to a much better understanding of what goes on at the low level.
By writing longhand code 'idiot style', as I normally do, it will also
be much clearer what is going on (I hope! :)
What I plan to end up doing is:
- Produce a 2D sky map
- Produce a 3D sky map
- Index all services by type (video, audio, data)
- Profile all services (name/provider/EPG etc.)
- Filter 'interesting' services (by eliminating 'uninteresting' ones)
- Provide automated point & click GUI for inspection
roadmap
- Port DVB API to python (done/ongoing)
- Scan range of frequencies (done)
- Output 2D graphic (done/ongoing)
- Steer dish
- Output 3D model
- Create inspection GUI (done/ongoing)
download
Code can be found here: https://github.com/AdamLaurie/satmap
This
version scans the frequency range supported by your hardware, at the
maximum resolution supported by your hardware. It will output a file
called "test.txt", which can be viewed with the very basic GUI. In the GUI, click on a coloured section to see what it is.
If you are able to beta-test, please get in touch and send me feedback! adam (at) algroup.co.uk
kitlist
Anything that's supported by the DVB API should be fine, but for the
impatient, this is the kit I'm using. It's not necessarily the best,
it's just what I happened to end up with, so if you find better
combinations please let me know!
Receiver card: Hauppauge WinTV-NOVA-SE2
Dish (the bigger the better!): 90cm Dish
LNB: Single Sat LNB
Dish Motor: Diseqc Motor
screenshots
Jan 2010 - current version of gui with a single satellite scan (Astra 2D)external links
http://www.satbeams.com/footprints - Figure out which satellites have beams onto your location.
http://www.sat-direction.com/ - and if your dish can see them.
Copyright
(c) 2010 Adam Laurie. Page last updated Friday 26th February,
2010.