[mythtv-users] DVB-C problems

Rudy Zijlstra mythtv at edsons.demon.nl
Wed Jan 3 10:44:52 UTC 2007


Janne Grunau wrote:

>On Wednesday 03 January 2007 01:47, Rudy Zijlstra wrote:
>  
>
>>I've been trying to get my DVB-C card working, or rather, to get
>>MythTv working with my cable operator. This means working around the
>>assumption on Myth that all cable operators are fully standards
>>compliant.
>>    
>>
>
>MythTV doesn't assume that the cable providers are standard complient. 
>It implements (a subset of) the DVB Standards. It doesn't implement the 
>propetary format the cable providers use. 
>  
>
Lets skip this discussion, i am not so much interested in this as in 
getting it to work.

>>Or rather, the assumption that all cable operators use 
>>DVB-C in the same manner.
>>    
>>
>
>See above.
>
>  
>
>>One of the assumptions here is that the 
>>NIT-Actual will describe the actual network layout.
>>    
>>
>
>The DVB standard specifies this.
>  
>
And cable operators over europe have been ignoring that particular line 
in the spec for many, many years.

>  
>
>>On DVB-C it is very common though,
>>    
>>
>
>The only other report of broken DVB-C I know of from MythTV users is the 
>invalid network id 0 used in finland.
>  
>
Take a look at most cable ops in europe. You are lucky that in Germany 
most actually adhere to that line in the spec.

>  
>
>>that several NIT-Other are present, which each 
>>describe the network layout for a particular geographical area. STB
>>for these operators will present the user with a network-id choice,
>>and the user has to type in the network id. The STB then searches for
>>the NIT-Other with this network-id, and installs from there.
>>    
>>
>
>I don't really get why any cable provider would do that. Alone the 
>support for clueless user who don't know the correct network id should 
>be more expensive than a dvb complient setup.
>  
>
They have been doing it now for over 10 years, I do not expect them to 
stop doing it. Any STB is distributed with a list of which network-id to 
use in which geographical area.

>  
>
>>This goes against the MythTv assumptions.
>>    
>>
>
>See above.
>
>  
>
>>I've tried to work around this by manual scanning, and taken the
>>following steps:
>>- determine the frequencies used on my cable (dvbsnoop of frequency,
>>and manual analysis of of relevant NIT-Other(s).
>>- enter found frequencies into dtv_multiplex
>>- let mythtv-setup perform scan of transports
>>- edit found channels to refer to correct transport stream instead of
>>to incorrectly assumed transports from NIT-Actual
>>    
>>
>
>This is unfortunate. If we can tune to a transport and find channels we 
>shouldn't change the data and add the channels to the current 
>transport.
>
>  
>
Fully agree.

>>- delelete transports from NIT-Actual from dtv_multiplex, so they do
>>not clutter the table (and cause confusion for me).
>>    
>>
>
>would it help if mythtv would parse NIT-actual and all NIT-others? I 
>don't like the approach of entering the correct netwerkid for scanning. 
>Could you send a dump of all NITs, it would help to see how the differ 
>to find a viable solution.
>  
>
Would help. I can seen why you do not want to enter network-id, as it is 
indeed error prone. You could then figure out the correct network-id by 
checking which TS are actually present on the network, and using that 
network-id.

Side discussion: On the other hand, on DVB-S being able to enter a 
network-id would be a boon. In the current situation when you enable 
encrypted channels, you get all of them. In reality you will only be 
able to receive those you have a smartcard for. Which means channels 
with a particular network-id. Being able to filter on network-id in 
DVB-S would limit the scan to the channels you can actually use. (and 
not clutter the channel table with hundreds or thousands of un-usable 
channels).

>  
>
>>End result is that it still does not work, because siscanner will
>>work from the NIT, and takes the NIT-Actual (judging from output from
>>"-v channel".
>>    
>>
>
>I'm not sure if I understand you correctly. You edited the channel table 
>in such a way that all channels refer to the correct multiplex through 
>mplexid but live-tv/recordings still doesn't work?
>
Correct. And i just verified that the service-id's are indeed the 
correct ones (i checked for 1 TS).

> Please provide a 
>backend log with -v channel,record,siparser. My first guess would be 
>that the original network id
>
Original network-id = 1000, network-id of NIT-Other for my area = 1111. 
All original network-id's are 1000, both in TS loop, as well as in SDT 
as well as in EIT.

> or transport id
>
This one matches. I have 10 in the db, 10 in the PAT and 10 in the 
NIT-Other.

> doesn't match the one in 
>the SDT either since there is bogus information in the db or the 
>transmitted SDT is also bogus. You could try to set them to 0 if you 
>use 0.20 or set the sistandard to mpeg for trunk. You obviously won't 
>be able to get EIT after that but Live-TV should work.
>
>BTW which version do you use? Trunk or 0.20(-fixes)?
>  
>
Trunk from yesterday for todays testing.

>  
>
>>As i am no coder, i would like pointers to continue this. I would
>>very much like to be able to use my DVB-C card to record.
>>    
>>
>
>The scanning issue remains but TV works hopefully now. If you know the 
>correct networkid it wouldn't be hard to exchange the NIT-actual with 
>the correct NIT-other in DVBStreamData::HandleTables().
>
>  
>
See above.

If you have an FTP site, i can upload a 10 second dump from the DVB 
tables. Or i can send an email directly with account info to get from my 
FTP site. Or a short stream recording.

Cheers,

Rudy

>HTH HAND Janne
>_______________________________________________
>
>  
>

Below log from mythbackend, trying to tune to service 10001, which is 
not encrypted (which is why i use this one for testing):
2007-01-03 11:35:53.071 DVBChan(0): Opening DVB channel
2007-01-03 11:35:53.136 DVBChan(0): SetChannelByString(10001):
2007-01-03 11:35:53.206 DVBChan(0): 276000000 qam_64 a auto auto a a 
auto a v
2007-01-03 11:35:53.263 DVBChan(0): Old Params: 268000000 qam_64 a auto 
auto a a auto a v
                        DVBChan(0): New Params: 276000000 qam_64 a auto 
auto a a auto a v
2007-01-03 11:35:53.314 DVBChan(0): Tune(): Tuning to 276000000Hz
2007-01-03 11:35:53.575 dvbchannel.cpp:wait_for_backend: Status: 
Signal,Carrier,FEC Stable,Sync,Lock,
2007-01-03 11:35:53.645 DVBChan(0): Tune(): Frequency tuning successful.
2007-01-03 11:35:53.697 DVBChan(0): SetChannelByString(10001): Tuned to 
frequency.
2007-01-03 11:35:53.750 TVRec(8): SwitchLiveTVRingBuffer(discont 1, 
set_rec 0)
2007-01-03 11:35:53.795 TVRec(8): GetProgramRingBufferForLiveTV()
2007-01-03 11:35:53.924 TVRec(8): StartedRecording(0xaf80eff8) 
fn(/data/mythstorage/13001_20070103113
553.mpg)
2007-01-03 11:35:54.042 TVRec(8): FinishedRecording() in recgroup: LiveTV
2007-01-03 11:35:54.095 Chain: Updated endtime for '3005_20070103113541' 
to 20070103113554
2007-01-03 11:35:54.198 Finished recording : channel 3005
2007-01-03 11:35:54.274 Preview: 
'myth://192.168.1.68:6543/3005_20070103113541.mpg' is not local,
                        replacing with 
'/data/mythstorage/3005_20070103113541.mpg', which is local.
2007-01-03 11:35:54.342 Chain: Appended at 1 '13001_20070103113553'
2007-01-03 11:35:54.346 Preview Error: Previewer file 
'/data/mythstorage/3005_20070103113541.mpg' is
not valid.
2007-01-03 11:35:54.437 TVRec(8): ClearFlags(DummyRecorderRunning,) -> 
FrontendReady,RunMainLoop,Canc
elNextRecording,AskAllowRecording,
2007-01-03 11:35:54.558 TVRec(8): Starting Signal Monitor
2007-01-03 11:35:54.610 TVRec(8): SetupSignalMonitor(1, 1)
2007-01-03 11:35:54.659 DVBChan(0): Opening DVB channel
2007-01-03 11:35:54.739 SM(0)::AddFlags: Seen() Match() Wait(Sig,)
2007-01-03 11:35:54.784 DVBSM(0)::constructor(): initial flags 0x40000000
2007-01-03 11:35:54.828 TVRec(8): Signal monitor successfully created
2007-01-03 11:35:54.878 TVRec(8): Setting up table monitoring.
2007-01-03 11:35:54.934 Using profile 'Default' to record
2007-01-03 11:35:54.977 TVRec(8): DVB service_id 10001 on net_id 1111 
tsid 10
2007-01-03 11:35:55.019 DTVSM(0)::SetDVBService(transport_id: 10, 
network_id: 1111, service_id: 10001
):
2007-01-03 11:35:55.052 SM(0)::RemoveFlags: Seen(PMT,SDT,) 
Match(PMT,SDT,) Wait()
2007-01-03 11:35:55.109 SM(0)::AddFlags: Seen() Match() Wait(PMT,SDT,)
2007-01-03 11:35:55.159 SM(0)::AddFlags: Seen() Match() Wait(PMT,SDT,Pos,)
2007-01-03 11:35:55.224 TVRec(8): Successfully set up DVB table monitoring.
2007-01-03 11:35:55.271 SM(0)::Start: begin
2007-01-03 11:35:55.322 DVBSM(0)::UpdateValues: Signal Locked
2007-01-03 11:35:55.327 SM(0)::Start: end
2007-01-03 11:35:55.411 TVRec(8): SetFlags(SignalMonitorRunning,) -> 
FrontendReady,RunMainLoop,Cancel
NextRecording,AskAllowRecording,SignalMonitorRunning,
2007-01-03 11:35:55.386 DVBSM(0): RunTableMonitorTS(): begin (# of pids 3)
2007-01-03 11:35:55.368 DVBSM(0)::UpdateValues: Waiting for table 
monitor to start
2007-01-03 11:35:55.455 TVRec(8): ClearFlags(WaitingForSignal,) -> 
FrontendReady,RunMainLoop,CancelNe
xtRecording,AskAllowRecording,SignalMonitorRunning,
2007-01-03 11:35:55.505 DVBSM(0)::AddPIDFilter(0x0):
2007-01-03 11:35:55.553 DVBSM(0)::UpdateValues: Table monitor started
2007-01-03 11:35:55.613 TVRec(8): SetFlags(WaitingForSignal,) -> 
FrontendReady,RunMainLoop,CancelNext
Recording,AskAllowRecording,WaitingForSignal,SignalMonitorRunning,
2007-01-03 11:35:55.661 DVBSM(0)::AddPIDFilter(0x10):
2007-01-03 11:35:55.712 DTVSM(0)::GetStatusList: WaitForPMT seen(0) 
matching(0)
2007-01-03 11:35:55.772 TVRec(8): SetFlags(DummyRecorderRunning,) -> 
FrontendReady,RunMainLoop,Cancel
NextRecording,AskAllowRecording,WaitingForSignal,SignalMonitorRunning,DummyRecorderRunning,
2007-01-03 11:35:55.828 DVBSM(0)::AddPIDFilter(0x11):
2007-01-03 11:35:55.929 DummyDTVRecorder -- started
2007-01-03 11:35:55.968 SM(0)::AddFlags: Seen(PAT,) Match() Wait()
2007-01-03 11:35:56.018 TVRec(8): SetFlags(RingBufferReady,) -> 
FrontendReady,RunMainLoop,CancelNextR
ecording,AskAllowRecording,WaitingForSignal,SignalMonitorRunning,DummyRecorderRunning,RingBufferReady
,
2007-01-03 11:35:56.054 SM(0)::AddFlags: Seen() Match(PAT,) Wait()
2007-01-03 11:35:56.123 TVRec(8): ClearFlags(NeedToStartRecorder,) -> 
FrontendReady,RunMainLoop,Cance
lNextRecording,AskAllowRecording,WaitingForSignal,SignalMonitorRunning,DummyRecorderRunning,RingBuffe
rReady,
2007-01-03 11:35:56.216 TVRec(8): SetFlags(NeedToStartRecorder,) -> 
FrontendReady,RunMainLoop,CancelN
extRecording,AskAllowRecording,WaitingForSignal,NeedToStartRecorder,SignalMonitorRunning,DummyRecorde
rRunning,RingBufferReady,
2007-01-03 11:35:56.170 CreatePATSingleProgram()
2007-01-03 11:35:56.338 PAT in input stream
2007-01-03 11:35:56.382 Program Association Table
 PSIP tableID(0x0) length(25) extension(0xa)
      version(1) current(1) section(0) last_section(0)
         tsid: 10
 programCount: 4
  program number 10001 has PID 0x 44c   data  0x27 0x11 0xe4 0x4c
  program number 10002 has PID 0x 4b0   data  0x27 0x12 0xe4 0xb0
  program number 10003 has PID 0x 514   data  0x27 0x13 0xe5 0x14
  program number 10004 has PID 0x 578   data  0x27 0x14 0xe5 0x78

2007-01-03 11:35:56.412 desired_program(10001) pid(0x44c)
2007-01-03 11:35:56.279 TVRec(8): SetChannel() -- end
2007-01-03 11:35:56.455 pmt_pid(0x44c)
2007-01-03 11:35:56.571 PAT for output stream
2007-01-03 11:35:56.659 Program Association Table
 PSIP tableID(0x0) length(13) extension(0xa)
      version(1) current(1) section(0) last_section(0)
         tsid: 10
 programCount: 1
  program number 1 has PID 0x 44c   data  0x 0 0x 1 0xe4 0x4c

2007-01-03 11:35:56.707 DVBSM(0)::AddPIDFilter(0x44c):
2007-01-03 11:35:56.768 DTVSM(0)::SetNIT(): net_id = 1000
2007-01-03 11:35:56.814 SM(0)::AddFlags: Seen(NIT,) Match() Wait()
2007-01-03 11:35:56.848 SM(0)::AddFlags: Seen(PMT,) Match() Wait()
2007-01-03 11:35:56.883 SM(0)::AddFlags: Seen() Match(PMT,) Wait()
2007-01-03 11:35:56.888 DTVSM(0)::GetStatusList: WaitForPMT seen(1) 
matching(0)
2007-01-03 11:35:56.972 CreatePMTSingleProgram()
2007-01-03 11:35:57.016 PMT in input stream
2007-01-03 11:35:57.028 DTVSM(0)::GetStatusList: WaitForPMT seen(1) 
matching(1)
2007-01-03 11:35:57.069 Program Map Table ver(0) pid(0x44c) pnum(10001) 
len(61)
  Maximum Bitrate Descriptor (0xe) length(3)
  Smoothing Buffer Descriptor (0x10) length(6)
  System Clock Descriptor (0xb) length(2)

 Stream #0 pid(0x65) type(video-mpeg2  0x2)
  Unknown(6) Descriptor (0x6) length(1)
 Stream #1 pid(0x66) type(audio-mp2-layer[1,2,3]  0x4)
  ISO-639 Language: code(dut) canonical(dut) eng(Dutch; Flemish)
 Stream #2 pid(0x72) type(private-data  0x6)
  Teletext Descriptor (0x56) length(5)

2007-01-03 11:35:57.168 PMT for output stream
2007-01-03 11:35:57.225 Program Map Table ver(0) pid(0x44c) pnum(1) len(23)

 Stream #0 pid(0x65) type(video-mpeg2  0x2)
 Stream #1 pid(0x66) type(audio-mp2-layer[1,2,3]  0x4)

2007-01-03 11:35:57.276 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:35:57.381 DTVSM(0)::SetNIT(): net_id = 1000
2007-01-03 11:35:57.434 SM(0)::AddFlags: Seen(NIT,) Match() Wait()
2007-01-03 11:35:58.788 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:35:59.580 DTVSM(0)::SetNIT(): net_id = 1000
2007-01-03 11:35:59.649 SM(0)::AddFlags: Seen(NIT,) Match() Wait()
2007-01-03 11:36:00.292 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:01.805 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:03.276 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:04.805 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:06.321 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:07.809 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:09.281 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:10.817 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:12.294 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:13.810 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:15.310 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:16.794 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:18.302 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:19.444 StopLiveTV(void) curRec: 0xaf80eff8 pseudoRec: 0
2007-01-03 11:36:19.536 TVRec(8): Changing from WatchingLiveTV to None
2007-01-03 11:36:19.591 TVRec(8): 
ClearFlags(FrontendReady,CancelNextRecording,) -> RunMainLoop,AskAl
lowRecording,WaitingForSignal,NeedToStartRecorder,SignalMonitorRunning,DummyRecorderRunning,RingBuffe
rReady,
2007-01-03 11:36:19.637 TVRec(8): SetFlags(AskAllowRecording,) -> 
RunMainLoop,AskAllowRecording,Waiti
ngForSignal,NeedToStartRecorder,SignalMonitorRunning,DummyRecorderRunning,RingBufferReady,
2007-01-03 11:36:19.671 TVRec(8): Request: Program(no) channel() input() 
flags(KillRec,KillRingBuffer
,)
2007-01-03 11:36:19.716 TVRec(8): TeardownSignalMonitor() -- begin
2007-01-03 11:36:19.762 DVBSM(0)::Stop: begin
2007-01-03 11:36:19.775 SM(0)::AddFlags: Seen(SDT,) Match() Wait()
2007-01-03 11:36:19.804 SM(0)::Stop: begin
2007-01-03 11:36:19.891 SM(0)::Stop: end
2007-01-03 11:36:19.990 DVBSM(0): RunTableMonitorTS(): shutdown
2007-01-03 11:36:20.049 DVBSM(0)::RemovePIDFilter(0x0):
2007-01-03 11:36:20.100 DVBSM(0)::RemovePIDFilter(0x10):
2007-01-03 11:36:20.142 DVBSM(0)::RemovePIDFilter(0x11):
2007-01-03 11:36:20.192 DVBSM(0)::RemovePIDFilter(0x44c):
2007-01-03 11:36:20.244 DVBSM(0): RunTableMonitorTS(): end
2007-01-03 11:36:20.296 DVBSM(0)::Stop: end
2007-01-03 11:36:20.333 TVRec(8): TeardownSignalMonitor() -- end
2007-01-03 11:36:20.367 TVRec(8): ClearFlags(SignalMonitorRunning,) -> 
RunMainLoop,AskAllowRecording,
WaitingForSignal,NeedToStartRecorder,DummyRecorderRunning,RingBufferReady,
2007-01-03 11:36:20.413 TVRec(8): ClearFlags(WaitingForSignal,) -> 
RunMainLoop,AskAllowRecording,Need
ToStartRecorder,DummyRecorderRunning,RingBufferReady,
2007-01-03 11:36:20.464 TVRec(8): ClearFlags(DummyRecorderRunning,) -> 
RunMainLoop,AskAllowRecording,
NeedToStartRecorder,RingBufferReady,
2007-01-03 11:36:20.507 TVRec(8): FinishedRecording() in recgroup: LiveTV
2007-01-03 11:36:20.557 Chain: Updated endtime for 
'13001_20070103113553' to 20070103113620
2007-01-03 11:36:20.625 Finished recording : channel 13001
2007-01-03 11:36:20.687 TVRec(8): Tearing down RingBuffer
2007-01-03 11:36:20.739 TVRec(8): ClearFlags(PENDINGACTIONS,) -> 
RunMainLoop,AskAllowRecording,RingBu
fferReady,



More information about the mythtv-users mailing list