The motivation
I had a need to bridge IPTV using a wireless connection. Immediately I faced several problems which I finally managed to overcome and since not much information is available on internet I’ve decided to write my recipe down.
Note that there is a simple albeit expensive solution: use Ruckus wireless bridge (it is supposed to work pretty much out of the box). Since spending something like 200€ is a bit too much for this stunt I’ve decided to go with two Linksys WRT54GL routers instead. They are much cheaper and there is a challenge, who doesn’t like a challenge? And sending a bunch of network packets back and forth shouldn’t be that hard, should it? Ehm.
Current state
My ISP/IPTV provider is SIOL whose major stockholder is government. I have their modem/router that broadcasts IPTV UDP multicast stream on one of its LAN ports. And then I have a set top box (a lousy Sagem IAD81, doesn’t have any wireless capability whatsoever) connected with network cable to the router on the one end and to the (not yet LCD) TV set on the other end. This combinations works albeit picture quality isn’t good, but that’s due to the too-slow stream from the IPTV provider issue (it is a 4Mbps MPEG2 stream, not enough when there is a lot of dynamics on the screen).
The goal
Instead of the LAN cable change to wireless using two Linksys WRT54GL routers, like this
The hardware
As stated, two Linksys WRT54GL v1.1 (evergreen) routers.
The firmware
Finally I settled with DD-WRT BrainSlayer version 13525. I’ve tried many other versions and Tomato 1.27 as well, but more about it later.
The trial and error process
Knowing correct IPs
First thing one needs to know is what IP can and should be assigned to both routers – each one requires its own IP. Since IPs are assigned from provider based on MAC address of the STB (provider doesn’t care about anything else besides STB) it is not exactly known what additional IPs can/should one assign. So far every (unofficial) post about watching TV on computer suggested to use STB’s IP increased by 1. i.e. if your STB has an IP of 10.150.80.4 you’ll want to use 10.150.80.5. This isn’t documented officially anywhere and worse, I needed two additional IPs, not one. Hence I decided to ask about it on provider’s support forum. I’ve got no official answer, just the usual +1 answer from a peer.
Then I tried mail support only to get a person who doesn’t know what is an IP and how to get them. First he sent me link to unofficial posts about +1 (how to watch IPTV on computer by assigning IP manually) and to expensive Ruckus alternative being sold by them. I wasn’t happy about it and insisted on what IPs exactly can I use if I need two additional IPs, not only one. Since provider assigns them they should know, shouldn’t they? At the end his final answer was: it won’t work if you assign IPs manually. Never. (he clearly contradicted himself showing total lack of any clue). After that provider’s mail support didn’t respond to me anymore. So, thanks SIOL, my dear provider, for being dumb. Somehow they didn’t surprise me with that attitude.
In the lack of any official response I’ve decided to assign IP+1 to host side WRT54GL (one being close to provider’s router, left on my picture) and IP+2 to client side WRT54GL.
Oh, and how do I know the STB’s IP? If you have Sagem IAD81 STB you can press Menu, Blue, Yellow buttons. Or is it Menu, Yellow, Blue, who knows – try it and a diagnostics screen appears sooner or later including the assigned IP.
Installing and configuring correct firmware
Warning
Before flashing your router do read how-to. Such as this from DD-WRT website. If you don’t do it correctly you might “brick” your router for good.
DD-WRT recommended build 13064
WRT54GL out of the box comes with Linksys firmware which isn’t exactly rocket science and doesn’t support what I was looking for. This doesn’t matter since GL model is meant to be flashed and its firmware developed from community. Hence I first tried DD-WRT currently recommend build 13064. (go to DD-WRT router database and type in your router model to find the recommended build). I flashed both routers and configured them to Client Bridge mode. Only to find that it does work for electronic program guide (html pages) but not for multicast, resulting in no picture or sound. When asking in (very friendly and useful) DD-WRT forum for Broadcom devices (WRT54GL uses Broadcom hardware) I was redirected to use WDS mode instead (here is the comparison between various bridge modes) . Apparently WDS is much better in terms of compatibility but you need administrative access to both routers, which was not a problem for me.
I configured both routers in WDS mode without any security, DHCP or WLAN and tried. This time I’ve got picture and sound but they were somewhat distorted. Soon I found out that the stream that client side router provided was just ~700Kbps instead of 4Mbps. The stream quality on the host side router was fine. Eeeek. After trying a ton of different settings (I didn’t even know what to look for) I gave up. Stream was slow no matter what I did.
Now, looking back I am not sure whether I did manually assign the transfer fixed rate. There are posts on the internet that one has to limit the WDS transmission rate to a some value (I saw different reports saying 6, 9, 12, 18, … Mbps).
Tomato 1.27
Next firmware I’ve tried was Tomato 1.27. The same “small, lean and simple” firmware I am using for my internet router. Again I’ve set both routers in WDS mode (after re-flashing). From the start it didn’t work but then I’ve manually assigned transmission rate to something like 18Mbps and the picture and sound appeared in all their glory (read: as good as it gets – which is not good – due to my provider’s settings). But there was a serious problem which I’ve discovered after 1 minute. Provider’s router stopped providing IPTV stream for some obscure reason. Its IPTV section was froozen, other parts were still working. Only a hard reset on provider’s router fixed that, but only for another minute. Again, no setting I’ve changed helped. And resetting the main router every minute didn’t look as a viable solution to me. Call me strange, if you wish.
I asked both my provider (they are the admins of their router placed in my house, the one with the problems) about it and the guy behind Tomato. The first one couldn’t help (no big surprise) while the other didn’t respond.
So I was stuck with two solutions that didn’t work for one or the another reason. And I was so close.
DD-WRT experimental BrainSlayer build 12874
With no “official” DD-WRT or Tomato firmwares available I’ve went with experimental builds. I’ve tried “DD-WRT BrainSlayer build 12874” build with same results. I like the name though. You’ll find it here. Before using DD-WRT experimental builds make sure you read this page.
The solution that works: DD-WRT BrainSlayer build 13525
Finally this is the build that worked for me. Find it here. I’ve flashed both routers with this build. Reset both to WDS and nothing else (per wireless settings I’ve used Network Mode=G only, Channel=2 and SSID=tv on both) In addition I’ve set wireless transmission fixed rate to 36Mbps on both and enabled Frame Burst check box (below Transmission Fixed Rate settings on Wireless/Advanced Settings). And a miracle happened – the stream begin to flow to the STB in full speed.
Beware that while this solution works for me it might not work for you or you might even brick your router(s). Consider yourself warned. I merely described my solution.
The drawbacks of twin routers/WDS solution
The only drawback is that stream sometimes, like a hickup, looses some quality and artifacts in form of squares appear for a brief moment. I am not sure whether this is a feature of wireless connection or of non exactly stream oriented router firmware. This is the only drawback I’ve found so far.
Credits
- The guys in the DD-WRT forums for responding to my noob questions.
- Luka Manojlovič, a fellow MVP for providing support
Anti credits
- To my IPTV provider SIOL for being really clueless and not helpful at all.