Difference between revisions of "HD MythTV On A Budget"
|Line 51:||Line 51:|
$773.99 + some shipping not included above
$773.99 + some shipping not included above
Revision as of 13:42, 5 August 2009
My Goal with this Wiki is to document the trials and tribulations of saving a few dollars on building a High Definition Capable MythTV system on a budget. This meant buying whatever I could at decent prices off of craigslist.
As part of keeping more of our paycheck (Thanks Dave Ramsey), we decided that we needed to get rid of DishTV. Out of the entire package, we felt that losing DVR functionality was unacceptable, so thus started our MythTV journey. Again, in the interest of budget, we found that building our own frontends with new hardware (intel atom boxes) would cost about 200-250. Therefore, I priced out some criagslist prices and found that I could save about 100-200 over the entire project by buying used computers. Since almost all of the MythTV documentation online talked about older hardware, it seemed like a great path.
- Spend about 100 - 150 per frontend - All frontends should be able to handle HD TVs (current TVs are CRT, but you never know what Santa will bring) - Diskless would save some money, power and noise - Original Estimate was $661. Dish + Landline cost about $500/year.
Backend: Total: $202
- I had a home-built Athlon 3700 box collecting dust (yay for breaking WoW addiction) - Hauppauge WinTV-HVR-2250 tuner card - $112 - 2G RAM - 160G HD - 1TB HD - 90
Frontend 1: Total: $135
- Dell Optiplex 320 3.0GHz - $80 from craigslist - ZOTAC ZT-94TEH2L-FDR-V1 GeForce 9400 GT 512MB - $41 from newegg - 1G RAM - $14 from Frys - 80G HD
Frontend 2: Total: $113.99
- HP 2.6GHz - $80 from craigslist - ZOTAC ZT-62AA250-HSS GeForce 6200 256MB (AGP) - $33.99 from newegg - 1G RAM - 80G HD
Networking: Total: $218
- Linksys Router - already owned - Linksys PLK300 PowerLine AV - $145 - Linksys PLE300 - $73 from amazon *Note* I tried a wireless card, SD channels showed up great, but the HD channels were horrible. This was a WirelessG card. Not sure how N would work. The powerline stuff is expensive, but it is working really well.
- Terk Technology HDTVi antenna - $45 from Frys
- 2 Streamzap PC Remotes from Amazon - $60
$773.99 + some shipping not included above
Approx Savings from buying used instead of new hardware: (assuming $200 per frontend)
So there goes the budget :( It will take about a year and a half to start making money off of the setup. Of course, buying used you run the risk of the hardware going bad on you sooner, so I may need to spend that 150 anyway later on when one of my machines die.
Now, for the part you probably came here for, Getting MythTV Working.
After some research, I found that mythbuntu was one of the more popular options in terms of forum and documentation support. So I installed a BE/FE configuration on my backend for testing. After looking at the eye candy and the features, I got preliminary wife support to go ahead with the project. So I ordered the Hauppage 2250 Tuner card. This brought up problem #1.
Issue: Hauappage TV Tuner Card does not work in Linux out of the box Solution: God liked me and gave Steven Toth the great wisdom to make drivers for it. http://www.steventoth.net/blog/products/hvr-2250/ NOTE: Whenever you update the kernel image, you WILL have to re-compile this
After getting it to work, I got LiveTV! Everything was working great on my backend. Then I noticed something.
Issue: HD recordings can take up to 6Gb/hour. SD is about half of that. Solution: Auto-Transcode the kids shows. Make sure to watch the adult shows quickly. Decided not to auto-transcode the adult shows because we tend to watch them the same night. When the shows build up, we may auto-transcode more of them. Of course, we also ordered a 1TB HD :) After transcoding, the kids shows take about 1G/30 minutes and adult shows about 3G/hour
Then I realized I had DHCP on, so I had to lock in the IP address for the backend. After doing some reading, it seemed that the DNS name thing was kind of undependable, so IP address it was.
Issue: DHCP kept changing IP address of backend Solution: Installed dd-wrt and set up a static lease for my backend
So great, backend done, now for Frontend #1.
After some craigslist lurking, bought a Dell Optiplex 320. Small, quiet, PCI-express slot, 3Ghz, perfect, right? Only after about 20ish hours of work! :(
Issue: Dell Optiplex 320 Does not like booting linux. Not sure on the details, but after some research found that it needs Grub2 Solution: You will need to install Grub2. This is not so easy with mythbuntu and requires some command line interaction. WebSite: http://ubuntuforums.org/showthread.php?p=2919008#post2919008 Solution #2: While working on Frontend2, I found Ubuntu Minimal Install ISO. This requires a little bit of additional technical knowledge, but allows the option to install grub2 and mythbuntu from the install menus. More details later.
Issue: Dell Optiplex 320 Does not recognize USB ports until after the middle of loading the OS. So diskless bootup went out the window since the machine would boot off the USB, but then I had to unplug it and plug it back in when the mythbuntu bar was about halfway across the screen. Painful. Solution: Hard Drive install. Tried network booting, but could not figure out how to manage the mythbuntu network boot features. I could create the linux image, but updating it and maintaining it seemed painful. Also, could not get network booting to work very well on the Dell.
Issue: Wanted to use my existing DishTV remotes with the streamzap receiver. Solution: I will try to re-find and post the website that helped me with this. The most important key that I learned is that hopefully you have the Dish remote that can learn. So I took the streamzap and the dish and had the Dish remote learn all the streamzap codes. That way, the streamzap receiver just though the Dish remote was the streamzap and from there, just got all the codes straightened out and mapped the way I want them. Will include the file later. Maybe solution: Not sure if I had to do this, but I did install the latest version of lirc. This will also have to be recompiled after every linux image update.
Issue: Audio was too low Solution: Go to Mixer and turn up all the volumes, then type: sudo alsactl store in a terminal to save all the settings
NOTE: Turn OFF automatic updates. As mentioned above, if it installs updated linux kernels, you will have to recompile things, which is a pain. If you want the latest and greats of the important stuff, go to the mythbuntu website and set up the automatic weekly builds. Just make sure to do the fixes branch.
So Frontend 1 is working great with the video card installed. Able to watch LiveTV, view movies I put on the backend, record things, working great. I learned enough about NFS to connect the media directories on the backend machine to the frontend machine so now all the frontends can share one video library. YAY. Now its time to disconnect it from the router :)
Purchased a wirelessG card. SD channels work great, but most of the channels now transmit HD over the air. So only like 2 channels worked. All of the other ones would play for a minute, stop, play another minute, stop, etc. All the stuff online said it worked, but that was written a long time ago and probably didn't cover HD. Let me tell you right now, even in the same room 10 feet away, WirelessG will NOT work for HD channels.
More research and advice from my co-worker (thanks Erik), I came across Ethernet over Powerline. While scary sounding (don't be messing with my power) and expensive, I was too far into the project to quit now. Sure enough, it worked great! From all the power outlets that I cared about, the bandwidth was plenty.
So Frontend 1 was now live in a room across the house. After some testing and more diddling (that's the thing with MythTV, there's always room to tweak), it was time to continue with the project. I will try to cover some of the more important tweaks a little later.
The bad part about craigslist is that you either have uber patience to find the price/item you want, or grab what you can take. So I bought a HP 2.6GHz. Again, from reading online, 2.6GHz was marginal, but should work. Mythbuntu stated recommended for HD was 3GHz, but I waited a week or so and couldn't find another Dell Optiplex 320 for a decent price.
Anyway, install went smoothly, mythbuntu Frontend. Got it all hooked up to the backend database, started the Frontend up and...
Issue: 2.6GHz really isn't enough for HD content. OOPS The CPU was maxed out. Frontend was at like 50% CPU and xorg was the other 50% Solution: Get a decent AGP video card and hope that it can take some of the pressure off the CPU
So I got the AGP video card and crossed my fingers. No luck. Nothing was better. So more research. Found the playback settings and changed the playback profile to slim. Great improvement, but not there yet. Tried Xvmc. Better still, but still maxing out the CPU and causing visual issues.
So research all available optimizations of mythtv Frontends. Came across a site that suggested that you trash all the extras and install minimal Ubuntu. First, I tried not even installing gnome, only a basic window manager. Tried to get that working, but decided my technical knowledge was not enough for that (it decided for me, but that's besides the point). So exploring the menus found that it lets you install mythbuntu right from there. By this point, I was pretty tired of all this, so I went straight to installing the mythbuntu frontend option. Installed the latest drivers, kept everything else as minimal as possible.
By some miracle, the minimal mythbuntu Frontend install actually performs better than the mythbuntu install! xorg only takes up about 10% CPU now and mythFrontEnd takes from 70-80% So its barely working, but its working!
A major contributing factor may have been that I replaced the TV antenna also. We found that bad reception was very bad for the computer CPU usage :) So bought a better TV antenna and with the minimal install, its working great. Probably wasted a bunch of time with that, but I learned about the minimal install ISO and how it lets you install grub2 from there, so that's good.
Last thing on order is a 1TB Hard drive. The kids shows alone are taking about 40+G transcoded, so when the TV season starts, the adult shows are going to stretch our 80G limit.
Hard Drive Partitioning: / :ext3: 80G (overkill - but all updates take up disk space) /var/lib:xfs: 10G (mythbuntu likes putting stuff here, but its mainly just going to be the database once you set everything up) /liveTV :xfs: 80G (we are using usually 1 TV and LiveTV takes approx 40G after a night of watching. So 2 TV might take up 80G) /media :xfs: the rest (make sure to keep LiveTV and media in separate partitions. If they are on the same partition, you never really know how much free space you have because LiveTV auto-expires. So you could have 3G one day, then 30G the next) NOTE: media = recordings, movies, music, etc. If you have lots of movies or music, you may want another partition for those
Optimizing: - Backend: - In mythbuntu control center, go to advanced, and turn on the mythweb tweak option - Same menu, pick the automatic database optimization - Same menu, turn on automatic xfs defrag
- Frontends: - Go to Setup-TV-> Program Guide and turn off channel icon and genre text. This is useless and seems to improve program guide performance - Play around with the Playback profiles in Setup->TV->Playback. I use Slim for my Dell and I made a new one called Xvmc for the HP. Will post details. - Install latest video drivers. You will have to download from the nvidia website and compile these yourselves. Didn't have a huge impact, but everything helps. - As stated before, use the ubuntu minimal ISO. the advantage is that it automatically grabs the current latest and greatest versions of everything, so you don't have go through the update manager and it will over-write pretty much your entire install. - I set up all the transcodes and commflag processes to be run during the night. By default they run right after the program is over. Since these processes can take up a lot of CPU, that was not good.
Movie Storing: - I tried using the MythTV movie archiving program, but I must be below the intelligence threshold for it, because I failed. I found it easier to find a good mencoder command off the internet and use that on the command line. Here is the process I follow: - Start up mythfrontend and go to DVD ripping area. It is pretty good at finding the correct title track - enter the following command: mencoder dvd://1 -dvd-device /media/cdrom0 -ovc xvid -xvidencopts pass=1 -alang en -oac mp3lame -o dvd.avi - Where dvd://1 : 1 = title number of main movie gotten from mythFrontEnd step. Yes, thats complicated, one of these days I will figure out how to use the mythfrontend ripping system.
NFS - Backend: - fstab: (have a second harddrive for just the mythtv stuff. This will change when I have multiple partitions as outlined above) /dev/sdb1 /video xfs defaults,noatime,nodiratime,logbufs=8,allocsize=512m 0 0 - export: /video *(rw,async,no_root_squash,no_subtree_check) - Frontends: - fstab: 192.168.1.101:/video /video nfs rsize=8192,wsize=8192,intr Xvmc All I had to do here is put this in the /etx/X11/xorg.conf file: Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" Option "UseEvents" "True" EndSection
Xvmc Playback Profile Create a new Playback Profile and use the following settings: - All resolutions - Decoder: Standard Xvmc - OSD: chrom... - Primary Deinterlacer: Box (2x) - Fallback: One Field
General Tweaking of settings - Frontend - Turned on auto commercial skipping - then auto-rewind for 7 seconds after skip - Frontend - Record 90 seconds before and after scheduled recording
Transcoding Options - Autodetect from MPEG2 (this is minimum bitrate, but good enough for low quality TV sets) - Codec: Mpeg-4 - Bitrate: 1500 - Max quality: 2 - Min Quality: 15 - Max difference: 3 - Audio Codec: MP3 - Sampling Rate: 32000 - MP3 Quality: 7 - Volume: 92 - High Quality - Same but Video Bitrate: 2200 - Medium Quality - Same but Video Bitrate: 1800
Remote Mapping: ~/.lirc/mythtv:
# LIRCRC Auto Generated by Mythbuntu Lirc Generator # Author(s): Mario Limonciello, Nick Fox # Created for use with Mythbuntu # OK/Select begin prog = mythtv button = OK config = Space end # Play begin prog = mythtv button = Play config = Return end # Stop begin prog = mythtv button = Stop config = Esc end # Escape/Exit/Back begin prog = mythtv button = Exit config = Esc end # Power Off/Exit #begin #prog = mythtv #button = Power #config = Esc #end # CHUP becomes tuner change begin prog = mythtv button = ChUp config = Y end # ChDown becomes Time Stretch begin prog = mythtv button = ChDown config = A end # Pause begin prog = mythtv button = Pause repeat = 3 config = P end # Mute begin prog = mythtv button = Mute repeat = 2 config = F9 end begin prog = mythtv button = SeekBack repeat = 2 config = Left end # Rewind (10 sec default) begin prog = mythtv button = SeekFw repeat = 2 config = Right end # Skip forward (10 min default) begin prog = mythtv button = TrackNext repeat = 2 config = PgDown end # Skip backward (10 min default) begin prog = mythtv button = TrackPrev repeat = 2 config = PgUp end # Record begin prog = mythtv button = Record repeat = 2 config = R end # Volume Up begin prog = mythtv button = VolUp repeat = 2 config = ] end # Volume Down begin prog = mythtv button = VolDown repeat = 2 config = [ end # Widescreen begin prog = mythtv button = Red repeat = 2 config = W end # Display EPG while in live TV, # View selected show while in EPG begin prog = mythtv button = Menu repeat = 2 config = M end # Scroll Right begin prog = mythtv button = Right repeat = 2 config = Right end # Scroll Left begin prog = mythtv button = Left repeat = 2 config = Left end # Scroll Up begin prog = mythtv button = Up repeat = 2 config = Up end # Scroll down begin prog = mythtv button = Down repeat = 2 config = Down end # Info begin prog = mythtv button = Green repeat = 2 config = I end # Seek to previous commercial cut point begin prog = mythtv button = Yellow repeat = 2 config = Q end # Seek to next commercial cut point begin prog = mythtv button = Blue repeat = 2 config = Z end # Numbers 0-9 begin prog = mythtv button = 0 repeat = 2 config = 0 end begin prog = mythtv button = 1 repeat = 2 config = 1 end begin prog = mythtv button = 2 repeat = 2 config = 2 end begin prog = mythtv button = 3 repeat = 2 config = 3 end begin prog = mythtv button = 4 repeat = 2 config = 4 end begin prog = mythtv button = 5 repeat = 2 config = 5 end begin prog = mythtv button = 6 repeat = 2 config = 6 end begin prog = mythtv button = 7 repeat = 2 config = 7 end begin prog = mythtv button = 8 repeat = 2 config = 8 end begin prog = mythtv button = 9 repeat = 2 config = 9 end ### MPlayer lirc setup # Show OSD begin prog = mplayer button = Menu repeat = 2 config = osd end # Pause playback begin prog = mplayer button = Pause repeat = 2 config = pause end # Skip ahead a minute if playing # If paused, resume playing begin prog = mplayer button = Play repeat = 2 config = seek +1 end # Stop playback and exit begin prog = mplayer button = Stop repeat = 2 config = quit end # Mute begin prog = mplayer button = Mute repeat = 2 config = mute end # Seek back 10 seconds begin prog = mplayer button = SeekBack repeat = 2 config = seek -10 end # Seek forward 30 seconds begin prog = mplayer button = SeekFw repeat = 2 config = seek +30 end # Quit begin prog = mplayer button = Exit repeat = 2 config = quit end # Seek forward 10 minutes begin prog = mplayer button = TrackNext repeat = 2 config = seek +600 end # Seek backward 10 minutes begin prog = mplayer button = TrackPrev repeat = 2 config = seek -600 end # Toggle full-screen begin prog = mplayer button = Green repeat = 2 config = vo_fullscreen end
# # this config file was automatically generated # using lirc-0.7.1-CVS(serial) on Fri Feb 4 23:20:56 2005 # # contributed by Christoph Bartelmus # # brand: Streamzap # model no. of remote control: PC Remote # devices being controlled by this remote: USB receiver # begin remote name Streamzap_PC_Remote bits 6 flags RC5|CONST_LENGTH eps 30 aeps 100 one 889 889 zero 889 889 plead 889 pre_data_bits 8 pre_data 0xA3 gap 108344 toggle_bit 2 begin codes 0 0x00 1 0x01 2 0x02 3 0x03 4 0x04 5 0x05 6 0x06 7 0x07 8 0x08 9 0x09 Power 0x0A Mute 0x0B ChUp 0x0C VolUp 0x0D ChDown 0x0E VolDown 0x0F Up 0x10 Left 0x11 Ok 0x12 Right 0x13 Down 0x14 Menu 0x15 Exit 0x16 Play 0x17 Pause 0x18 Stop 0x19 TrackPrev 0x1A TrackNext 0x1B Record 0x1C SeekBack 0x1D SeekFw 0x1E Red 0x20 Green 0x21 Yellow 0x22 Blue 0x23 end codes end remote
Thats about it for now, will add more if I can think of anything else I had to do. Good luck!