Multi-tuner support has been added to Freevo in Release 1.6.0
What is meant by multi-tuner support is that with two TV cards or a dual-tuner card you can watch one TV channel or listen to the radio at the same time while recording a TV programme. (Note that the following only works fine if the two TV cards are driven by the same driver; if this is not your case, you may want to refer to this explanation.)
It has been implemented by using VIDEO_GROUPS in local_conf.py. Lets start with a working example for a Hauppauge WinTV PVR-500MCE dual-tuner card.
VIDEO_GROUPS = [ VideoGroup(vdev = '/dev/video0', adev = '/dev/adsp', input_type = 'tuner', input_num = 0, tuner_norm = CONF.tv, tuner_chanlist = CONF.chanlist, desc = 'PVR-500 Play Group', group_type = 'ivtv', record_group = 1), VideoGroup(vdev = '/dev/video1', adev = '/dev/adsp', input_type = 'tuner', input_num = 0, tuner_norm = CONF.tv, tuner_chanlist = CONF.chanlist, desc = 'PVR-500 Record Group', group_type = 'ivtv', record_group = None), VideoGroup(vdev = '/dev/video2', adev = None, input_type = 'webcam', desc = 'Logitech Quickcam', group_type = 'webcam', record_group = None), ]
In this example there are three VideoGroups. The first group is used to watch TV or listen to the radio, the second group is used to record TV programmes and the third group is used for web camera.
In the first group it has a setting record_group = 1 which means use the second VideoGroup to record. Note the groups are numbered from 0 (zero), so in the above example the first VIDEO_GROUP your read is 0 the second is VIDEO_GROUP 1 the third is VIDEO_GROUP 2.
In the second and third group the record_group is set to None. This means, that they don't have a record group. In which case the same tuner is used for both watching and recording.
It is possible to have as many VideoGroups as tuners, DVB and analogue cards can be mixed and TV_CHANNELS is used to control which tuner is used for a channel.
TV_CHANNELS = [('rte-1.rte.ie', 'RTE1', 'A11', '', '0'), ('rte2.rte.ie', 'NET2', 'A7', '', '0'), ('utvlive.com', 'UTV', 'A13', '', '0'), ('channel4.com', 'Channel4', 'A3', '', '0'), ('south-east.bbc1.bbc.co.uk', 'BBC1', 'A17', '', '0'), ('south-east.bbc2.bbc.co.uk', 'BBC2', 'A18', '', '0'), ('tv3.ie', 'TV3', 'A9', '', '0'), ('sky-one.sky.com', 'SKY1', 'A19', '', '0'), ('tg4.ie', 'TG4', 'A15', '', '0'), ('e4.channel4.com', 'E4', 'A5', '', '0'), ('paramountcomedy.com', 'Paramount', 'A22', '', '0'), ('2.setanta.com', 'Setanta', 'A20', '', '0'), ('discoveryeurope.com', 'Discovery', 'A1', '', '0'), ('mtv.co.uk', '6', 'A21', '', '0'), ('livingtv.co.uk', 'Living', 'A32', '', '0'), ('sky-news.sky.com', 'Sky News', 'A24', '', '0') ]
So we'll run through the example TV_CHANNELS shown above. Firstly note that there's no entry for the webcam simply because I'm not sure of the syntax so if someone else can fill it in at the end please do so that it matches what is shown in the VIDEO_GROUPS however it is not needed for this example.
All channels listed have '0' in the parameter for VIDEO_GROUP. This means that when you watch TV on one of these channels the VIDEO_GROUP listing above stipulates that it uses the first VIDEO_GROUP defined above (remember that the in python the index starts at 0). In the first VIDEO_GROUP vdev is set to '/dev/video0', this means that watching a channel in this VIDEO_GROUP will be done with /video0.
You'll also see in the first VIDEO_GROUP (0) that record_group is set to record_group = 1. This means that recording a channel in that VIDEO_GROUP will acually be done by the settings in the second VIDEO_GROUP (remember you're counting from 0,1,2 etc.). So if you then look at the vdev in the second VIDEO_GROUP you'll see vdev = '/dev/video1' so it will record using the /video1 device. This way when you try to watch rte-1 for example freevo will use /video0, when you try to record from rte-1 freevo will use /video1.
Essentially record_group equals VIDEO_GROUP and the vdev you have set in that VIDEO_GROUP will be used to record from.