Yahdr - Yet another harddisk recorder, well not really :-)

  Goddess' eye
What it is:

Yahdr is actually a DVB device controller Application/Process which incorporates:
  • A Webserver for the control interface
  • s/c/t zap funcionality for tuning (only T and C for now, no other DVB cards here...)
  • Another server to stream out a MPEG2-TS to client(s)
  • EPG data retrieval/display (full, now/next, search)
Why , "There's MythTV, FreeVo, LinVDR etc." ?

I have different requirements/expectations :-)
No, really. I want a central machine, that
  • Deals with the DVB-Hardware
  • Deals with recording programs
  • Deals with EPG data
  • Is accessible via webserver (No OSD clutter)

I have one machine running all of the time, this machine is also my Web/Database/git and what have you server, running on a PIV/3GHz CPU w/ 1024M.
This machine should not have to cope with de/recoding or displaying MPEG streams.
Then I have my Desktop and my Laptop machine, these two a for watching TV.
Got rid of channels.conf and yahdr.channels, everything is kept in a MySQL database now.
I tried SQLite, but this was getting painfully slow when fed with EPG data....

  • Scanning is done now by simply looking at every known Channel this side of the Universe and then writing found channels/programs to the SQL database
  • EPG is working...live example
  • Record scheduling is working...
  • 14-08-2009: You can schedule events for viewing (switch channels at given time).
  • 15-08-2009: Makefile now included.
  • 16-08-2009: I have to slap myself for not recognizing that message queues are the right way to pass data between two processes *slap*
    (implemented now)
  • 21-08-2009: Threw out mpegtools an replex, since both fail to produce a proper PS. For now TS is streamed and recorded,for recordings you can use:
    mencoder -ovc copy -oac copy -of mpeg -o output.mpg -mpegopts format=dvd:tsaf <file>
    to have suitable input for gopchop and the likes.
  • 07-01-2010: Random thougths;
    I consider Yahdr stable enough to service my needs, still I'm wondering why there's no feedback from people stumbling across this Page, at all.
    So, gimme some :-P
  • 22-01-2010: Started work on some graphics, needed for the PHP-Interface to come.
    Stuffing more html/sql into the main program makes no sense, so it needs a Frontend.
  • 20-12-2010: Got a second DVB-C card, reason enough to start a major rewrite :-P Objective is to have n cards co-exist, so a 'super' class is needed to further abstract the different parts of the program.
  • 29.12.2010: Can't get anywhere with C++ and threads, also the scanning code was pretty messy.
    So I expect to have v2Yahdr ready some time in January (rewritten in plain C).
  • 04.01.2011: No sense in flogging a dead horse, get a new one.
Mode of operation:[almost obsolete]

Yahdr gets started, it tunes the card to the first channel it finds in the DB and waits.
You can point your Browser to http://<host>:8000/?page=channels (or whatever port you configured) to see the startpage
and go from there.
To actually watch whatever is coming out of the card just use:
$ xine http://<host>:666
I found that xine works better than VLC or mplayer, when aspect ratios change i.e.
switching from a 4:3 Station to a 16:9 one.
(VLC opens a new window, mplayer just stops playing :-(
Maybe I should have a look at ffplay to make a usable "display only", player....)
16-08-2009: The above only applies to older versions which used mpegtools (has issues with I-frames) and (my fault :-P ) shared mem to pass data.... (ffplay,mplayer are all happy with my stream now:-) )

21-08-2009: ffplay,mplayer and xine play the TS well, as for vlc I'm probably missing a command line option....
You're invited to participate, or just have a look at the code and tell me where I'm wrong :-) .
Just git it here:

$ git clone git://gate.spitzner.org/flux/storage/repo/Yahdr
or git://github.com/rasp/Yahdr.git
or browse the source Directory
There's also a Yahdr page at sourceforge with recent *tar files...

Prerequisites to compile Yahdr are libmysqlcppconn and libmysqlclient.
Find them at mysql->connectors->c++, mysql->connectors->c
To keep a better perspective of whats going on in the source I found Code::Blocks to be very useful.

Fetch it here: Code::Blocks

It has similar features to C-Forge but is free (as in free to use, not free beer) !
Locations of visitors to this page