I decided to give my DVB-T usb dongle (Realtek RTL2838) another go with the Raspberry Pi and TvHeadEnd. As I thought the newer version of Raspbian if available might address the condition I had previously where I had no dvb device after plugging it in. Older post found here.
It would appear it was a good to check this out again.
I downloaded the latest Raspbian available from the Raspberry Pi site. The version available at the time of this post is the one below;
2013-12-20-wheezy-raspbian.zip
I installed to an SD card and booted my Raspberry Pi.
I plugged in my Realtek RTL2838 tuner and it detected fine and when I checked for the dvb device structure, it was populated all correctly, which never happened previously at all.
[26848.628778] usb 1-1.3: new high-speed USB device number 6 using dwc_otg [26848.741110] usb 1-1.3: New USB device found, idVendor=0bda, idProduct=2838 [26848.741147] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [26848.741166] usb 1-1.3: Product: RTL2838UHIDIR [26848.741183] usb 1-1.3: Manufacturer: Realtek [26848.741199] usb 1-1.3: SerialNumber: 00000001 [26848.851456] usb 1-1.3: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state [26848.857238] usbcore: registered new interface driver dvb_usb_rtl28xxu [26848.921368] usb 1-1.3: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer [26848.921447] DVB: registering new adapter (Realtek RTL2832U reference design) [26848.965698] usb 1-1.3: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))... [26849.001551] r820t 0-001a: creating new instance [26849.014447] r820t 0-001a: Rafael Micro r820t successfully identified [26849.021655] Registered IR keymap rc-empty [26849.022183] input: Realtek RTL2832U reference design as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/rc/rc0/input0 [26849.022231] rc0: Realtek RTL2832U reference design as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/rc/rc0 [26849.022262] usb 1-1.3: dvb_usb_v2: schedule remote query interval to 400 msecs [26849.035148] usb 1-1.3: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected
And device files
root@raspberrypi:~# ls -la /dev/dvb total 0 drwxr-xr-x 3 root root 60 Jan 1 14:51 . drwxr-xr-x 13 root root 3080 Jan 1 14:51 .. drwxr-xr-x 2 root root 120 Jan 1 14:51 adapter0 root@raspberrypi:~# ls -la /dev/dvb/adapter0/ total 0 drwxr-xr-x 2 root root 120 Jan 1 14:51 . drwxr-xr-x 3 root root 60 Jan 1 14:51 .. crw-rw---T 1 root video 212, 4 Jan 1 14:51 demux0 crw-rw---T 1 root video 212, 5 Jan 1 14:51 dvr0 crw-rw---T 1 root video 212, 3 Jan 1 14:51 frontend0 crw-rw---T 1 root video 212, 7 Jan 1 14:51 net0
Next I configured other tools before compiling and installing the TvHeadEnd per the steps below;
sudo apt-get install unzip libcurl4-openssl-dev pkg-config git build-essential dvb-apps
cd ~
git clone https://github.com/tvheadend/tvheadend
cd tvheadend
./configure
make
sudo make install
At which point I executed the binary via “tvheadend -C” and I could now access the web interface for the TvHeadEnd software via http://raspberrypi_ip:9981/ where I could now see my dvb tuner was detected.
At this point you now have to configure the network and channels according to your region. Can be a bit tricky, but I followed the info available at the post here (step 14). This helped me make sense of the sequence of actions.
Below is a screen grab showing VideoLan Client from my Windows 7 desktop and a web browser in the background attached to the TvHeadEnd which is running on the Raspberry Pi with the RTL2838 tuner.
EDIT: And to get my TvHeadEnd to auto start with boot I performed the following additional steps.
Created /etc/init.d/tvheadend file with the contents below;
#!/bin/bash ### BEGIN INIT INFO # Provides: tvheadend # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Should-Start: $syslog # Should-Stop: $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 # Short-Description: start/stop tvheadend Server ### END INIT INFO TVHNAME="tvheadend" TVHBIN="/usr/local/bin/tvheadend" TVHUSER="tvheadend" TVHGROUP="tvheadend" PIDFILE=/var/run/$TVHNAME.pid start() { if [ -e $PIDFILE ]; then PID=$(ps ax | grep -v grep | grep -w $(cat $PIDFILE) | awk '{print $1}') if [ -n "$PID" ]; then echo "$TVHNAME already running (pid $PID)." exit 1 fi fi echo -n "Starting tvheadend: " start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user ${TVHUSER} --exec ${TVHBIN} -- -u ${TVHUSER} -g ${TVHGROUP} -f -C echo "Done." } stop() { if [ -e $PIDFILE ]; then PID=$(ps ax | grep -v grep | grep -w $(cat $PIDFILE) | awk '{print $1}') if [ -n "$PID" ]; then echo -n "Stopping $TVHNAME: " start-stop-daemon --stop --quiet --pidfile $PIDFILE --name ${TVHNAME} echo "Done." else echo "$TVHNAME is not running." fi else echo "$TVHNAME is not running." fi } status() { if [ -e $PIDFILE ]; then PID=$(ps ax | grep -v grep | grep -w $(cat $PIDFILE) | awk '{print $1}') if [ -n "$PID" ]; then echo "$TVHNAME is running (pid $PID)." else echo "$TVHNAME is not running." [ -e $PIDFILE ] && exit 1 || exit 3 fi fi } case "$1" in start) start ;; stop) stop ;; restart) stop && sleep 2 && start ;; *) echo "Usage: $0 [start|stop|restart|status]" && exit 1 ;; esac exit 0
Now set the script as executable using below;
sudo chmod 755 /etc/init.d/tvheadend
Create a tvheadend group
sudo groupadd tvheadend
Create a tvheadend user that is part of the video group and tvheadend group.
sudo useradd -g tvheadend -G video -m tvheadend
And now set the initscript tvheadend to startup and shutdown as system does
sudo update-rc.d tvheadend defaults
Leave a Reply