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 rundmesg
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 groupsudo 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.
Hi Mark, I have some trouble with EPG. For EPG grabber I'm using internal grabber. After first restart file is visible in listbox (internal grabbr - module). When I select this file and clik to Save every thing is OK but file is hiden and it is not visible for the future.
ReplyDeleteIs it a some issue with permision or something else?
Thanks. Robert
Hi Mark, can you use both tuners at once say for streaming to two machines or recording one channel while watching another? I've got an elgato diversity and am pretty interested in trying this out!
ReplyDeleteThanks in advance - Scotty.
I appreciate with the your post. it's good contain hear on TV Headend on the Raspberry PI.
ReplyDeleteHi! Thanks for your work. I have a problem. When I try to compile tvheadend with "sudo make install", I get the following error:
ReplyDeletexbian@xbian ~/tvheadend $ sudo make install
install -D ./build.linux/tvheadend /usr/local/bin/tvheadend
install -D man/tvheadend.1 /usr/local/share/man/tvheadend.1
for bundle in docs/html docs/docresources src/webui/static data/conf data/dvb-scan; do \
mkdir -p /usr/local/share/tvheadend/$bundle ;\
cp -r $bundle/* /usr/local/share/tvheadend/$bundle ;\
done
cp: cannot stat `data/dvb-scan/*': No such file or directory
make: *** [install] Error 1
Do you have any idea how to fix this?
Thanks very much!
I just reply myself. I had downloaded the bleeding edge version of tvheadend and it didnt work. Now I downloaded the last stable version (3.4 with patches) and the compilation works like a charm!
DeleteThanks for the clear instruccions!!!
Best regards!
Actually you can use the bleeding edge but you have to do
ReplyDeletemkdir data/dvb-scan/dvt-t
w_scan -cCZ -x > data/dvb-scan/dvb-t/cz-all
before make install
Hi Pxl,
ReplyDeleteThanks to your note I could finally install the bleeding edge version on my pi and it works great. But you have a little typo and also your scan is for Czech country settings.
after cloning with git create the folder, if you use DVB-T:
mkdir data/dvb-scan/dvb-t
then scan and set the option for your country, in my case germany(DE)
w_scan -cDE -x >data/dvb-scan/dvb-t/de-all
adapt accordingly to your setup,
finally afer make install i have entered the path in General Settings / DVB Scan files path:
/usr/local/share/tvheadend/data/dvb-scan/
hope this helps and enjoy the bleeding edge version, definitly worth the effort :-)
Build tvheadend from source. I think the tvheadend link has moved, now its 2015. I might be wrong.Bleeding edge version would not show locations.
ReplyDeleteI find this works :git clone -b release/3.2 https://github.com/tvheadend/tvheadend.git
I find this dont :git clone -b release/3.2 https://github.com/andoma/tvheadend.git
Hey Mark et al, has anyone tried this on the PI2 ? I have the Elgato Diversity version of the Nova-TD USB stick, is Identified as Vendor 2040 ID 9583 and firmware loads into a warm state and then kernel crashes with Internal Errors and Oops code 805 or 817. Using Raspbian (name -a says Raspbian kernel 3.18.11-v7+ #781). Also get same "unable to handle kernel NULL pointer dereference at virtual address 00000040" error on OSMC 4.1.3.2. The USB tuner works fine on the Mac using EyeTV application. Makes no difference using powered hub or direct connection to Pi. The side effect is that TVHeadEnd doesn't see any DVB input tuner at all since the tuner hasn't registered with the kernel.
ReplyDeletedvb-usb: found a 'Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity' in warm state.
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity)
Unable to handle kernel NULL pointer dereference at virtual address 00000040
Have I done something wrong or is there a difference with the PI2 kernel for compatibility with this Nova-TD device which is broken?
Your advice, thanks.
I Cant help you im using a cheap DVB FM DAB Tv Dongle from amazon and it works just fine dont even have to load divers it just shows up as a realtek 2832u reference design and works in tvbackend perfectly no need for powered hub and im powering wifi dongle and tv dongle plus a hdd of the rpis usb ports
DeleteIf you are worried about the whereabouts of a person, concerned for their safety or wish to locate a person who is not easy to find, You should take services of a reliable private investigation company in Dallas. To know more about how Investigative Resources of Texas can help you,Call us at (214) 662 1006.
ReplyDelete