Raspberry 2 + Dvbsky

Kategória: 'PC, DVB Kártyák / PC, DVB Cards', témanyitó: Trex, téma nyitása: November 24, 2015.

  1. Trex Tag

    Amint ígértem egy előbbi bejegyzésen, készítettem egy leiíast arról, hogy miképp lehet egy olcsó, viszont performans receivert faragni 100 euro alatt.
    Angolul folytatom, külföldi tagok örömére:
    1) Raspberry 2 Single board computer
    2) USB DVB-S2 tuner, supported by the linux kernel. Now this is the tricky part, you have to chose it wisely, as not all tuners are supported, some have problems, while others can be made functional only after some workarounds.
    Nevertheless, there are a few tuners that have good community and the supplier explicitly supports linux. I can recommend one of the 2 above, as they are relatively easy to purchase:
    -> Dvbsky tuners:
    ->Sundtek tuners:
    The Dvbsky costs around 59 Euro, while the sundtek 89.
    As the first one is cheaper, this will be a good candidate.
    3) Some skills and patience to install and configure the required software.

    The steps required to setup a working media center with live tv capabilities are briefly the ones below:
    1) - Install linux image with Kodi media center
    2) - Install necessary firmware files (if needed) to make it recognize the dvb tuner - already working out of the box for most of the times
    3) - Install and configure tvheadend server - responsible for the reception of tv channels
    4) - Install and configure tvheadend client addon for Kodi
    5) [Optional] Install oscam to watch encrypted channels - if you have a valid subscription card :)

    I will go though each of the steps detailing the steps required to make it work.

    1) - Install linux image with Kodi media center
    The RPi2 will run a linux distro with Kodi (former xbmc) media server.
    Now, there are 2 distributions actively developed, one is Openelec and the second one is OSMC.
    Both offer great support with good community, but there is a difference between the 2 of them:
    - Openelec is just a slip-streamed linux distro with the kodi addon, so there is no software repository, therefore, you will NOT be able to build your custom version of these softwares, you can use only the precompiled versions provided by the Openelec Unofficial addon. For most of the cases, this is ok, as you can get the precompiled addon directly from the GUI, similar to how you download addons for enigma2 based boxes. But these are not always the most up-to-date versions, so in case you need to build from a GIT repo, you won't be able to do so with Openelec.
    - OSMC: This distribution, formerly named Rasbmc is a full debian distro, this means there is an APT repository that contains mostly the Raspbian packages, but it has also some own repos, from where you can update OSMC specific packages. This has the advantage that in case you need to install some additional packages, or you need to installl a build chain to be able to build tvheadend, oscam or anything else, you will be able to do so.
    This does not mean that it's more difficult to use than Openelec. You have a GUI from where you can install pre-built packages for tvheadend, transmission, etc, so in case you are a beginner, there's no big difference between the 2 distros. But once you start to understand how things work, and you have to install additional packages, the full debian distro will come in handy.

    The installation is quite straightforward for both distros.
    - For Openelec, you download the RPI2 disk image (NOT the update file), and write it to an SDCARD with any image writer program.
    The image you can download it from here:
    Install instructions are provided here:
    - For OSMC, the installation is similar, but you don't have to use imagewriter, nor you have to download manually the image, as they have a nice GUI interface that downloads the necessary image.

    In both cases, once you finish writing the SD card, you remove the card from the computer, place it inside the RPi2, and start it (make sure you are connected to the internet via ethernet cable).

    Configuring the Kodi media center is not the goal of this tutorial, you can find several video tutorials on the internet:


    2) - Install necessary firmware files (if needed) to make it recognize the dvb tuner - already working out of the box for most of the times
    Before we proceed, we need to understand how is the TV support implemented in Linux.
    I won't go into deep details regarding this, as most of the times you won't need it, but understanding the principles of something will always help you in case you encounter problems.
    In Linux, if a device is supported by the linux kernel, it will work out of the box, once you plug it in. If it doesn't, then it means that the support for the device is not compiled in the kernel, but might be available separately, as a module. This is how it works nowadays, as building support in the kernel for every device would make the kernel image too big. So it's preferred to keep them separately in modules and load them only if necessary. This can be done automatically by running the necessary script once the device is plugged in, or manually. In this latter case, you need to load the necessary kernel module (this is similar to a 'driver' in windows) to make it work. You need to follow the description, but usually adding it to /etc/modules.conf will do the trick.
    If there is no kernel module, then most probably you are out of luck, as your device won't be supported.
    If you have chosen the Dvbsky tuner, then the tuner will be recognized out-of-the box.
    In order to check it if the device is recognized, open up a ssh console session (openelec has user: openelec, pass: openelec by default, osmc has user: osmc, pass: osmc) , and issue a lsusb command:

    In case you don't have the lusb command, you can install itt from repository on osmc via the command:
    Kód beillesztése:
    sudo apt-get install usbutils
    If you see the device there (for sundtek it looks different, but shall contain the tuner's name) it means the the device is powered and it was recognized, but this doesn't mean it works. To see if there was a kernel module loaded, check in the kernel log something relevant by issuing the following
    Kód beillesztése:
    You should get something similar:

    In case you see it, the tuner will work.
    If you see some error that a firmware file is not found, you need to copy the firmware file(s) for your tuner and copy/extract it to /lib/firmware/ folder.

    To understand why is this necessary, I will explain it briefly:
    Usually every modern equipment has a processor that needs to run certain firmware in order to work. This is stored usually inside the Flash memory of the processor, in some cases externally in the attached NAND memory. But in case of tv tuners, most manufacturers chose not to store it at all in the equipment, but instead the opearating system will load it every time the product is inserted/started up. This not only spares the NAND memory, but makes it easier and more safe to maintain and update the firmware required to run the hardware.
    In our case, once the linux recognizes the device and loads it's associated 'driver', it will try to load the respective firmware from the /lib/firmware folder.

    Some distros already place these firmware files in that folder, in this case the 'driver' will find it and load it inside the tuner's RAM memory. Some distros don't include it, as it's usually better to use the most up-to-date firmware files that are provided by the tuner's manufacturer.
    In case of the dvbsky tuner, you can download the most recent firmware files from here:

    3) - Install and configure tvheadend server - responsible for the reception of tv channels
    If you get to this point, you must have a working tv tuner. In case the dmesg reports error, then you need to revise the support for your tuner.
    Let's assume from now on that your tuner is working.
    The Client - Server architecture of tvheadend is very clever, as it separates the reception part from the viewer part. This means, that you can have the tv server on one device, and watch the channels on a completely different device. The only condition is to have a good network speed between the 2 devices.By good, I mean 4-5 Mbps for SD channels and 20-30 Mbps for HD channels.

    Will continue soon the tutorial :)
    kosar kedveli.
  2. Trex Tag

    Ok, so in the previous post we got to the point where the tv tuner was working.

    At this point we will install and configure the tvheadend server.

    Here you have 2 options: install the pre-built binary, available in osmc's or openelec's repository, or build your own.

    The first one has the advantage that requires less effort and it's easier to install. But you won't get the latest version.

    As the tvheadend has a strong community, new versions are added very often. My recommendation would be to start with the version bundled with osmc or openelec and only build it from the sources in case you encounter issues that prevent it from working properly.

    Installing the tvheadend server on OSMC:

    From the App store (Programs -> My osmc) you can download and install it.

    Installing the tvheadend server on Openelec:

    In the end, after a successful installation of tvheadend, you shall be able to access the web interface of tvheadend on the following address:

    Kód beillesztése:
    the default username and password for OSMC is for both osmc, for Openelec is openelec, but I am not sure about it.
    Now, once you are connected to the web interface, you can configure everything from here. And only from here. Usually, the clients are very simple, thin clients and they offer only channel viewing (or grouping) and EPG.
    Briefly, the following steps must be done:
    1) Configure the available adapters
    2) Define the Networks
    3) Add Muxes (if not already available) and scan them to get the Services
    4) Map the services to channels - more on this.

    1) Configure the available adapters
    Go to the Configuration -> DVB Inputs -> TV Adapters tab. Here, the TV adapter must be visible, something saying
    Kód beillesztése:
    Montage Technology M88DS3103 : DVB-S #0
    If you can't see your adapter in this list, then the tv tuner is not correctly recognized. If you've bought the DVBSky tuner, then most probably you are using a very old version of Openelec and OSMC and you should update it.
    Please refer to the beginning of this tutorial in how to check if your tuner is recognized.

    If your tuner is there, then you should select the configuration of your satellite system: if you have Diseq switches, Rotors, etc.
    In my case, I have one LNB and a Diseq 1.2 Positioner, that can rotate the dish to the specified location.
    In case you have H-H motors, the config is slightly different.
    So in case you don't have single satellite, then from the Parameters list you should select the Advanced (non-universal LNBs, rotors, etc.) option. In case you have a diseq switch, select the appropriate one.
    You should leave the 'idle scan' unticked, as with the kernels <4.3 can cause trouble with the driver. And also it's not that good to wake up in the night with your dish moving, as tvheadend scans periodically the available muxes. If you want to update the channel list, you can trigger this manually. The initial scan is a good idea, as will start the scanning right after setup.
    Next, you should set up how many orbital positions (i.e. Satellites) do you want to include. In my case, I watch only channels on 0.8W, 19.2E and 28.2E satellites. This means 3 satellites, so 3 orbital positions. Once you chose the orbital positions, new elements will be added to the list on the left. Feel free to rename them to suit your naming profile.

    At this point, it is required to map an orbital position (satellite) to a network.
    A little background about why is this necessary:
    Tvheadend is a versatile server, and can server various network combinations of DVB-S, DVB-C, DVB-T and IPTV.
    In case of DVB-C and DVB-T, usually you have one network, as you have one provider only - i.e. your cable provider or your terrestrial provider.
    But in case of DVB-S, each satellite is seen as a network, therefore for each orbital position you will have to define a separate network.
    In my case, for the 3 satellites, 0.8W, 19.2E and 28.2E I will have 3 networks. Later these will be mapped to each of the orbital positions.
    If I would connect a DVB-C tuner in addition, the I would create a 4rth network, let's say Cable, and map it to the DVB-C adapter.
    So in order to add a new network, go to the Configuration -> DVB Inputs -> Network tab, add a new network (select DVB-S, as we have a satellite tuner attached) and then complete as in the picture below:
    Ok, in this case, I've added a new network for the 0.8W orbital position (satellite)
    Here, you need to take care of several things. First, you should add a suggestive name for the network, then select the orbital position. This is necessary to know what muxes shall it display for that network. These are stored in xml files, usually shall be up-to-date and contain the necessary data. If not, you have to add them manually.
    Once you select the orbital position, you can also select what muxes shall be used (i.e. the transponders, as called in the satellite world. This is basically a frequency list - with some additional parameters). Once you are set-up, make sure you untick the idle scan muxes for the reasons mentioned above.

    Repeat this procedure to add a network for each orbital position.

    Once this is ready, go back to the tv adapters tab, and there for each orbital position you have added (in my case 3) associate the network created previosly with this satellite.
    From the LNB tab, select the Universal type, as it's the most common.
    If you have a switch, select it here, and from the rotor, select USALS (if you have a H-H motor) or select GOTOX, in case you have a diseq 1.2 positioner. My setup has a positioner, so I've selected the second option. The menu on the left will change to reflect this:

    Once you're ready setting up all of your orbital positions, click on each of the rotors, in my gase it's GOTOX and input the position number on which you've stored the satellite.
    This is usually visible on the LED display of the positioner (example P17):
    In the picture below, Astra 19.2E was stored on rotor position 17.

    Once you are ready, you can go ahead and scan your muxes (transponders). If you've ticked inital scan, as soon as you add a network, it will start scanning. Usually, muxes contain also information regarding other muxes, and the muxes list will be updated during the scan. If you have configured everything ok, on the muxes tab, once the SCAN STATUS tab reches IDLE (pending means waiting for scan, Active means currently scanning and idle means it was scanned already) you should have the Services tab already populated.
    In case the SCAN result tab shows error for each of the muxes, and none are OK, it means you could not lock on those frequencies. THe cause will be most of the times that you are not correctly positioned on the satellite. Check again on the TV adapters tab that you have configured correctly the rotors, and that the positioner displays the correct number for the satellite.
    Once you have scanned all the networks, check that the services contain all the channels you are interested in.
    You can map all services to channels at once, or you can select one-by-one only those that present interest to you. Pressing the map all button, will bring up a window like this one.
    kosar kedveli.
  3. Trex Tag

    As you've just scanned the muxes, you are not required to tick the first checkbox, as then tvheadend will tune to each channel to verify that it's ok, prior to mapping. This is time consuming and unnecessary.

    Now, there is a tickbox, regarding merge same name.

    This needs an explanation.

    The services are different than channel names. You can have a channel, let's say HBO on different satellites from different providers. You can also have HBO on a DVB-C network, and also on 2 different satellites. If you merge them, it will threat it as the same channel, and in case you want to stream, it will choose automatically the network that's available. This is useful in case you have multiple adapters and multiple users.

    As I want to see the channels in the classical way (i.e. - to know that a certain channel is on a specific satellite/belongs to a specific provider) I don't tick this.

    Sorting the channels is easy, will be explained later.

    Now, If you scan a lot of satellites, you will see that you will end up with a big list of channels.

    To display all of them in Kodi will make it unusable, as that means thousands of channels.

    We need some grouping, like on enigma2 boxes, based on satellites, providers, etc.

    Here comes the help of the Channel tags, accessible from Configuration -> Channel/EPG -> Channel tags.

    Basically , once you scan the muxes, tvheadend creates the channels and will tag them based on some properties, like network name, providers and a lot more.

    From this menu, you can select which of the tags are you interested in. For example, I've selected the name of the 3 networks I've created previously. This will allow me to group them from kodi client based on the orbital positions (satellites). If you prefer grouping based on providers, select the providers you're interested in and the channels that have this tag will appear, an only those, once you select this group from the Kodi client.

    You can also group them based on bouquets, but it's different a bit from what's in enigma2, but if needed, also these could be configured.

    So, at this point, you should be able to stream FTA (Free-To-Air) channels right from the web interface, once you click on the play link from the Services or Channels tab.

    Note: It needs VLC for playback, install it prior to starting the stream.

    In the next days I will continue this tutorial to describe how to connect tvheadend with oscam using the DVBAPI interface. This way you will be able to watch encrypted channels, if you have a running oscam server somewhere.
    kosar kedveli.
  4. Trex Tag

    4) - Install and configure tvheadend client addon for Kodi
    There are several clients for tvheadend server. You can with it from Kodi via tvheadend PVR client, of course, but you can also watch it from a mobile phone (Android: https://play.google.com/store/apps/details?id=org.tvheadend.tvhclient) , web browser, etc.
    As we are setting up a configuration to act like a receiver, the tvheadend client will run on the same machine (the raspberry pi2) with the server.
    In order to install the client, on both OSMC and Openelec, you need to follow Step 4 from the tutorial below to enable the client:
    In addition to the tutorial above, the asyncronous EPG update can be also ticked.

    A side note:
    The SD channels are MPEG2 encoded, while the HD channels are VC-1. Both formats can be decoded by the Raspberry's GPU, but due to licensing issues, this is not available for free on the Raspberry. The good thing is that for a license fee (2-3 GBP) you can purchase both licenses from raspberry's website:
    Note: Even is in theory software decoding will be performed in case no license is available, this is practically not usable for wathing live content!
    So in order to use it for live tv viewer you MUST purchase those licenses. The purchasing and the installation is widely discussed on the internet, google will provide the necessary steps.
    After you have the the licenses and tvheadend client enabled you should have a new TV entry in your main menu. Clicking on it will open the channel list. If you want so see certain group, you can select them from the left menu. Here, you will get the groups that you have configured previously in tvheadend server, on the Channel tags tab.
    kosar kedveli.
  5. Trex Tag

    5) [Optional] Install oscam to watch encrypted channels:
    Note: watching encrypted channels is not illegal. Wathing encrypted channels in case you don't have a subscription card is illegal and punishable by law. The severity increases, if you share your subscription card with others. You will die in a special hell if you ask also money for that. Now that you've been warned, it's up to you with whom you are willing to share your subscription card.
    Setting up and running oscam was discussed at a lot of places, I've also written a tutorial about this a while ago. This can be found here:
    So from now on, we will assume that we have a working oscam server on your raspberry Pi, OR on your internal network, but on different machine. We will see later why is this also ok.
    In order to use oscam to descramble the encyrpted channels, we need to make a connection between the tvheadend server and oscam server.
    Tvheadend has great support for CAs (Conditional access), you can find the settings under the Configuration -> CAs menu point
    What is important for us is the newcamd protocol or the dvbapi protocol.
    If you have only one CAID, then you could use also a newcamd connection between tvheadend and oscam.
    As we are assuming that you would like to watch more channel from different caids, we will use the dvbapi protocol, the one widely supported on a lot of Enigma-based STBs.
    Before we proceed, some short background info about encryption from wikipedia:
    This is achieved by a combination of scrambling and encryption. The data stream is scrambled with an 48-bit secret key, called the control word. Knowing the value of the control word at a given moment is of relatively little value, as under normal conditions, content providers will change the control word several times per minute. The control word is generated automatically in such a way that successive values are not usually predictable; the DVB specification recommends using a physical process for that.
    In order for the receiver to unscramble the data stream, it must be permanently informed about the current value of the control word. In practice, it must be informed slightly in advance, so that no viewing interruption occurs. Encryption is used to protect the control word during transmission to the receiver: the control word is encrypted as an entitlement control message (ECM). The CA subsystem in the receiver will decrypt the control word only when authorised to do so; that authority is sent to the receiver in the form of an entitlement management message (EMM). The EMMs are specific to each subscriber, as identified by the smart card in his receiver, or to groups of subscribers, and are issued much less frequently than ECMs, usually at monthly intervals. This being apparently not sufficient to prevent unauthorized viewing, TPS has lowered this interval down to about 12 minutes. This can be different for every provider, BSkyB uses a term of 6 weeks. When Nagravision 2 was hacked, Digital+ started sending a new EMM every three days to make unauthorized viewing more cumbersome.
    The contents of ECMs and EMMs are not standardized and as such they depend on the conditional access system being used.
    More info here:
    So in a nuthshell, in the received content we will have to send the ECM to the valid subscription card and get back the decryption key. This means, the tvheadend server needs to communicate with oscam, that needs to communicate with the card reader in which there is a valid subscription cards. Now, the part in which oscam communicates with the cards won't be discussed here, it's widely discussed on the forum.
    We need to set up tvheadend to send the ECM and request the decryption keys from oscam. As stated before, we will use the dvapi protocol, but unfortunately, we have more variants also here:
    a) In the past, the receiver with enigma2 created a socket file, usually in the /tmp folder called camd.socket. Through this socket the softcam server and the enigma2 used to exchange data. This has a disadvantage: the softcam server needed to poll for new data every time, therefore this was not a good design. However, this was kept for ages, and, unfortunately this method is widely used as an example on various forums. Fortunately there are better ways now, and, as suggested also on the tvheadend website, the newer one shall be used: http://docs.tvheadend.org/webui/config_caclient/. Older Cam servers, like CCcam only supports this method. More modern cam servers, like oscam supports also newer and better methods. I don't want to discuss now why is oscam better, as there are still people out there who say that cccam is the best, and oscam is crappy and unstable, but most of them say it because they don't know how to properly configure oscam. I have oscam servers running for quite some time, with 99.99% uptime. It rarely crashes (if it does, a cron job that runs every 5 minutes will restart it), has good documentation, great web interface, and can do AU for almost every usual cards. And it's also open source, constantly being developed. So, I rest my case here, if somebody still thinks windows xp is the best, then feel free to use it :) So, CCCam supports camd.socket, the configuration on tvheadend side is slightly different, won't discuss it here.
    Unfortunately, there is also an older tutorial available on the net which confuses the user.
    b) The socket file was not a good design, due to the problems enumerated above, and oscam implemented the better dvbapi protocols. Now, it can use a TCP/IP based client-server approach (or UDP, but already deprecated) to establish the communication between oscam and tvheadend server. In this case, the server is created on the oscam side, and tvheadend will connect to it as a client, only if necessary. Therefore, there is no polling, and the best part, the oscam server can be on a different machine than tvheadend (still, it should be on the same network and isolated form the outside, as there is no authentification between them - so anybody can connect).
    This means, that even if your tvheadend server is on a different machine, you can request the descrambling keys from oscam without loosing one hop. Before you get too excited about it, I have to reming you that this accepts only one connection, so sharing through dvapi is a no-go.
    If you decide to use oscam on the same raspberry, you have to install it, configure it. There are also a lot of toturials around here, so I won't describe this part, if you are interested in building the oscam from the sources, you can find a tutorial here:
    Also, you can install oscam from the repository (Openelec has one, can't remember which one) or download it from here:
    (Note: in case the link is not accessible, you need to use a TOR browser, as the ISP or the website itself is blocking certain countries).
    kosar kedveli.
  6. Trex Tag

    Once you have a working oscam server running on your network, you can proceed.

    Configuring oscam for dvbapi:

    You can do this also via the menu, but in the end, you need to end up with the following configuration in the oscam.conf file:

    Kód beillesztése:
    enabled  = 1
    au  = 1 #if you want to pass EMM data for subscription updates
    pmt_mode = 4
    request_mode  = 1
    listen_port = 9000
    user = dvbapi
    boxtype  = pc

    Restart oscam, and you should be good on the oscam side.

    Note: If you run oscam on a different machine than tvheadend, make sure to configure the firewall properly in order to allow TCP connections on port 9000.

    Back to tvheadend:

    Under Configuration -> CAs menu point you have to add a new conditiona access client, and from the list chose CAPMT (Linux DVBAPI).

    Here you will have to set up like below:


    A little explanation:

    - client name, comment can be anything.

    - Mode: this is the tricky part. In order to use the so called mode 5, or protocol version 2, you need to have a slightly new oscam build. This is the supported way also by oscam, other methods will be dropped in the future. So I highly recommend to upgrade your oscam to a newer version, not to mention that a lot of issues were addressed in these. If you still have to stick with an older version, chose oscam tcp. I won't recomment using the old camd.socket method, therefore I won't present it here.

    - In the screenshot you can see , as on my setup, the oscam server is running on a separate dedicated server, and the raspberry's tvheadend is connecting to it. In case you are running oscam on the same machine (i.e. the RPi2), then use as hostname.

    - The listen port shall be 9000, as this is the one used in the oscam server. You can change to other value, but make sure that the port is free. Make sure that you change it also on the oscam side, otherwise the connection won't be established.

    Once everything is set up, save the settings and you should see that the connection is established.


    1) you can open the debug console on the bottom of the page any time and consult the output it generates.

    2) Never ever open the 9000 port to the WAN, i.e. outside your local network. Anybody can connect to it and not only you won't be able to connect, but can also fraudulently use your server, or even worse, check that you are running on oscam server.
    Once this is setup, you should be able to watch scrambled channels, in the same way as you do it on your enigma2 based box.
    kosar kedveli.
  7. Trex Tag

    Remélem hasznos lesz ez a leírás, próbáltam minél részletesebben leírni, hogyan is kell beállítani. Elég sok infó van ezekről a neten, de eléggé szétszórt. Gondoltam nem árt ha minden egy helyen van leírva. Természetesen lesznek benne hibák, ezért ha észleltek ilyeneket, osszátok meg bátran
    kosar kedveli.
  8. Trex Tag

    One last addition to this, as I've forgot to write them down: workarounds and issues.
    - If you are getting continuity errors, this means that the MPEG stream is periodically interrupted. There can be many causes for this: if you have high BER number, most probably this is the case. You can check this in the status tab. But in case BER is 0, you might have the problem for which disabling the 'idle scan' will most probably fix it.
    - If you are getting timeout waiting for packets, then I could also have multiple causes. If you are trying to watch a scrambled channel, switch to oscam's live log anc and filter for dvbapi. In case you have timeouts there, this might be the case: you are not getting the keys fast enough. Try switching to a FTA channel, the problem should go away. BUT, if you are getting this error also with FTA channels, you might be in the same situation as I was, and it seems that the solution is to decrease the Rotor Initialization Time from 120s to something much lower, say 20s. This fixed the problem for me. (This can be found under Configuration -> DVB Inputs -> TV Adapters TAB
    However, this shall be fixed in kernel 4.3 and newer. See this thread for more info: https://tvheadend.org/issues/3327
  9. misimokus Tag

    szép leirás csak ha magyarul lenne még szebb lenne mert nem mindenki ért angolul
  10. Trex Tag

    Igy van, viszont angolul tobben beszelnek a vilagon, mint magyarul, ezert gondoltam hogy igy irom...
  11. teser Új tag

    szép munka , kár hogy egy alapvetően magyar fórumon nem sok külföldi fordul meg, lehet neki ugrok egy tesztnek ez alapján...
  12. Trex Tag

    En is 'az' vagyok :)
  13. teser Új tag

    Tudom, de attól még beszél magyar :)
  14. Trex Tag


Oszd meg ezt az oldalt ismerőseiddel!