where /dev/sdg is my micro-SD card. I have downloaded latest Raspbian image here. After that I connected Joker TV to Raspberry Pi using USB cable and booted up using the prepared micro-SD card.

Joker TV doesn’t require special Linux kernel drivers, so we could simply build regular user-level applications using this instruction or download a pre-compiled binary here. After building, we are ready to tune Joker TV to terrestrial or satellite TV channels. Joker TV supports a wide range of DTV standards:

we tuned to 575MHz using ATSC standard (‘-d 11’), bandwidth 6MHz (‘-b 6000000’) and 8VSB modulation (‘-m 7’). Joker TV has found signal and locked to it (‘LOCK‘ sign). Transport stream (TS) about 18Mbit/sec is coming from Joker TV and saved to out.ts file.

Tuning to Satellite digital television channels

Now we ready to try something harder. We will use Joker TV and Raspberry Pi to receive streams from satellite located on GEO orbit about 36000 kilometres above the Earth. My satellite dish antenna pointed to the Galaxy-18 satellite owned by Intelsat and located in geosynchronous orbit at 123° W longitude, serving the continental United States, Alaska, Hawaii, Mexico, and Canada.

Here is an output of tuning to Ku band DVB-S (‘-d 5’) transponder 12033MHz, symbol rate 8200KSym and Horizontal (‘-y 18’) polarization. I’m using Universal LNB with two local oscillators with frequency 9750Mhz and 10600MHz (‘-z 9750,10600,11600’).

Joker TV has found signal and locked to it (‘LOCK‘ sign). Transport stream (TS) about 10Mbit/sec is coming from Joker TV and saved to out.ts file. This is Daystar TV channel in FullHD quality.

Stress test and performance

One of the most interesting feature of Joker TV that I have implemented is the Transport Stream generator. It’s implemented inside FPGA and you can find Verilog source code here. Basically it sends data using USB Isochronous transactions as fast as it can. So, we can stress test all USB path from FPGA, through USB PHY, USB cable and host USB stack. Here is and output of our stress test:

as you can see we receive 62.5Mbit/sec transport stream from Joker TV. This speed is maximum theoretical speed for USB Isochronous transactions if we send one 1024 byte packet every microframe (125 usec). USB standard allows to send up to 3 packets per microframe but in Joker TV I have implemented only one (it’s enough for regular use).

Received data saved to out.ts file and we can check that all bytes correctly received. I have prepared ‘tscheck’ utility to do this:

What about CPU usage when receiving this 62.5Mbit/sec transport stream ? It’s not too big, here is a screenshot:

As you can see CPU cores mostly in idle (97% idle).

Conclusion

I hope this article was useful. I have briefly described Joker TV usage scenarios. Feel free to send me questions or suggestions. I am also planning to write other articles with deeper description of Joker TV and Digital Television.

I’d like to replace my ageing satellite receiver DVR with my Nvidia Shield. Probably using Kodi. Would Joker TV allow me to achieve this please? i.e Could I connect directly via USB. Or would I still need something like a Raspberry Pi/PVR backend ?