Fixing the audio on recorded programs from a certain network (which shall remain nameless)

This bird has no relevance to anything in this article, I just thought it was a nice picture (Source: Public Domain

This bird has no relevance to anything in this article, I just thought it was a nice picture ūüėČ (Source: Public Domain

I have said that I won’t mention any specific channels or networks you can receive in North America by name (with specific exceptions), but if you receive channels from either the Ku-band side of AMC-1 or the C-band side of AMC-18 you have probably encountered some channels with split up audio, where various channels are sent on different streams. The most common format on those channels seems to be:

Stream 1: Left and right front
Stream 2: Center (on left channel) and low frequency (on right channel)
Stream 3: Left and right rear
Stream 4: Described video (when used, on left) and mono (on right channel)

If you have recorded a program from one of those channels as a .ts file, then ffmpeg can convert it to real 5.1 audio, keeping all other streams including video as is, and usually in under five minutes unless you have a underpowered computer:

In FFMPEG Version 2.x:
ffmpeg -i "original program filename.ts" -c copy -filter_complex '[0:1][0:2][0:3]amerge=inputs=3,pan=5.1|FL=c0|FR=c1|FC=c2|LFE=c3|BL=c4|BR=c5' -c:a eac3 "converted program filename.ts"

In FFMPEG Version 3.0 and later (only when using eac3 as the output codec):
ffmpeg -i "original program filename.ts" -c copy -filter_complex '[0:1][0:2][0:3]amerge=inputs=3,pan=5.1|FL=c0|FR=c1|FC=c2|LFE=c3|BL=c4|BR=c5' -c:a eac3 -mpegts_flags system_b "converted program filename.ts"

The above is all one line, even if it appears otherwise in this blog. This discards stream 4, and maps the other three to 5.1 audio. Note that this converts the audio to eac3, which Kodi will generally play as true 5.1 audio, depending on its audio settings and the ability of your AV receiver to handle encoded audio. If that doesn’t work for some reason, you can try changing the -c:a option from eac3 to ac3 or mp2 (and omit the -mpegts_flags system_b option if using ffmpeg version 3.0 or later, since that option is only needed when using the eac3 codec), but in my experience Kodi treats mp2 audio as stereo only.

Note that although the above example lines attempt to copy all non-audio streams verbatim, including ATSC closed captions, I have noticed that closed captions don’t fare well after passing through ffmpeg. In some cases they are missing altogether, and in other cases they are just garbled or missing characters. I don’t know why this happens and I don’t have any solution for the problem at this time.

Some backend programs, such as TVHeadEnd, give you the option to run a Post-Processor Command when a recording is finished, so with such a backend it may be possible to do this conversion automatically. Note, however, that ffmpeg by default sends a lot of output to stderr, which can cause issues in some systems (or just send a lot of unnecessary email to the system administrator), particularly if you are trying to run ffmpeg from a script. Once you know you have it working, you can suppress this output by using the -loglevel quiet switch, like this:

In FFMPEG Version 2.x:
ffmpeg -loglevel quiet -i "original program filename.ts" -c copy -filter_complex '[0:1][0:2][0:3]amerge=inputs=3,pan=5.1|FL=c0|FR=c1|FC=c2|LFE=c3|BL=c4|BR=c5' -c:a eac3 "converted program filename.ts"

In FFMPEG Version 3.0 and later (only when using eac3 as the output codec):
ffmpeg -loglevel quiet -i "original program filename.ts" -c copy -filter_complex '[0:1][0:2][0:3]amerge=inputs=3,pan=5.1|FL=c0|FR=c1|FC=c2|LFE=c3|BL=c4|BR=c5' -c:a eac3 -mpegts_flags system_b "converted program filename.ts"

If you would like to have logging, but only when something goes terribly wrong, use -loglevel fatal instead of -loglevel quiet.

Note: For this to work, you must have a version of ffmpeg from (link is to download page) or, if you are a Linux user but do not feel comfortable attempting to build software from source, then you may be better off using a static build such as is offered at this site (technically this is an unofficial build, so use at your own risk, but as I write this the packages offered in the deb repositories are older versions that don’t work as well for this purpose, and produce files that don’t play well on underpowered systems). Please note that some Linux distributions, notably some versions of Debian and Ubuntu and their derivatives, provide a package called ffmpeg in their repositories that is not true ffmpeg, but instead is a transitional package for libav. The syntax shown above will not work with the transitional package version; you need true ffmpeg for this to work! For the reason this sad situation exists, see The FFmpeg/Libav situation or for a slightly more technical view, FFmpeg versus Libav.

Another possible way to get the real ffmpeg installed on Ubuntu and some derivative systems is explained in the article, How To Install FFmpeg 2.6.1 On Ubuntu 15.04, Ubuntu 14.10, Ubuntu 14.04 And Derivative Systems from the site.

I am not adverse to libav or a companion package called avconv for this process, I just don’t know if either of those can be used for this purpose, or if so, what the correct syntax would be. If anyone knows, please feel free to leave a comment.

There is a followup to this article: Fixing the audio on live TV from a certain network (which shall remain nameless) in TVHeadend. This discusses how to do the audio conversion in real time, so that you can view live TV with proper audio, or begin watching a recorded program before it has completely finished recording.

You may also be interested in this article:
How to play video recorded from high-bitrate 4:2:2 sources on low-power systems


Why certain days in the fall and spring are great times to go out and look at your satellite dishes

There is something that happens in the spring of every year, and then again in autumn.¬† I like to call it the “total eclipse of the satellites”, although that’s probably not a technically correct description because the satellites actually move in front of the sun, as viewed from the earth.¬† And of course, the satellites are nowhere near large enough to block the light coming from the sun.¬† But what is interesting is that on those specific days, at certain specific times, the sun closely tracks the satellite arc.¬† The exact days and times will be different depending on where you live – in the northern hemisphere, the further south you are, the earlier it will happen in the fall, and the later it will be in the spring.¬† When the sun is directly behind a satellite, it causes two things to happen:

First, for the time the sun is behind any given satellite, the solar radiation is much stronger than the signal produced by the satellite.  Therefore, you will lose reception for a few minutes on each satellite in turn, as the sun moves across the arc.  There is really nothing that can be done about this, and broadcasters often provide alternative feeds on other satellites or at different times precisely for this reason.  It may also be a reason that so many syndicated shows are fed in the middle of the night or the early AM hours, since they would then not be susceptible to this twice-yearly interference.

But second, there is also good news for satellite dish owners Рthe time when the sun is directly behind a satellite is a great time to check for obstructions that might be preventing you from receiving all the signal that your dish could collect, or for finding the optimal spot to place a new dish.  The trick is to find out the day and time when the sun and the satellite you are trying to receive are at their closest position in the sky Рin other words, when the sun is directly behind the satellite, or very nearly so.  Then, you look at your dish to see if there are any shadows in it.  If there are, you determine what is causing the shadows and then determine whether you can remove that obstruction (by cutting a tree limb, for example).  If not, it might be a good idea to reposition the dish to some portion of your yard where there are no shadows present.  Note that on a smaller dish such as the type used for Ku band reception, something as small as the shadow from two or three tree leaves can cause a significant loss of signal.

It naturally follows that you can also use the “eclipse of the satellites” to find a place to position a new dish.¬† On the day and time when the sun is directly behind the satellite, look for a large open sunny spot and put your dish there.¬† If your dish will be on a pole, hold some object (it could even be your hand) at the approximate height of the center of the dish and try to get the shadow of that object to appear in the center of a large sunny area (an area larger than the size of the dish, at least), then plant your pole there.¬† Of course when you are doing that, be aware of any nearby shadows caused by objects that might sway considerably in high winds (enough sway for that object to come into the path of your satellite signal) – you want to avoid those if possible.¬† For example, locating a dish in a small sunny hole between a couple of large weeping willow trees might be a bad idea!

It could happen that the day that the sun is most closely behind the satellites is an overcast day.  That often happens at this time of year in some parts of North America.  It is okay to do this check a couple days before or after that day, as long as you do it at the exact time of day that the sun is closest to the satellite.

The real trick to this is knowing the exact date and time when the sun will be behind the satellite you want to receive.  To determine that, you need to know the exact latitude and longitude of your location, and you also need to know the location of the satellite in the sky.  All of these are expressed in degrees.  The satellite positions are easy to find; you can get them from just about any reference that shows the various satellites, such as Lyngsat.  As for your latitude and longitude, go to and zoom in on your house and yard Рyour latitude and longitude will appear in the address bar.  For example, if you were to see something like,-110.112661,556m/data=!3m1!1e3

That means that your latitude is 50.0106762 degrees (North if in North America) and your longitude is 110.112661 degrees (West if in North America).  By the way, that is actually the location of an interesting natural geomorphological feature, but I digress.

Now that you have those values, you can go to a site such as this one (requires Java):

Use sun or moon to choose the best place for your satellite antenna

Or this:

Sun Outage / Sun Interference Prediction for Geostationary Orbit Satellites

These sites will show you when the sun is nearest the satellites, provided you enter the required values correctly.

Note that if you are planning to install a movable dish, you can still check certain specific satellites that you are interested in, but what you want to do is find is a location where it is sunny all day on the day the solar outages are at their peak, or at least during that part of the day when the satellites you want to receive are behind the sun.

When checking for shadows on the dish or at a proposed location for a dish, be sure to check at the EXACT time the satellite is closest to the sun.¬† Most everyone has a cell phone nowadays that displays the time, so getting the precise time is not as much of an issue as it used to be.¬† But it really is important to look at the exact time, since the sun moves one full degree in four minutes!¬† Don’t believe it?¬† Well, the earth is divided into 360 degrees of longitude (180 degrees east to 180 degrees west) and 4×360=1440, which is precisely the number of minutes in a 24 hour day (6ox24=1440).¬† And a one degree difference is enough for the shadows of some obstructions to move off the dish.¬† If you do happen to be a minute or two late, look on the ground next to the shadow of the dish and see if there are any shadows very close to the edge of the dish.

With a larger C-band dish, a small obstruction such as a few leaves won’t matter as much, but be aware that trees normally don’t stop growing until they are quite large, so if you see the shadow of a few leaves creeping onto your dish, perhaps the time to do something about it is while the branch is small.

I will note that is is also possible to use the moon for this purpose, but typically that is not as accurate because it is rare for the moon to be directly behind a satellite.¬† There are also programs you can download to your phone, some of them free, where you can point your phone’s camera at the southern sky and in theory it will overlay what you are seeing with the locations of various satellites.¬† Here is a short video describing one such app:

While apps such as this can be very helpful, in my experience they are not all that precise.¬† If you are trying to receive a signal through a smaller hole between trees, having your dish two or three feet to the wrong side might be the difference between no obstructions and having maybe a third of your dish or more obstructed.¬† For finding a precise location in a tight area, or discovering if that stupid bush that your neighbor planted that’s grown like a weed is really interfering with your signal, there’s nothing like using these “eclipse days” to get an actual, visual representation of what is or isn’t causing interference with the satellite signals.

EDIT: Yet another approach is to use Google Maps, but this works best in areas where their satellite imagery is fairly sharp and clear. Just go to and you’ll be asked to enter your address and select the satellite you want to receive from a dropdown. But here is the interesting part, in many areas you can zoom into your yard and see quite a bit of detail. You can click on the green pointer and drag it to the location in your yard where you’d like to put a dish. It will show you the path to the satellite as a green line, and if that line doesn’t intersect any trees in your yard or your neighbors’ yards that’s a good indication. But unless you live in a desert or next to a lake, sooner or later that line will probably intersect trees. So you still need to determine if the satellite will be over the top of those trees. Under the Google Maps image, that site will also show you the elevation of the satellite – the higher the elevation, the closer the tress can be without problems.

A somewhat similar site, with the long title Google Maps based satellite uplink/downlink site planner with dish alignment look angles and topographic coverage ( clear line of sight calculation ) shows a similar Google maps view, but with the additional feature that if Google Street View has been through your area it will try to show you where the satellite would be in relation to the nearest picture taken by the Google Street View car, which may or may not be helpful.

Either of those sites will tell you the elevation of the satellite at your location, and the azimuth, which is its position in the sky relative to your location. So once you have that information, if you can’t wait for the next solar outage event, you could go to a Sun & Moon Position Calculator, enter your location or find your yard on the map, and scroll down to see where the moon is in relation to you (click the button to start the Autoupdater). The fields of interest to satellite dish installers are the bottom three: “Satellite Longitude (The sat-longitude which gives same azimuth as the Moon)”, Satellite Elevation, and “|Moon Elevation-Satellite Elevation|”.

This may be a little difficult to understand at first glance, but let’s say you are wanting to find a place in your yard to place a dish that will receive a satellite at 97¬įW. You would have to enter your location at this site, then start the Autoupdater and watch the Satellite Longitude as it counts up to 97¬įW – if it’s already beyond that, try at an earlier time the next day. When it reaches that location, see if you have a clear view of the moon in the sky from your proposed dish location, and at the same time also note the value in the “|Moon Elevation-Satellite Elevation|” field. This tells you how much higher or lower the moon is in the sky compared to the satellite. An ideal situation would be if it’s within a degree or so of the satellite elevation, but if the satellite elevation is a concern then it may help you estimate how much variation there is between the moon position and the satellite position.

Of course using the moon isn’t always easy, since it’s more easily obstructed by clouds than the sun, and also it rises and sets at different times of the day or night, and can be difficult to impossible to see on a bright sunny day, particularly if it’s only a partial moon. Many weather sites will tell you when the moon rises and sets in your location, though you may have to search a bit to find that information on the site, or you can use this Sun or Moon Rise/Set Table for One Year (be sure to select moonrise/moonset in the dropdown, and don’t forget to “Add one hour for daylight time, if and when in use”). If, on any given day or night, the moon is below the horizon (between moonset and moonrise) when it’s at the same longitude as the satellite as the satellite you’re interested in, you won’t be able to use it that day or night. And also, during the monthly dark of the moon (the day or two just before the new moon), it may be difficult to impossible to see in the sky.

I mentioned above the site Use sun or moon to choose the best place for your satellite antenna but since that requires Java, it won’t work on many modern computers (and personally I don’t recommend installing Java). If, however, you do have Java installed, and can figure out how to use the site, it can help you predict when the moon will be nearest (in terms of relative position in the sky) to the satellite you’re interested in.

Review of the TBS MOI+ DVB S/S2 Satellite TV Linux Server – a bit like a HDHomeRun, but for Free-To-Air satellite signals

Topics covered in this review:

The reason I wanted to write this review

I’m a long time satellite TV hobbyist, having having had a large C-band dish for a couple of decades now (I’ve acquired a few additional C-band and Ku-band dishes since then). Some think that satellite TV as a hobby is dead, but it really isn’t. There are still many signals up there, but if you’re still trying to make an old analog satellite receiver work, you’re not going to see much. Sorry, my friend, but the world has gone digital, and now you need a digital satellite receiver to see all the free TV in the sky.

You could go out and buy a standalone receiver for the purpose, but in most cases you are limited to connecting it to one TV set. If you hook it up to the TV in your Living Room, then you’ll need extra wiring and maybe a switch to also enjoy it in your bedroom. If you want to be able to watch the satellite signals you receive in any of several rooms of your home, or on your computer, tablet, or phone, that’s going to be rather difficult with a standalone box.

A couple of years ago, I acquired a HDHomeRun Dual device, and discovered how nice it was to be able to stream terrestrial TV signals to anywhere in my home via my local network. I set up a backend system so that I could record programs and enjoy watching them at my convenience. I wondered if it was also possible to do the same thing with the signals I received off my satellite dishes. So earlier this year I attempted to build a backend system that could receive free-to-air satellite signals and stream them to the various computers around my home, including the home theater PC’s that are connected to my HDTV receivers. Let’s just say that the first attempts didn’t work as well as I’d hoped. There is a huge learning curve, particularly if you’re not a programmer nor otherwise particularly geeky, and sometimes the hardware and the backend software just won’t cooperate.

Then I stumbled across a page on the TBS MOI+. I suspected that it might be able to accomplish what I’d been trying to do, and in a lot smaller package. So, I went online in an attempt to find some reviews on this device. To my surprise, little has been written about it, particularly in English. So, hoping to fill that gap, I contacted TBS and asked if they might be interested in providing a unit for review purposes. They graciously consented, and this review is the result. Just so you know, I did not promise to write only nice things about the unit, and I’m not getting paid anything for this review, beyond receiving the MOI+. So, this will be as honest of a review as I can make it.

Introduction to the TBS MOI+

MOI+ Front

The TBS MOI+ is a standalone unit that streams satellite TV signals over your local network to PC’s, tablet computers, or phones, and with a small bit of effort can also function as a PVR. It runs Linux and has two different flavors of backend software installed, VDR and TVHeadEnd (actually, those are the only two that can be configured from a web browser, but the MOI+ also includes Mumudvb and DVBlast for more specialized applications). Therefore it can serve as a PVR or live streaming backend for Kodi (formerly known as XBMC), the popular multi-platform software that can turn almost any modern computer or tablet into a magic video box, and to other software clients that can receive such streams.

Please keep in mind that the MOI+ is not a standalone receiver – you cannot hook your TV directly to it, since it has no HDMI port. However, you can watch the received signals on a TV connected to a PC (some “smart” TV’s may be also be able to receive the streams directly). The sole purpose of the MOI+ is to receive and stream live and recorded satellite TV signals to other devices in your home. Outside of North America, it may also be able to receive terrestrial TV signals, depending on the region and the card installed.

MOI+ Back

As the unit is currently supplied in North America, it includes a TBS6991SE Dual Tuner Card with two CI slots. The description for that card states that “Inserting the correct CAM and subscription smartcard into the CI slot makes it possible to watch encrypted pay TV.” Unfortunately, that does not mean you can use it to receive North American commercial services such as Dish Network, DirecTV, Bell Expressvu, Shaw, etc. since they use a different authorization method that only works with their equipment. However, that particular card also works very well for receiving Free-To-Air satellite signals, which are available here in North America.

You can remove the supplied card and replace it with any of several other TBS PCIe cards, including the TBS6985 DVB-S2 Quad Tuner PCIe Card, in the event that two tuners aren’t enough for you.

I tested the unit using the supplied card, and I connected it using wired Gigabit ethernet. I’m not a big fan of using WiFi for streaming video, although the MOI+ has that capability.

The first thing I will say it that in my testing, it was able to flawlessly stream every free-to-air signal that I was able to receive, including a difficult 4:2:2 signal. With both tuners in use, and the device streaming previously recorded content to one computer, CPU usage was nowhere near being maxed out. As long as the tuner could lock onto the signal, the channel could be streamed or recorded.

MOI+ specifications

The specifications for the MOI+, taken from their product page, are as follows:

SoC: Marvell 88F6282 1.6 GHzCPU: Sheeva CPU core V5TE ARMRAM: 1GB DDR3Flash: 512MB NAND Flash
2x USB 2.01x SATA portEthernet: 100/1000M Gigabit EthernetWifi: 802.11nProtocol: HTTP, UDP, RTP, TCPOS: Linux
Preinstalled software
Tvheadend, VDR, Mumudvb, DVBlast, szap, tzap, czap, dvbdate, dvbnet, dvbscan, dvbsnoop, dvbtraffic, dvbscan, scan-s2, szap-s2, dst_test, telnet, ssh, sftp, samba, oscam
Client end support
PC: Windows, Linux, MacTablet: Android, iOSSmartphone: Android, iOS
DVB tuner support
DVB-S2/S: 1 tuner cardDVB-T2/T: 1 tuner cardDVB-C/J.83B: 1 tuner card

Note that the unit will only accept one tuner card, and in the United States or Canada only a DVB-S or DVB-S2 card would be useful, but you would probably want a DVB-S2 card (which also receives DVB-S signals), since quite a few channels have converted to DVB-S2 in recent years.

The specifications note that there is a SATA port on the unit. That is true, but you have to remove the cover of the unit (which involves removing six tiny screws) to get at it. Unfortunately what is not available is a way to mount or power a SATA hard drive. There is enough room inside the unit for a notebook-style thin SATA hard drive, but there are no mounting holes or brackets. There is a connector on the main board that is not used, and its purpose isn’t identified, and it might in fact be a power connector, but I couldn’t be sure. So, when I hooked up a hard drive, I simply ran a SATA cable out the back of the unit, through the card slot opening, and connected it to an external SATA drive using a separate external power supply. This arrangement seems to work quite well.

This is a picture I took of the inside of the unit – sorry about the flash glare but I’m not a professional photographer. In this photo, the SATA connector is on the main board (the one on the left), just above the TBS logo. The unknown connector that might be power is above it, near the top edge of the board in this photo, next to the LAN port:

MOI+ inside with original tuner card

The published specifications don’t mention anything specific about the operating system, but the MOI+ appears to be running BusyBox, which describes itself as “The Swiss Army Knife of Embedded Linux.” ¬†BusyBox has become a rather popular on small devices such as this, and it offers much of the functionality found in larger Linux-based operating systems. ¬†You can find a full description and usage information at this link.

The preinstalled software includes the following:

  • Tvheadend – a TV streaming server for Linux that also supports recording, it is configurable using a web-based GUI.
  • VDR (Video Disk Recorder) – designed primarily to record and store digital video, configurable using a web-based GUI.
  • Mumudvb (Multi Multicast DVB) – a program for streaming TV over a network.
  • DVBlast – from the VideoLAN organization, a simple and powerful MPEG-2/TS demux and streaming application.
  • dvbscan – a command line frequency scanning utility that is part of the LinuxTV dvb-apps
  • scan-s2 – a command line frequency scanning utility very similar to scan
  • szap, tzap, czap, dvbdate, dvbnet, dvbsnoop, dvbtraffic, and szap-s2 are all part of the LinuxTV dvb-apps. ¬†Few of these will be useful in North America.
  • dst_test – appears to be some kind of test/demo utility that is useful when CI slot is used. ¬†Probably not useful in North America.
  • telnet, ssh, sftp, samba – protocols for network connections to the MOI+. ¬†The latter two are useful for file transfers.
  • oscam – Open Source Conditional Access Module software. Probably not useful in North America.

I suspect that most non-commercial purchasers of the MOI+ in North America will use either TVHeadEnd or VDR almost exclusively, and rarely touch the other software, except for the software that enables local network connections to the server.

Unfortunately, the MOI+ does not appear to include any software that will do true “blind scanning” of satellites (that is, software that will find all of the transponders, and the services contained within them, on a given satellite). With both dvdscan and scan-s2, you can only scan a single transponder, and you must enter the frequency of that transponder.

Setting up the MOI+

The MOI+ is what I would consider about average in terms of setup difficulty. Connecting up the hardware is easy, you simply connect your wires from your LNB(s) or switch(es) to either or both of the tuner inputs. There is an ethernet cable supplied with the unit and you connect that to your router or switch, or if you want to use a Wi-Fi connection you simply attach the included antenna.

When you power up the MOI+, it flashes a number of messages on the front panel display, but the one you will initially be most interested in is the IP address of the unit. It will grab an IP address via DHCP and you can then go to any computer on your network and browse to that IP address to verify that the unit is working and accessible via the network.

At this point, before you do anything else, I suggest you upgrade the unit’s firmware. The reason for doing this now is that whenever you upgrade the firmware it essentially performs a factory reset and you lose your existing settings, so there is no sense configuring anything until you have the latest firmware installed. The instructions for updating the firmware are in the first post in this thread, or after you have performed the initial firmware update, you can browse to the MOI+ IP address and click the button that says “Update Guide”. Note that you’ll need a USB flash drive with at least 1 GB of space, preferably formatted in FAT32 format (Linux formats such as EXT3/4 may or may not work). I do recommend copying all three of the mentioned files to the flash drive, so that all are updated. Note that you have a choice of kernels, one supports cards with DVB-S2 + DVB-T2 and the other supports cards with DVB-S2 + DVB-C. In North America you are not likely to be using a card that receives anything other than DVB-S2, so you can use either kernel, since both include DVB-S2 support. So copy either one of the kernel files, plus the other two mentioned files, to your flash drive.

When you attempt to download the firmware files, which are stored on Sourceforge, you may run into difficulty obtaining them from a North American site. If that happens, just switch to a different mirror site. I wound up getting the files from a mirror site in Singapore.

After the MOI+ finishes updating its firmware, you can go back to the web page and begin configuration. There are buttons in the left-hand column that show the available options. The first one is Network Settings:

MOI+ Network Settings

By default it will come with DHCP enabled but you will almost certainly want to disable it and use a static IP address, so that your other computers can find it on your local network. Also, if you leave it on DHCP, it seems to pull a new IP address every time it reboots, or at least it did for me. So disable DHCP and enter a valid fixed IP address on your local network here, or alternately you could configure your router to assign the same IP address to the MOI+ every time it boots up.

I did not try enabling WLAN because as I mentioned before, I simply don’t care much for WiFi. It seems to me that if you are going to try to stream high bitrate video, you will get best results with a wired Gigabit connection. But, the ability to utilize WiFi is there if you need it.

If you don’t connect the supplied antenna to the unit, the front panel display will complain “Antenna Issue” at regular intervals, even if you don’t enable WLAN. But, that does not seem to affect operation of the device.

The next button gives you access to the Tuning Settings:

MOI+ Tuning Settings

This page lets you select which backend software you want to use. When you check the desired button it will configure the program and take you to its interface. I elected to use TVHeadEnd since it seems to be preferred by Kodi/XBMC users. Note that when you elect to use TVHeadEnd, all the configuration of LNB’s, switches, etc. is done from within the TVHeadEnd interface. If you ever forget how to get to that interface, just come back to this page and click on TVHeadEnd and it will take you there.

I want to skip down a bit and mention the About page, since it contains information on how to log in to the device using ssh:

MOI+ About

The about page shows the firmware version you are running, and also is a handy reference page for various ways to connect to the MOI+.  Note that the address is just an example address; you should actually use the IP address shown on the front panel display.

There are at least a couple of things that might give security-conscious folks a bit of concern. One is that you log in as root, using a default password (and there is no way to change it using the web interface). The other is that when you browse to the MOI+ SMB share, the entire filesystem is fully exposed:

Finder showing MOI+ shares

While this can be very convenient, it’s not such a great thing if people you don’t fully trust have access to your local network. But keep in mind this is Linux, so if you know your way around in Linux then you already know how to make it more secure, should you deem that necessary. If you don’t know your way around in Linux, or don’t want to be bothered with additional security, then at least make sure your MOI+ is behind a router with a firewall that’s enabled, and don’t forward any ports to the MOI+ or do anything that would expose it to the wide open Internet.

The other side of that coin is that you Linux guys that like to tweak various software programs to make them better won’t need to figure out how to “jailbreak” a locked-down device in order to play around here.¬† The true Linux gurus in the crowd might well be able to extend the capabilities of this device!

The Utilities page was really the only place where I ran into significant issues with the MOI+ web interface:

MOI+ Utilities

First I will note that at the bottom of this page there is a button you can use to reboot the MOI+ – I had totally missed that until I took the screenshot for this review! It is good that they provide that, but I wish there was also a similar button that would allow you to safely power down the device, particularly since there is no power switch on the unit – the only way to physically power down the MOI+ is to pull the power cord. You can safely power down the device by going into an ssh session and entering the poweroff command, but for those who would rather do it from the web interface, a “Power Off” button would be nice.

The page also offers a way to ping an IP address to make sure that the network connection is working. Strangely, it appears that if the ping is successful, it pops up a box saying “The IP is in the same IP range as MOI”, whereas if the ping is unsuccessful, the popup reads, “The IP is not in the same IP range as MOI”.

The real issue with this page is the time setting. No matter how many times I attempted to set it, refreshing the page would always show that I was in the time zone for Beijing, Hong Kong, and other parts of Asia, although the time itself would appear to be correct, and if I ran the date command in Linux it would show the correct time but the wrong time zone. So, you might ask, what is the problem? Well, the problem was that TVHeadEnd got confused about time. For example, if I told it to record a channel at 4:00 PM (or 16:00) it would then tell me the recording was scheduled for 17:00. It would actually record at the time I had set, but the saved recording would be timestamped an hour later than when it was actually recording.

The fix for this was to not use the web interface to set the time, but to follow these instructions in “Method 3 of 3: Using the Command Line” on this page (only up through step 4) and then rebooting. You may also want to edit the /etc/sysconfig file line that reads TZ=”Asia/Shanghai” to correctly reflect your region and city (you will know what those are if you followed the instructions mentioned above) but that doesn’t seem to affect TVHeadEnd as much as /etc/localtime not being correctly linked (if you do edit /etc/sysconfig, you may also need to run “chmod 644 /etc/sysconfig” afterward to make sure that the permissions are still set as they should be). I have no idea why the Utilities page wouldn’t set the time correctly for me, but one way to check whether it did is to ssh into the MOI+ and run the date command – if it shows the wrong time zone designator then it probably didn’t get set correctly. This was the only real issue I had with the MOI+ web interface.

There is one other issue with the time, however – the MOI+ doesn’t keep it very well, which is a bad thing if you intend to use it to schedule recordings of programs. ¬†Fortunately there is an easy fix, which I will discuss a bit later.

The TVHeadEnd Guide and the Update Guide are exactly what you would think they are – guides on setting up TVHeadEnd, and on how to update the firmware. Note that if you manage to really screw things up, you can re-update the firmware (using the same versions as you previously installed, if no new version is available) and it will have the same effect as a factory reset (one user reported that if it’s only the TVHeadEnd configuration that is irreparably messed up, running rm -fr .hts/* from the command line will give you a fresh start, but that may not always work). Obviously, a firmware update is not something you want to do frivolously, because you will need to re-enter your settings after you have completed the update. If there is a way to save your entire TVHeadEnd configuration to a file that can the be re-imported back into TVHeadEnd, I have not discovered it yet.

Configuring TVHeadEnd

As noted above, there is a menu selection in the MOI+ web interface that shows you how to configure TVHeadEnd (also available here), and it should be enough to get you started. For the most part you can just follow those instructions, but there are a few things that North American users should be aware of. For one thing, TVHeadEnd assumes you’ll be using a Universal LNB, which is not something used all that often in this part of the world. Here, you are much more likely to be using a standard (Ku band) LNB, or even a C band LNB. But when you are setting up the TV adapters, you won’t find an option for those. The trick is that you need to select “Advanced” in the SatConfig dropdown, then save it, and then you will notice that in the left hand menu tree, additional options are exposed. This is how TVHeadEnd seems to work; it doesn’t show you options that are not applicable to your existing configuration, so as you make the configuration more complex, more options are exposed.

TVHeadEnd TV Adapters Tuner Settings

So once you have selected the Advanced setting and clicked Save, you can expand the tree view an additional level and click on Advanced, where you will select the number of orbital positions that each tuner has access to, which is 1 if you are connecting a tuner directly to an LNB. If you are connecting to a 4 port DiSEqC then it’s 4, as shown here:

TVHeadEnd TV Adapters Tuner Advanced Settings

After you save that, then you can configure settings for each of your orbital positions, including LNB type. In North America you will probably want to select either “C-band” or “Circular 10750”. You would use the latter for any standard Ku band LNB that has a LO Frequency of 10750 MHz, even if it’s not circularly polarized. Keep in mind that this type of software (or at least the satellite tuning portion) is much more widely used in Europe and other places outside North America, and they are much more likely to be using a circularly polarized LNB than we are here.

TVHeadEnd TV Adapters Orbital Position Settings

If you are using a standard DiSEqC and/or 22 kHz tone switch, then select “Generic” for the switch type. For a four port DiSEqC switch, you would use the “Committed” dropdown and select the port there. TVHeadEnd uses AA, AB, BA, BB port descriptors, which correspond to DiSEqC switch ports 1, 2, 3, and 4 respectively. I had no problem using a standard 4 port DiSEqC switch (well, except that it turned out that the brand new DiSEqC switch had a bad port 4, but that’s obviously not the fault of TVHeadEnd or the tuner). In the screenshot below, DiSEqC port 2 (AB) is selected. Settings for any types of switches you don’t have should just be left at the default settings.

TVHeadEnd TV Adapters Generic Switch Settings

One other consideration for North America is that it is extremely rare for the free-to-air signals to include Electronic Program Guide data. Therefore, it would be a good idea to go to Configuration | Channel / EPG | EPG Grabber and in the Over-The-Air Grabbers section, uncheck all the grabber selections. None of those will work in North America anyway, so there’s no sense burning up CPU cycles checking for EPG data that will never appear. ¬†I will have a bit more to say about getting EPG data later in this article.

TVHeadEnd Disable Over-The-Air Grabbers

Adding storage for recordings

In testing the MOI+ I found that the best way to add additional storage is to add an external SATA hard drive with its own external power supply. ¬†It should be formatted using EXT4 format, which will be much easier if you have access to a computer that runs a full version of Linux, such as Ubuntu. ¬†If you don’t have any computers that have Linux permanently installed, keep in mind that you can always download a “Live” version of a distribution such as Ubuntu, and run it from a DVD or a flash drive long enough to format a hard drive. ¬†I temporarily hooked up the drive to my home theater PC box that runs Ubuntu, and formatted it there.

When formatting the drive, I used GUID partitioning rather than MBR. ¬†If your drive is larger than 2 TB then you really don’t have a choice – you must use GUID!

If you have a MOI+ that comes with the same TBS6991SE card that the one I’m reviewing did, and you are not using the CI slots (as you would not be in North America), then you can run the SATA cable out though the hole where the CI cards would be inserted. ¬†If you decide to use a different TBS tuner card, there is a little insert next to the card tab that is held in place with two screws and that must be removed in order to add or remove a card. ¬†You can just leave that off and run the SATA cable out through that hole. ¬†If the cable is likely to get jiggled a lot, I’d be inclined to wrap some electrical tape around it at the point where it comes out of the hole. ¬†The edges aren’t particularly sharp, but a lot of repeated jiggling could eventually wear through the SATA cable’s insulation.

Once you connect the SATA drive and boot up the MOI+, it will display “SATA mounted” as one of the front panel messages. ¬†You should then be able to browse to the drive at /mnt/disk, and in TVHeadEnd under Configuration | Recording | Digital Video Recorder you can specify something like /mnt/disk/recordings as the Recording system path, and the in the Timeshift tab you can specify something like /mnt/disk/timeshift as the Storage Path (don’t forget to check the Enabled box if you want timeshifting to work).

One minor annoyance is that if you connect to the SATA drive from another machine on your local network via SMB, it does not show the free space on the mounted drive accurately, but instead shows the free space remaining in the MOI+ internal storage. ¬†This may prevent you from copying large files to that drive via SMB, though I can’t think of any reason you’d want to. ¬†TVHeadEnd has no problem with saving large files to the drive, and if you really feel the need to copy a large file to the drive you can always use SFTP, which works fine for the purpose.

In case you are wondering, when TVHeadEnd saves recordings to the drive, it saves them as .ts (MPEG transport stream) files, which can be copied and played using any software that recognizes that file format (such as VLC).  Of course, Kodi/XBMC can also play the recorded programs.

There are two USB ports on the device but it appears they only recognize devices formatted as FAT32, which you definitely don’t want to use for saving satellite recordings due to the limitations of that filesystem. ¬†Also, it appears that a FAT32 device is only automatically mounted for a short time at bootup for the purpose of accessing any update files and installing the updates. ¬†If you want to access a device plugged into the USB port thereafter, you will need to ssh into the device and issue a mount command from the command prompt. A Linux guru may well be able to get more functionality out of the USB ports, but I am not a Linux guru and my SATA connected drive worked perfectly, so I really didn’t attempt to do much with the USB ports.

The only downside of using a SATA drive is that there is no provision for mounting it inside the case.  I mentioned earlier the question of whether there is a power source available that is capable of powering the drive.  That said, there is certainly available enough room inside the case for a laptop-size hard drive, but there are no mounting brackets or any other obvious way to mount one there.  But in our testing, an external SATA drive powered by a separate external power supply has been working very well for recording programs.

Saving the internal flash memory

If there is one thing that I think might have been a questionable design choice for this unit, it is that the flash memory is not removable and replaceable.¬† What this means is that eventually, hopefully after many years of use, the internal memory will have received the maximum number of write cycles that it will accept, and it will begin to fail.¬† If that happens, the entire device will likely fail and there will be no easy way for the end user to bring it back to life.¬† So, it’s preferable to limit what is written to the flash memory, and one of the biggest offenders is log files, since they are continuously created.

For those knowledgeable in Linux, an easy solution is to symlink the /var/log file on the device to a directory on the hard drive.  Of course, you only want to do that if you have added a hard drive and plan to leave it continuously connected.

There are plenty of pages on the Internet that explain how create a symlink in Linux so I won’t cover that here.¬† But basically, there are five broad steps to making this work:

  1. Create a directory on your hard drive to hold your log files, and make sure that ownership and permissions are the same as for the original /var/log directory.
  2. Copy the existing contents of /var/log to your new directory.
  3. Rename the existing /var/log directory to something like /var/log.backup
  4. Create the symlink, linking /var/log to your new directory.
  5. Verify that if you do “cd /var/log” and then list the contents of the directory, you see the original contents of /var/log (which should be the same as in¬† /var/log.backup).¬† If it looks okay, reboot the device.

Please do not attempt this if you aren’t familiar with Linux, because if you mess things up and accidentally delete any vital files, you could wind up having to do a full firmware reinstall, and you would lose your entire current configuration!

By the way, I am not suggesting that the log files are the only files that are sufficiently large, or updated frequently enough to consider moving them to the hard drive.  As I gain more experience with the MOI+, I may well decide that there are other files or directories that fall into that category.  I just wanted to point out that it is possible to do this.

In my attempts to ascertain how much of an issue this really is, I discovered that the primary filesystem on this device is formatted using yaffs2, which I had never heard of prior to encountering it here. This is revealed if you run the mount command:

[root@moi /]# mount
rootfs on / type rootfs (rw)
/dev/root on / type yaffs2 (rw,relatime)
proc on /proc type proc (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,relatime,mode=777)
tmpfs on /tmp type tmpfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
/dev/sda1 on /mnt/disk type ext4 (rw,relatime,barrier=1,data=ordered)

The final line of the above output is the attached SATA hard drive.

My understanding is that yaffs2 is designed to be more “friendly” to flash memory than some other, better-known filesystems, by minimizing unnecessary writes, so at least the designers of the MOI+ appear to have taken the limitations of flash memory into account. However, this cannot prevent application software from performing excessive writes.

If TBS ever comes out with a second generation MOI+, I would hope they would consider using removable and replaceable flash memory, perhaps a SD card such as is used by the Raspberry Pi.¬† That way, if the memory ever does go bad, the user could simply replace it, reload the firmware, and get the device working again.¬† Another potential improvement that could work with the existing hardware would be to give users some way to copy the entire system from the internal memory to the hard drive, and then run it from there, so that virtually all writes go to the hard drive and not the flash memory.¬† Unfortunately, I’m not familiar enough with Linux to be able to tell you how to do that, or whether it’s even possible.

Using a different tuner card

I wanted to test this unit using multiple tuner connected to DiSEqC switches, so I swapped out the provided card with a TBS6985 DVB-S2 Quad Tuner PCIe Card. ¬†At one point I had four tuners recording high definition signals, and I was simultaneously playing one of them using XBMC on my computer. ¬†I also ssh’ed into the MOI+ and found that the CPU was hardly breaking a sweat – it rarely edged up to around 25% but that was about it. ¬†The recordings made with this unit have virtually flawless.

MOI+ inside with 4 port tuner card

The above photo shows the MOI+ with the TBS-6985 tuner card installed, and also the SATA cable for the external drive. ¬†I did have one small issue after installing this card with regard to TVHeadEnd, which found the card and showed the tuners properly, but when I tried to scan for signals it didn’t appear to be receiving anything.

TVHeadEnd with TBS6985 installed

It turns out that for some reason, when a TBS-6985 card is installed TVHeadEnd identifies the tuners in the reverse order of what you’d expect. So, whereas you might expect tuner port A to be mapped to adaper0, and tuner port D to be mapped to adapter3, in fact it’s exactly the reverse, where tuner ports A, B, C, and D ¬†are on adapters 3, 2, 1, and 0 respectively in TVHeadEnd’s configuration. ¬†Once I figured that out and adjusted my TVHeadEnd configuration accordingly, it worked great! ¬†So if you ever install a different tuner and it doesn’t seem to be working, make sure it’s not simply an issue of the tuners being mapped in reverse order to the adapters in TVHeadEnd.¬† Note that this reversal did not occur with the original tuner card that was installed in the device, so you might or might not see this happen with any given TBS tuner card.

Note that you can’t just plug in any old DVB tuner – since this is a TBS device it quite naturally assumes you will be using a TBS card. ¬†And only certain cards will work (there is a list at the bottom of the product page). ¬†It accepts certain TBS DVB-S2, DVB-T2/T/C, and DVB-C tuner cards, although the latter two types would not be very useful in North America.

Keeping the time

If you plan on using the MOI+ to record programs on a schedule, then it is rather important that the system time be accurate.  The device is not configured by default to sync up with any time servers on the Internet, and unfortunately its internal clock has a tendency to lose several seconds per day.  But, you can make the MOI+ synchronize the time once by running this from the command prompt:

ntpd -q -p

If you are not in North America or wish to use a different NTP time server (perhaps one on your own network), substitute it for  Or, you can just use, which should connect you to a nearby server. You can make ntpd run as a service until the next reboot by leaving out the -q option,

Note, however, that if you change the time while TVHeadEnd is running, and you do not reboot immediately afterwards, your recordings are likely to have incorrect time code information.¬† This is probably the most annoying quirk of TVHeadEnd that I have encountered.¬† I strongly suggest that you don’t ever run any command that impacts the system time if you do not plan to reboot afterwards, because what happens is that TVHeadEnd will make recordings that are challenging to play, especially if you like skip forward or backward while viewing a program.¬† Also, the reported duration of the recording may be wrong – for example, I’ve seen a one hour program reported as a two hour program.¬† I’ve never actually had a recording that could not be viewed at all, but viewing the program was a lot less enjoyable when I couldn’t skip backwards or forwards, or use fast forward or rewind.

The solution to that is to start ntpd as a service every time the system reboots, and before TVHeadEnd starts. ¬†To do that, you need to add a script in the /etc/init.d directory named S95ntpd. ¬†The “S95” part of the filename sets the priority, and should cause the script to run after your network connections have been established, but before TVHeadEnd is started. ¬†Here is a sample S95ntpd script:

# ntpd        Starts ntpd

start() {
	echo -n "Starting ntpd: "
	/usr/sbin/ntpd -p
	echo "OK"
stop() {
	echo -n "Stopping ntpd: "
	killall ntpd
	echo "OK"
restart() {

case "$1" in
	echo "Usage: $0 {start|stop|restart}"
	exit 1

exit $?

Don’t forget to change the time server address to the one you prefer to use, if you don’t want to use ¬†After adding the script, open a ssh session and run this to make the script executable:

chmod 755 /etc/init.d/S95ntpd

After rebooting the system you can run this to see if ntpd is running:

ps aux | grep ntpd

You should see something like this:

 1035 root       0:00 /usr/sbin/ntpd -p
30856 root       0:00 grep ntpd

It’s the first line that is important; as long as that is there you know that ntpd is working.

I am not a Linux coder so for all I know the above may not be the best possible example of such a script, but it seems to work for me (if you have any problems, try replacing the leading spaces in the lines with tabs). ¬†Also, the above script only works when you have a working Internet connection. ¬†If you are going to use the MOI+ in a situation where you¬†don’t have Internet access, I have read that you can use the¬†adjtimex command to fix the drift of the system and hardware clocks, but that is beyond the scope of this article.

If you go into the TVHeadEnd Configuration | General section, you may notice checkboxes for “Update time” and “Enable NTP Driver”. ¬†If ntpd is not running then these settings will not persist, and if nptd is running and you set them, at least in my experience you’re likely to get recordings with bad time code information, which as mentioned above can make playing them a challenge. And, the settings still will not persist through the next reboot. So, my advice is that you don’t check either of those boxes.

Connecting Kodi/XBMC to the TVHeadEnd backend

Once TVHeadEnd is up and running it is easy to connect Kodi or XBMC.  All you need to do is this (from the XBMC Wiki):

  1. Go to Settings -> Add-ons -> Enabled add-ons -> PVR Clients and select the Tvheadend add-on
  2. Select “Configure”
  3. By default, you should only need to fill in Tvheadend hostname or IP address.

Quirks of the TVHeadEnd software

This is not properly part of the review of the MOI+, but should you purchase one I’d like to see you as happy with it as I am with this one. ¬†TVHeadEnd has a bit of a learning curve, to put it mildly, but fortunately it’s not that hard to get it set up and to get it streaming to Kodi/XBMC, or whatever other compatible software you’d like to use. ¬†I’ve used at least two other backend programs prior to TVHeadEnd (Mythbuntu and MediaPortal). ¬†TVHeadEnd is, for the most part, definitely easier to configure than either of those once you figure out that certain options aren’t exposed until you select another option that requires them. ¬†When I was trying to get MediaPortal to work, one of the things that really drove me batty was their screwy method of handling DiSEqC and 22kHz tone switches. ¬†In contrast, TVHeadEnd handles things like that in a much more logical manner, although you do run into the occasional weird thing (like the tuners sometimes being mapped in reverse order). Still, with one exception (importing guide data), this was the easiest of the three programs to configure, in my opinion.

But TVHeadEnd does have a few weird quirks.  One is that after you have mapped services so that they appear in the Channels tab (under Configuration | Channels / EPG), you will probably want to try to rename many of them.  Under the Channels tab (NOT Services), you can rename a channel by clicking on it, then clicking the Edit button, and then changing the name.  BUT if you do that, what you may find is that Kodi/XBMC or whatever you are using can no longer tune in that channel!  The fix for that is to delete the channel under the Channels tab, go back to Configuration | DVB Inputs | Services and map the channel again, and then before you attempt to rename it again, clear the cookies from your browser and reload the page (or use a different browser to do the renaming).  I have no idea what causes this problem, or why clearing cookies or using a different browser works, but it was the only way I could get all the channels renamed the way I wanted.

When you have added your LNB’s, DiSEqC and/or tone switches, etc. and configured everything according to the instructions, TVHeadEnd does an initial scan of the transponders on that satellite. ¬†This does take some time, so don’t be in too big of a hurry to go in and map services. ¬†However, it does not seem to find all the transponders, and I had to add several of them manually (particularly the ones using DVB-S2). ¬†I don’t know whether TVHeadEnd actually has some kind of blind scan logic, or if it is using a transponder list that may be somewhat out of date (I suspect the latter), but it doesn’t find everything up there without some assistance.

One problem we have in North America is that most of the available signals on the satellites do not include embedded guide data, which is sometimes referred to as Event Information Table (EIT) data. In other parts of the world this information is commonly provided within the satellite signals themselves, and therefore software developers based in Europe, Asia, or Australia/New Zealand tend to assume it’s available everywhere, which makes it far more difficult than it should be to utilize certain other backend software.

Getting guide data into TVHeadEnd is a subject for its own article, but I will just say this much. ¬†If you plan to use an xmltv.xml or similar XML format file, as produced by a program such as zap2xml, you will likely need to create that file on a different machine than the MOI+ and then transfer it over to the MOI+ via SFTP or SMB. ¬†If you dig around in the TVHeadEnd documentation and on their forum long enough, you will discover that what you need to do is obtain a file called tv_grab_file and place it into the /usr/bin directory on the system running TVHeadEnd. ¬†And if you do that on the MOI+, it won’t work, because the original tv_grab_file is a bash script, and BusyBox doesn’t run bash, it uses ash instead. ¬†Fortunately, a converted script is available, thanks to the efforts of Harald Becker, a participant on the BusyBox mailing list. ¬†Here is the converted tv_grab_file script that will run on the MOI+:


if [ $# -lt 1 ]
  cat /mnt/disk/.xmltv/tv_grab_file.xmltv
  exit 0

while [ $# -gt 0 ]
 do case "$1" in
   -d | --description )
     printf "tv_grab_file is a simple grabber that just read the ~/.xmltv/tv_grab_file.xmltv file\n"

   -v | --version )
     printf "0.1\n"

   -c | --capabilities )
     printf "baseline\n"

    -* )
      printf "unknown option: %s\n" "$1"
      printf "Usage: %s: [--description] [--version] [--capabilities]\n" ${0##*/}
      exit 2

 esac; shift

exit 0

Note that you may need to modify the path or filename in the line that starts with “cat” – it should point to the xmltv file that you want TVHeadEnd to use. I copy the file to the hard drive to so as not to use space on, or cause unnecessary writes to the device’s internal memory. Save the above script with the filename tv_grab_file and copy it to the /usr/bin directory on the MOI+. Then, open a ssh session and run this to make the script executable:

chmod 755 /usr/bin/tv_grab_file

One other thing to note is that even after TVHeadEnd successfully reads in an XML file for the first time, it may take a while for the channels in that file to become available for mapping, which is done in the same place where you edit channel names. The channels in your XML file should appear in the EPG Source dropdown, but there may be some delay. If they don’t appear, rebooting the MOI+ may help.

In case you are wondering where you tell TVHeadEnd to use the tv_grab_file script, that’s under Configuration | Channel/EPG | EPG Grabber, in the Internal Grabber section. After you have installed tv_grab_file and fixed the permissions, you will probably need to reboot the MOI+ to make this option appear.

TBHeadEnd Internal Grabber Settings

The grab interval can be whatever you like, it is simply how often TVHeadEnd tries to re-import the XML file. Since the guide data on most sites is only updated once a day anyway, and since you apparently can’t control the time of day at which TVHeadEnd runs the tv_grab_file script, running it twice a day will at least refresh the script within 12 hours of the time the XML file was copied over to the MOI+.

The above is not a complete guide on getting schedule data into TVHeadEnd on the MOI+ (as I mentioned above, that may be the subject of an upcoming article) but if you know your way around TVHeadEnd, the above should get you through the major hurdles.

I should mention that TVHeadEnd does have one glaring deficiency – if you don’t have schedule data available for a particular channel, then to the best of my knowledge you cannot set up a recurring recording on that channel. You can tell it to record once at a specific time on a specific channel, but without schedule data there is no way to specify that you want to record that same channel at the same time every day or every week. If all else fails, you could always create your own schedule data for a channel in XMLTV File format, but again, that would be a subject for an upcoming article, if there is any interest in that.

One other quirk worth mentioning is that when attempting to tune live TV from the MOI+ and TVHeadEnd using XBMC Gotham 13.2, on rare occasions it will at first display video but no audio. ¬†This never occurs with recordings, only with live TV, and reselecting the channel always fixes the problem. ¬†Once the sound starts playing, then it is okay from that point on, and the audio does not subsequently disappear (unless the channel itself drops the audio). ¬†I suspect this is a problem with XBMC or perhaps the XBMC PVR add-on for TVHeadEnd, rather than TVHeadEnd itself, because if XBMC is receiving video then it’s receiving the transport stream, which always contains the sound (assuming there is sound available, of course).

In conclusion (finally!)

Let me just put it this way, I had previously built up a backend system using Windows 7 and MediaPortal, and the TBS6985 Quad Tuner card I mentioned above was originally purchased for use in that.  But I always had issues with MediaPortal, such as missed recordings and partial recordings, which I think are in part attributable to the fact that it has issues controlling DiSEqC switches.  It took me the better part of the summer to get that system running halfway well.

Yet when I saw how well the MOI+ worked, I took down that system and installed the TBS6985 in the MOI+ and I am MUCH happier with the way the MOI+ works. ¬†It’s not that there are no challenges at all to getting it working, but after only a week of use it was working better than the previous system did, despite fully two months of banging my head against the wall (figuratively speaking) trying to get the previous backend to work properly.

Now I realize that some readers may think that I am only giving a relatively glowing review because TBS sent me a free unit for evaluation. ¬†All I can say is that I don’t do that; I tell it like it is, and overall I really am happy with this device. ¬†Plus, if you notice all the hints and tips for configuration that I have given above, you will realize that I have spent a considerable amount of time with the MOI+ and TVHeadEnd. ¬†I’ve had no previous exposure to either, other than looking at¬†TVHeadEnd one time for about 20 minutes, so I had to put the time in to learn how to do certain things, and I would not have made that effort if I didn’t like the results I was getting. ¬†If nothing had been working out, it would have been much easier to just stick with my old system and write a four or five paragraph review, and let it go at that. ¬†But the more I used the MOI+, the more impressed I was with it.

As I write this, the MOI+ is available at Amazon (and note that is NOT an affiliate link, so it doesn’t put a dime in my pocket if you buy one). ¬†When comparing prices, keep in mind that it can essentially replace a computer running a backend server. ¬†Also, if you are considering it for any kind of commercial installation, there are brackets that can be attached to make the MOI+ rack mountable.

Thank you for reading this review, and if you do decide to purchase a MOI+, I hope that my configuration hints are helpful to you!


Just in case you somehow missed it the first two times I mentioned it, I did get a free MOI+ in exchange for the promise of writing this review. However, I did not promise to write anything specific or to only say favorable things about the MOI+. Hopefully, I’ve now made that clear enough to keep our friends at the FTC happy!

Possibly related articles:
Do you run one or more TBS PCIe cards under Linux? Check your IRQs… (Free-To-Air America)
Getting bad satellite recordings in TVHeadEnd? Here’s a possible fix (Free-To-Air America)
New TBS6704 ATSC/Clear QAM Quad Tuner PCIe Card may let you add OTA and/or unscrambled cable TV channels to your satellite backend (Free-To-Air America)
Moi Pro AMD with OpenElec TBS builds (BuyDVB Online Store Blog)

Why this blog?

A funny thing happened happened on my way to writing a review of a piece of satellite equipment.

I was going to post it on a different blog. ¬†I’ve contributed the occasional article on this blog for at least a couple of years now.¬† I never had any problem with it. ¬†I had my review about half written and suddenly I couldn’t access the blog site without LONG delays, usually followed by browser timeouts.

It turned out they had updated the blog software, and suddenly the blog became almost instantly inaccessible. ¬†Maybe if I tried it at 4 o’clock in the morning I could get in but anything else was totally hopeless. ¬†It’s not that the server went down, it’s that apparently too many Apache2 processes were being spawned simultaneously, just totally sucking up the system resources.

I’m told that the solution for that would be to add more memory, but that server is already maxed out in the memory department, so the entire server would need to be replaced. ¬†And since that was a private blog that’s not making money for anyone (apart from a few Amazon affiliate ads that occasionally gave the guy who ran it a few bucks, but that were never a steady source of income), that’s not likely to happen anytime soon.

So it appears that blog is effectively dead, and I still needed a place to post my review when¬†it’s finished. ¬†Which it almost is – I just need to collect a couple more pieces of information. ¬†So, I’ve created this blog, and hopefully I’ll be able to provide a few useful tidbits of information from time to time.

Beyond that, it occurred to me that there really aren’t that many unbiased sources of information about Free-To-Air satellite in North America. ¬†I think the reason for that is partly because of the same reason some Usenet users are reluctant to talk about Usenet – too much talk makes things go away. ¬†Wikipedia notes:

Historically, it has appeared that broadcasters are more likely to scramble their signals when they become aware that home viewers and other “unauthorized” viewers are watching their signals. Therefore those who know what signals are available may sometimes be reluctant to share that information in open forums. While sites exist that attempt to list currently viewable FTA signals, most of them are incomplete or do not contain current information. Such sites typically rely on reports of changes by viewers, and if viewers are reluctant to report new FTA signals for fear they might disappear, it becomes more of a challenge for such sites to maintain up-to-date listings.

It is not the purpose of this blog to discuss things that might cause signals to disappear, but at the same time, I do think there needs to be more information made available about the “nuts and bolts” of free-to-air satellite.

There are several different satellite sites and forums out there, but in my opinion they tend to suffer from various issues:

  • Controlled by, or beholden to, satellite dealers. ¬†Not that there’s anything wrong with a satellite dealer running a forum, but it’s not likely he’s going to look favorably upon information that casts equipment he sells in a bad light, nor want unfavorable reviews of equipment he has in stock (particularly if it’s old stock he bought too much of, and that he’s desperately trying to get rid of before it’s completely obsolete). ¬†And I doubt he’ll much care for forum users singing the praises of equipment that directly competes with products he carries. ¬†I am not a satellite equipment dealer, and I¬†don’t have any friends or family in that business.
  • Piracy. ¬†There are several forums that are put up for the purpose of helping people pirate commercial satellite signals. ¬†That’s pretty much a cat-and-mouse game where nobody really wins, and some people manage to incur large fines or even prison time for engaging in it. ¬†I do not engage in signal piracy and will NOT talk about it on this blog.
  • Moderation policies. ¬†Probably because of the above two items, there are sites that have some rather strange rules regarding what you can and cannot talk about, which are sometimes enforced rather unevenly. ¬†Some users always feel as though they have to “walk on eggshells” around various forum moderators, while others just seem to disappear after having said something a moderator didn’t like, never to be heard from again. ¬†If I work hard on an article or review, I really don’t want to have to worry about it containing something that might unintentionally offend a moderator.
  • Too much talk about the specifics of what’s up there. ¬†When people brag in in open forums about how they were able to watch some sporting event that’s normally not available in their area and invited all their friends over to watch, and it was a on a feed from a particular network, that’s not only a good way to get future events scrambled, but the entire network feed. ¬†Remember, there are such things as search engines, and just like everyone else, broadcasters and program providers do search for mentions of their name. ¬†It’s one thing if a service appears in a general list of signals on a particular satellite or transponder, and quite another when people brag about how they were able to watch something not intended for them. ¬†People who¬†don’t want to destroy what’s left of this hobby need to be a bit more careful about what they write. ¬†I will not write about specific signals available unless I know for certain that they are intended for public reception and viewing.
  • And on the flip side, not enough talk about newer technologies. ¬†The old “one satellite receiver with one single tuner feeding one television set” paradigm HAS to die. ¬†In the real world, users want to record programs for later viewing, and watch those recordings on various devices that may not resemble a conventional television set at all. ¬†This equipment to do this is coming onto the market but too many dealers and users¬†don’t understand it, and prefer to stick with what they know, even though it’s almost ancient technology in this world of Internet Time. ¬†I want to write about new technology, not the same old, same old.

This blog is simply my space where I can write what I want to about the hobby of receiving free-to-air satellite TV, with having my words censored or edited by someone with a vested interest or favors to repay, and where I can decline to talk about things I don’t want to talk about. ¬†I think I am a pretty reasonable guy, most of the time anyway, but I don’t go around looking for potential minefields to walk through if I can help it.

I hope that I can provide some useful information to those in the free-to-air hobby. ¬†I’m not a real prolific writer, so¬†don’t expect daily articles, but I hope what I do write will be worth the time it takes you to read it.

We’ll see how it goes!