Tvheadend
Tvheadend is a linux service which converts a dvb-t feed into a network stream. This enables you to stream live tv feed from your raspberry pi to any device on your LAN. The aim of this tutorial to set up a Tvheadend streaming server on the Raspberry PI, then watch it via an XBMC client on the Nexus 7.
Pre-requisites - Hardware
1) Raspberry PI (I've got the newer 512MB version)
2) Powered USB hub (New Link 4 Port USB Hub with Mains Adaptor from
modmypi )
3) USB DVB-T Tuner (Hauppauge WinTV Nova-TD)
4) USB WIFI adapter (Edimax EW-7811UN Wireless)
5) Memory card (Lexar class 10 32GB micro SD inside an SD card adapter)
6) Keuboard and mouse (I've got a wireless "MINI ULTRA SLIM DESIGN LAPTOP USB KEYBOARD MOUSE COMBO" from
here)
Pre-requisistes OS
The operating system of choice is Raspbian (Wheezy), available from
here. Expand the root partition to fill up the SD card, otherwise you''ll run out of space.
--------------
so lets begin....
sudo apt-get update
sudo apt-get install libcurl4-openssl-dev git
Set up the NOVA-TD DVB-T TV tuner
Plug in the tv-tuner then run
dmesg
You will see something along the lines of:
[ 1138.657011] usb 1-1.3.2: new high-speed USB device number 7 using dwc_otg
[ 1138.758550] usb 1-1.3.2: New USB device found, idVendor=2040, idProduct=9580
[ 1138.758581] usb 1-1.3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1138.758599] usb 1-1.3.2: Product: NovaT 500Stick
[ 1138.758611] usb 1-1.3.2: Manufacturer: Hauppauge
[ 1138.758624] usb 1-1.3.2: SerialNumber: 4027809413
[ 1138.865068] IR NEC protocol handler initialized
[ 1138.896509] IR RC5(x) protocol handler initialized
[ 1138.929688] IR RC6 protocol handler initialized
[ 1138.957795] IR JVC protocol handler initialized
[ 1138.968073] dib0700: loaded with support for 21 different device-types
[ 1138.968456] dvb-usb: found a 'Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity' in cold state, will try to load a firmware
[ 1138.991871] IR Sony protocol handler initialized
[ 1139.025138] IR MCE Keyboard/mouse protocol handler initialized
[ 1139.026512] dvb-usb: did not find the firmware file. (dvb-usb-dib0700-1.20.fw) Please see linux/Documentation/dvb/ for more details on firmware-problems. (-2)
[ 1139.026723] usbcore: registered new interface driver dvb_usb_dib0700
[ 1139.057895] lirc_dev: IR Remote Control driver registered, major 251
[ 1139.062582] IR LIRC bridge handler initialized
The problem here is that the dvb-usb module failed to find the nova-td firmware file (
dvb-usb-dib0700-1.20.fw) A quick google reveals that the best place to find tv tuner firmware for linux is
here
cd ~
wget http://linuxtv.org/downloads/firmware/dvb-usb-dib0700-1.20.fw
sudo cp dvb-usb-dib0700-1.20.fw /lib/firmware
or more elegantly ...
sudo apt-get install firmware-linux-nonfree
Pull out the tv-tuner, and push back in.
demesg
[ 1660.721801] usb 1-1.3.2: USB disconnect, device number 7
[ 1663.006468] usb 1-1.3.2: new high-speed USB device number 8 using dwc_otg
[ 1663.107981] usb 1-1.3.2: New USB device found, idVendor=2040, idProduct=9580
[ 1663.108013] usb 1-1.3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1663.108029] usb 1-1.3.2: Product: NovaT 500Stick
[ 1663.108042] usb 1-1.3.2: Manufacturer: Hauppauge
[ 1663.108054] usb 1-1.3.2: SerialNumber: 4027809413
[ 1663.118347] dvb-usb: found a 'Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity' in cold state, will try to load a firmware
[ 1663.173435] dvb-usb: downloading firmware from file 'dvb-usb-dib0700-1.20.fw'
[ 1663.378063] dib0700: firmware started successfully.
[ 1663.886683] dvb-usb: found a 'Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity' in warm state.
[ 1663.889868] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[ 1663.890139] DVB: registering new adapter (Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity)
[ 1664.159908] DVB: registering adapter 0 frontend 0 (DiBcom 7000PC)...
[ 1664.201931] MT2266: successfully identified
[ 1664.373180] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[ 1664.373438] DVB: registering new adapter (Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity)
[ 1664.552728] DVB: registering adapter 1 frontend 0 (DiBcom 7000PC)...
[ 1664.557289] MT2266: successfully identified
[ 1664.766474] Registered IR keymap rc-dib0700-rc5
[ 1664.767378] input: IR-receiver inside an USB DVB receiver as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.2/rc/rc0/input3
[ 1664.767916] rc0: IR-receiver inside an USB DVB receiver as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.2/rc/rc0
[ 1664.769460] dvb-usb: schedule remote query interval to 50 msecs.
[ 1664.769497] dvb-usb: Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity successfully initialized and connected.
That was easy enough! This could easily have been a nightmare, but by the looks of it Raspbian has the correct kernel modules loaded. Now that the tv tuner has been detected and initialised we can proceed with building tvheadend.
Building tvheadend from source
cd ~
git clone -b release/3.2 https://github.com/andoma/tvheadend.git
cd tvheadend
./configure
make
sudo make install
This will install the tvheadend binary:
/usr/local/bin/tvheadend
This targets release 3.2, but by leaving off -b release/3.2 you can target the bleeding edge!
Make it auto start at boot
Create tvheadend user home and group
sudo groupadd tvheadend
sudo useradd -g tvheadend -G video -m tvheadend
Create file named /etc/init.d/tvheadend
#!/bin/bash
TVHNAME="tvheadend"
TVHBIN="/usr/local/bin/tvheadend"
TVHUSER="tvheadend"
TVHGROUP="tvheadend"
case "$1" in
start)
echo "Starting tvheadend"
start-stop-daemon --start --user ${TVHUSER} --exec ${TVHBIN} -- \
-u ${TVHUSER} -g ${TVHGROUP} -f -C
;;
stop)
echo "Stopping tvheadend"
start-stop-daemon --stop --quiet --name ${TVHNAME} --signal 2
;;
restart)
echo "Restarting tvheadend"
start-stop-daemon --stop --quiet --name ${TVHNAME} --signal 2
start-stop-daemon --start --user ${TVHUSER} --exec ${TVHBIN} -- \
-u ${TVHUSER} -g ${TVHGROUP} -f -C
;;
*)
echo "Usage: tvheadend {start|stop|restart}"
exit 1
esac
exit 0
Set the permissions to make it runnable:
sudo chmod 755 /etc/init.d/tvheadend
Enable start during boot process
sudo update-rc.d tvheadend defaults
Finally start it manually so we can configure it:
sudo /etc/init.d/tvheadend start
Configuration
Navigate to http://<rasppi_ip>:9981
Configuration -> General : Set the language (and hit 'Save Changes')
Configuration->TV Adapters: Select the Adapter
Hit Add DVB Network by location and select Generic->auto_Default
Now wait while the Muxes have been scanned for services. This will take a long time. The right hand panel will update as channels (services) are discovered.
Hit Map DVB services to channels (once it becomes enable) and wait. In the meantime hit the services tab, to see what's been found. If everything is working as it should, there should be a list of TV and radio channels.
Select Configuration->Channels to view mapped channels
XBMC On the Nexus 7
All that's left to do is to install XBMC on the nexus 7. The easiest way to do this, is by installing the 'nightlies' from the
XDA forums (for the nexus 7 it's the non-neon build you need).
To connect to TVHeadend, add the "Tvheadend HTSP Client" Addon:
System -> Settings -> Add-ons -> Search
Type: Tvheadend
Enable and Configureas follows:
Tvheadend hostname or IP address : <RaspPI+IP>
HTTP port: 9981
HTSP port: 9982
System -> Settings -> Live TV -> General : set to Enabled
That's it... Go to Live-TV -> TV Channels
The XBMC tvheadend client is not the finished article. The EPG looks a bit screwed up, as do some of the channel names. Also not all the channels appear to be present. Apart from the above niggles, the XBMC client looks amazing and seems to fit the bill.
TVHGuide
Available from
here. It's not in the google play store, so you need to download it and install it by hand. In comparison to XBMC, this seems to be the more finished product although the interface could do with some polish - its fairly basic! The EPG works, although is a bit industrial. The configuration is intuitive, and as a bonus it can use an external player like the amazing MXPlayer
Until the bugs in XBMC can be resolved, I'll be sticking with TVHGuide.