VirtualSTB
1. Intro
Primary goal of VirtualSTB is to allow Linux DVB (digital TV) software
to run under Windows without code modification. Surprisingly, and as it usually
happens,during development of this software it became clear that some solutions
could be used for other goals.
Generaly VirtualSTB could be divided to 2 parts:
- Linux part (proxyDVB, proxyDVB_Handler & proxyDVB_Pusher)
- Windows part (VirtualSTBViewer)
These parts could be used together or separately. That depends on your needs.
Currently it is possible (with some limitations) to run unmodified
vdr (Video Disk Recorder).
2. Linux part
General idea was to use only one computer for VirtualSTB that means that
Linux is supposed to be Virtual on Windows machine. You can use any Linux
virtualization software like coLinux,
VirtualPC, VMWare, QEmu,
Bochs...
Development is done using coLinux (because there is no CPU emulation).
During tests with VirtualPC no problems were found. Of course you can use
stand-alone Linux machine too.
2.1 proxyDVB
proxyDVB is Linux kernel module that implements LinuxDVB API and behaves
as DVB card. Development is done using Kernel 2.4.26 and LinuxDVB driver from
2004.04.03. When driver is loaded it creates following devices:
- /dev/dvb/adapterX/audio0
- /dev/dvb/adapterX/backdoor
- /dev/dvb/adapterX/ca0
- /dev/dvb/adapterX/demux0
- /dev/dvb/adapterX/dvr0
- /dev/dvb/adapterX/frontend0
- /dev/dvb/adapterX/net0
- /dev/dvb/adapterX/osd0
- /dev/dvb/adapterX/push_channel
- /dev/dvb/adapterX/video0
as you see that is supposed to be a Premium-DVB card. In fact proxyDVB does
nothing but transfers API calls to another program via /dev/dvb/adapterX/backdoor
device and sends back data that is received from /dev/dvb/adapterX/push_channel
2.2 proxyDVB_handler
This program just opens device /dev/dvb/adapterX/backdoor and reads API calls
from proxyDVB. When new API call is read, this information is being sent to
special server via TCP/IP where this command will be processed. When command
is processed, answer is received and sent back to proxyDVB adapter.
proxyDVB_handler have 3 arguments: BackdoorDevice ServerAddress ServerPort
2.3 proxyDVB_pusher
This program opens device /dev/dvb/adapterX/push_channel and writes DVB data
that is received from special server via TCP/IP. Currently it is supposed
to receive only MPEG2 TransportStream.
proxyDVB_pusher have 3 arguments: PushDevice ServerAddress ServerPort
3. Windows part
Windows part is program named VirtualSTBViewer. This program receives DVB API
calls from Linux application via TCP/IP, processes them on real hardware
and sends data back. OSD implemented with DirectShow using VideoMixingRenderer9
and alpha-blending. "Universal Source Filter" (usrc.ax) from WinSTB project
is required.
Currently following run modes are supported:
- SkyStar2(SkyAVCdata)
- Nova
- AnalogTV
- OSDWithoutHardware
- StreamReader
- PCTVSat
- SkyStar2(SkyAVC)
VSTBViewer can send all pressed keyboard keys and WinLIRC received remote keys
via SVDRP (VDR server protocol).
3.1 SkyStar2 (SkyAVCdata)
In this mode SkyStar2 hardware is controlled by
Marfi's SkyAVC.ax
DirectShow filter.
Current problems: No Diseqc support implemented. PID 0 is not being sent back
to Linux.
When filter for new PID filter is added, video stops for some time
NB: SkyAVC filter have expiration date
3.2 Nova
In this mode Nova (SkyStar3 or TechnoTrend budget DVB card) is controlled
by OpenSource Windows driver written by Marcel Major.
No bugs related to driver are known.
3.3 AnalogTV
In this mode your DVB commands will be translated to AnalogTV API. Only tuning
and Video/Audio display is implemented. Data capture is not implemented yet.
To be honest it is not really related to DVB but it was easy to implement
and include into VirtualSTB so it was done...8)
3.4 OSDWithoutHardware
In this mode no hardware related commands are processed. But OSD is working
and your custom DirectShow graph is loaded. That means that you could create
graph that will receive streamed data from Linux (streaming plugin) that
will work with OSD and keyboard.
In Addons directory you will find ugly, dirty patch for vdr that will send OSD
commands directly to VirtualSTBViewer. Target IP address is hardcoded.
It is supposed to run together with streaming plugin. At now it is not tested yet.
3.5 StreamReader
In this mode hardware is controlled using StreamReader.dll. It has been tested
for SkyStar2 using StreamReader.dll from WinSTB project. Unfortunatelly
at least this version is very unstable. You can try to use other versions.
BTW you also can try to use StreamReader.dll for other cards.
For instance there is (not yet tested with VSTB) version for
TwinHan cards:
NB: StreamReader.dll for SkyStar1 will not work!!!
3.6 PCTVSat
Code is based on WinSTB project. Currently for unknown reasons it does not work.
Please submit your patches.
3.7 SkyStar2 (SkyAVC)
In this mode Video/Audio displayed using original approach. So that means
that Video/Audio is not captured.
Screenshots
Downloads
SourceForge.net
TODO
- fix all hardware problems
- implement Linux client for proxyDVB
- Implement playback feature for Video/Audio device (timeshifting)
- Enigma / Neutrino
- port Windows code from Delphi to Lazarus?