Project

General

Profile

Bug #4789

PCR issue for IPTV

Added by Mono Polimorph about 7 years ago. Updated almost 7 years ago.

Status:
Invalid
Priority:
Normal
Assignee:
-
Category:
IPTV
Target version:
-
Start date:
2017-12-13
Due date:
% Done:

0%

Estimated time:
Found in version:
last commit
Affected Versions:

Description

Hi,

I discovered the cause why the TS-FILE config isn't stored in the configuration: the function iptv_mux_config_save() is empty

- TS-FILE: https://github.com/tvheadend/tvheadend/blob/817f67e7b5d54a05d04ec2766ba1487a58337e1c/src/input/mpegts/tsfile/tsfile_mux.c#L50

- IPTV:
https://github.com/tvheadend/tvheadend/blob/186248a148da191e7d9f917573bb358118b15566/src/input/mpegts/iptv/iptv_mux.c#L285

We need this enabled for saving the SAT>IP frequency when applying #4784.
I feel this function isn't fully implemented because the TS-FILE is only enabled (at time) using the command-line. However, until this input will be enhanced, a simple map like TSFILE1, TSFILE2, etc. based on the apperance order in the commandline will be sufficient.

You agree?

History

#1

Updated by Mono Polimorph about 7 years ago

Hi Jarsolav,

I see another function that has an empty implementation:
https://github.com/tvheadend/tvheadend/blob/817f67e7b5d54a05d04ec2766ba1487a58337e1c/src/input/mpegts/tsfile/tsfile.c#L37

Regarding the "command-line only" support for TS-Files, I like to know your opinion:

- You agree to add to the General/Config section an entry for storing the value of "--tsfile_tuners". Then enable the option to manually adding muxers of TSFiles implementing the same behaviour of "--tsfile"?

The idea is go ahead and convert the current TSFile support in a mainstream functionality.
Please, comment your opinion about this.
Regards.

#2

Updated by Mono Polimorph about 7 years ago

Hi Jaroslav,

Now I see that this "class" of TSFile Input is only for debug. The IPTV network has one implementation for the "file://" handler. So, it's not needed to implement the config save for this class. (/)

However, I have another problem: Using the TSFile Input using a testing .TS file (recorded from a broadcast multiplex removing only the NULL packet stuff) all works great. However, when I create a mux in my IPTV network and I add this file (URL as "file:///home/user/test1.ts"), it doesn't play! Not with HTTP or SAT>IP protocols. The mux can be scanned and the services are listed. However, when I want to play it I see this in the log (enabling full trace of iptv):

2017-12-13 14:08:02.023 [  TRACE]:iptv-pcr: pcr: last 5713734603, time end 172906319331
2017-12-13 14:08:02.023 [  TRACE]:iptv-pcr: pcr: last 5713738390, time end 172906361408
2017-12-13 14:08:02.024 [  TRACE]:iptv-pcr: pcr: last 5713744544, time end 172906429786
2017-12-13 14:08:02.024 [  TRACE]:iptv-pcr: pcr: last 5713748332, time end 172906471875
2017-12-13 14:08:02.025 [  TRACE]:iptv-pcr: pcr: last 5713754486, time end 172906540253
2017-12-13 14:08:02.025 [  TRACE]:iptv-pcr: pcr: last 5713760647, time end 172906608708
2017-12-13 14:08:02.025 [  TRACE]:iptv-pcr: pcr: last 5713764427, time end 172906650708
2017-12-13 14:08:02.025 [  TRACE]:iptv-pcr: pcr: last 5713770581, time end 172906719086
2017-12-13 14:08:02.026 [  TRACE]:iptv-pcr: pcr: paused

And the file doesn't play. You know why?

#3

Updated by Mono Polimorph about 7 years ago

Hi Jaroslav,

The problem seems to be this: when reading the file the buffer fills and the PCR triggers a pause. However, after the client starts to read from the network, the "un-pause" command never arrives.

See this log:

2017-12-13 14:41:01.475 [   INFO]:subscription: 003D: "HTTP" subscribing to mux "test1-ts", weight: 10, adapter: "IPTV", network: "IPTV-LOCAL", service: "Raw PID Subscription", hostname="127.0.0.1", client="VLC/2.2.6 LibVLC/2.2.6" 
2017-12-13 14:41:01.475 [  TRACE]:subscription: 003D:  chain 01: input
2017-12-13 14:41:01.475 [  TRACE]:subscription: 003D:  chain 02: streaming queue 0x7fd490fe6588 size 0
2017-12-13 14:41:01.486 [  TRACE]:iptv-pcr: pcr: first 5713310844 last 5713314631, time start 174881112687, end 174881154770
2017-12-13 14:41:01.487 [  TRACE]:iptv-pcr: pcr: updated 5713311203, time start 174881116686, limit 5000000
2017-12-13 14:41:01.487 [  TRACE]:iptv-pcr: pcr: last 5713316998, time end 174881181080
2017-12-13 14:41:01.490 [  TRACE]:iptv-pcr: pcr: last 5713323158, time end 174881249524
2017-12-13 14:41:01.490 [  TRACE]:iptv-pcr: pcr: updated 5713311563, time start 174881120686, limit 5000000
2017-12-13 14:41:01.491 [  TRACE]:iptv-pcr: pcr: last 5713326946, time end 174881291613
2017-12-13 14:41:01.491 [  TRACE]:iptv-pcr: pcr: last 5713333100, time end 174881359991
2017-12-13 14:41:01.491 [  TRACE]:iptv-pcr: pcr: last 5713339254, time end 174881428369
2017-12-13 14:41:01.491 [  TRACE]:iptv-pcr: pcr: last 5713343042, time end 174881470458
2017-12-13 14:41:01.492 [  TRACE]:iptv-pcr: pcr: last 5713349202, time end 174881538902
2017-12-13 14:41:01.492 [  TRACE]:iptv-pcr: pcr: last 5713355349, time end 174881607202
2017-12-13 14:41:01.492 [  TRACE]:iptv-pcr: pcr: last 5713359137, time end 174881649291
2017-12-13 14:41:01.493 [  TRACE]:iptv-pcr: pcr: last 5713365291, time end 174881717669
2017-12-13 14:41:01.493 [  TRACE]:iptv-pcr: pcr: last 5713369561, time end 174881765113
2017-12-13 14:41:01.493 [  TRACE]:iptv-pcr: pcr: last 5713375715, time end 174881833491
2017-12-13 14:41:01.494 [  TRACE]:iptv-pcr: pcr: last 5713379027, time end 174881870291
2017-12-13 14:41:01.494 [  TRACE]:iptv-pcr: pcr: updated 5713311923, time start 174881124686, limit 5000000
2017-12-13 14:41:01.495 [  TRACE]:iptv-pcr: pcr: last 5713385650, time end 174881943880
2017-12-13 14:41:01.495 [  TRACE]:iptv-pcr: pcr: last 5713391811, time end 174882012336
2017-12-13 14:41:01.495 [  TRACE]:iptv-pcr: pcr: last 5713395122, time end 174882049124
2017-12-13 14:41:01.495 [  TRACE]:iptv-pcr: pcr: last 5713401752, time end 174882122791
2017-12-13 14:41:01.496 [  TRACE]:iptv-pcr: pcr: last 5713404119, time end 174882149091
2017-12-13 14:41:01.497 [  TRACE]:iptv-pcr: pcr: last 5713411218, time end 174882227969
2017-12-13 14:41:01.497 [  TRACE]:iptv-pcr: pcr: last 5713414067, time end 174882259624
2017-12-13 14:41:01.497 [  TRACE]:iptv-pcr: pcr: last 5713420221, time end 174882328002
2017-12-13 14:41:01.498 [  TRACE]:iptv-pcr: pcr: last 5713427320, time end 174882406880
2017-12-13 14:41:01.498 [  TRACE]:iptv-pcr: pcr: last 5713430156, time end 174882438391
2017-12-13 14:41:01.498 [  TRACE]:iptv-pcr: pcr: updated 5713312283, time start 174881128686, limit 5000000
2017-12-13 14:41:01.499 [  TRACE]:iptv-pcr: pcr: last 5713436316, time end 174882506836
2017-12-13 14:41:01.499 [  TRACE]:iptv-pcr: pcr: last 5713440104, time end 174882548924
2017-12-13 14:41:01.500 [  TRACE]:iptv-pcr: pcr: last 5713446734, time end 174882622591
2017-12-13 14:41:01.500 [  TRACE]:iptv-pcr: pcr: last 5713452888, time end 174882690969
2017-12-13 14:41:01.500 [  TRACE]:iptv-pcr: pcr: last 5713456675, time end 174882733047
2017-12-13 14:41:01.500 [  TRACE]:iptv-pcr: pcr: last 5713462829, time end 174882801424
2017-12-13 14:41:01.503 [  TRACE]:iptv-pcr: pcr: updated 5713312643, time start 174881132686, limit 5000000
2017-12-13 14:41:01.504 [  TRACE]:iptv-pcr: pcr: last 5713466617, time end 174882843513
2017-12-13 14:41:01.504 [  TRACE]:iptv-pcr: pcr: last 5713472771, time end 174882911891
2017-12-13 14:41:01.504 [  TRACE]:iptv-pcr: pcr: last 5713476082, time end 174882948680
2017-12-13 14:41:01.504 [  TRACE]:iptv-pcr: pcr: last 5713482719, time end 174883022424
2017-12-13 14:41:01.505 [  TRACE]:iptv-pcr: pcr: last 5713488873, time end 174883090802
2017-12-13 14:41:01.505 [  TRACE]:iptv-pcr: pcr: last 5713492185, time end 174883127602
2017-12-13 14:41:01.506 [  TRACE]:iptv-pcr: pcr: last 5713498815, time end 174883201269
2017-12-13 14:41:01.506 [  TRACE]:iptv-pcr: pcr: last 5713501181, time end 174883227558
2017-12-13 14:41:01.507 [  TRACE]:iptv-pcr: pcr: updated 5713313003, time start 174881136686, limit 5000000
2017-12-13 14:41:01.507 [  TRACE]:iptv-pcr: pcr: last 5713508763, time end 174883311802
2017-12-13 14:41:01.507 [  TRACE]:iptv-pcr: pcr: last 5713511599, time end 174883343313
2017-12-13 14:41:01.508 [  TRACE]:iptv-pcr: pcr: last 5713517753, time end 174883411691
2017-12-13 14:41:01.508 [  TRACE]:iptv-pcr: pcr: last 5713524852, time end 174883490569
2017-12-13 14:41:01.509 [  TRACE]:iptv-pcr: pcr: last 5713527694, time end 174883522147
2017-12-13 14:41:01.509 [  TRACE]:iptv-pcr: pcr: last 5713533855, time end 174883590602
2017-12-13 14:41:01.509 [  TRACE]:iptv-pcr: pcr: last 5713537636, time end 174883632613
2017-12-13 14:41:01.510 [  TRACE]:iptv-pcr: pcr: last 5713543790, time end 174883700991
2017-12-13 14:41:01.511 [  TRACE]:iptv-pcr: pcr: updated 5713313363, time start 174881140686, limit 5000000
2017-12-13 14:41:01.511 [  TRACE]:iptv-pcr: pcr: last 5713549944, time end 174883769369
2017-12-13 14:41:01.511 [  TRACE]:iptv-pcr: pcr: last 5713553738, time end 174883811524
2017-12-13 14:41:01.511 [  TRACE]:iptv-pcr: pcr: last 5713559892, time end 174883879902
2017-12-13 14:41:01.511 [  TRACE]:iptv-pcr: pcr: last 5713566046, time end 174883948280
2017-12-13 14:41:01.514 [  TRACE]:iptv-pcr: pcr: last 5713570303, time end 174883995580
2017-12-13 14:41:01.514 [  TRACE]:iptv-pcr: pcr: updated 5713313723, time start 174881144686, limit 5000000
2017-12-13 14:41:01.514 [  TRACE]:iptv-pcr: pcr: last 5713576463, time end 174884064024
2017-12-13 14:41:01.514 [  TRACE]:iptv-pcr: pcr: last 5713580251, time end 174884106113
2017-12-13 14:41:01.515 [  TRACE]:iptv-pcr: pcr: last 5713586405, time end 174884174491
2017-12-13 14:41:01.516 [  TRACE]:iptv-pcr: pcr: last 5713589716, time end 174884211280
2017-12-13 14:41:01.516 [  TRACE]:iptv-pcr: pcr: last 5713596346, time end 174884284947
2017-12-13 14:41:01.516 [  TRACE]:iptv-pcr: pcr: last 5713598720, time end 174884311324
2017-12-13 14:41:01.516 [  TRACE]:iptv-pcr: pcr: last 5713605819, time end 174884390202
2017-12-13 14:41:01.518 [  TRACE]:iptv-pcr: pcr: last 5713608661, time end 174884421780
2017-12-13 14:41:01.518 [  TRACE]:iptv-pcr: pcr: last 5713614815, time end 174884490158
2017-12-13 14:41:01.518 [  TRACE]:iptv-pcr: pcr: last 5713621445, time end 174884563824
2017-12-13 14:41:01.518 [  TRACE]:iptv-pcr: pcr: last 5713624763, time end 174884600691
2017-12-13 14:41:01.520 [  TRACE]:iptv-pcr: pcr: updated 5713314083, time start 174881148686, limit 5000000
2017-12-13 14:41:01.520 [  TRACE]:iptv-pcr: pcr: last 5713630910, time end 174884668991
2017-12-13 14:41:01.520 [  TRACE]:iptv-pcr: pcr: last 5713637540, time end 174884742658
2017-12-13 14:41:01.520 [  TRACE]:iptv-pcr: pcr: last 5713640852, time end 174884779458
2017-12-13 14:41:01.520 [  TRACE]:iptv-pcr: pcr: last 5713647482, time end 174884853124
2017-12-13 14:41:01.522 [  TRACE]:iptv-pcr: pcr: last 5713651270, time end 174884895213
2017-12-13 14:41:01.522 [  TRACE]:iptv-pcr: pcr: last 5713657430, time end 174884963658
2017-12-13 14:41:01.522 [  TRACE]:iptv-pcr: pcr: last 5713661211, time end 174885005669
2017-12-13 14:41:01.522 [  TRACE]:iptv-pcr: pcr: last 5713667379, time end 174885074202
2017-12-13 14:41:01.523 [  TRACE]:iptv-pcr: pcr: updated 5713314442, time start 174881152685, limit 5000000
2017-12-13 14:41:01.523 [  TRACE]:iptv-pcr: pcr: last 5713673526, time end 174885142512
2017-12-13 14:41:01.523 [  TRACE]:iptv-pcr: pcr: last 5713677313, time end 174885184590
2017-12-13 14:41:01.523 [  TRACE]:iptv-pcr: pcr: last 5713683467, time end 174885252968
2017-12-13 14:41:01.523 [  TRACE]:iptv-pcr: pcr: last 5713686303, time end 174885284479
2017-12-13 14:41:01.526 [  TRACE]:iptv-pcr: pcr: last 5713693409, time end 174885363435
2017-12-13 14:41:01.526 [  TRACE]:iptv-pcr: pcr: last 5713695775, time end 174885389723
2017-12-13 14:41:01.526 [  TRACE]:iptv-pcr: pcr: updated 5713314802, time start 174881156685, limit 5000000
2017-12-13 14:41:01.526 [  TRACE]:iptv-pcr: pcr: last 5713702405, time end 174885463390
2017-12-13 14:41:01.526 [  TRACE]:iptv-pcr: pcr: last 5713706193, time end 174885505479
2017-12-13 14:41:01.529 [  TRACE]:iptv-pcr: pcr: last 5713712353, time end 174885573923
2017-12-13 14:41:01.529 [  TRACE]:iptv-pcr: pcr: last 5713718507, time end 174885642301
2017-12-13 14:41:01.529 [  TRACE]:iptv-pcr: pcr: last 5713722288, time end 174885684312
2017-12-13 14:41:01.529 [  TRACE]:iptv-pcr: pcr: last 5713728442, time end 174885752690
2017-12-13 14:41:01.531 [  TRACE]:iptv-pcr: pcr: updated 5713315162, time start 174881160685, limit 5000000
2017-12-13 14:41:01.531 [  TRACE]:iptv-pcr: pcr: last 5713734603, time end 174885821146
2017-12-13 14:41:01.531 [  TRACE]:iptv-pcr: pcr: last 5713738390, time end 174885863223
2017-12-13 14:41:01.531 [  TRACE]:iptv-pcr: pcr: last 5713744544, time end 174885931601
2017-12-13 14:41:01.531 [  TRACE]:iptv-pcr: pcr: last 5713748332, time end 174885973690
2017-12-13 14:41:01.532 [  TRACE]:iptv-pcr: pcr: last 5713754486, time end 174886042068
2017-12-13 14:41:01.532 [  TRACE]:iptv-pcr: pcr: last 5713760647, time end 174886110523
2017-12-13 14:41:01.532 [  TRACE]:iptv-pcr: pcr: last 5713764427, time end 174886152523
2017-12-13 14:41:01.532 [  TRACE]:iptv-pcr: pcr: last 5713770581, time end 174886220901
2017-12-13 14:41:01.532 [  TRACE]:iptv-pcr: pcr: paused
2017-12-13 14:41:09.883 [   INFO]:subscription: 003D: "HTTP" unsubscribing, hostname="127.0.0.1", client="VLC/2.2.6 LibVLC/2.2.6" 
2017-12-13 14:41:09.883 [  DEBUG]:mpegts: test1-ts in IPTV-LOCAL - close PID fullmux subscription [0003/0x7fd49de1edf0]
2017-12-13 14:41:09.883 [  DEBUG]:mpegts: test1-ts in IPTV-LOCAL - stopping mux

Using the same TS file, streamed as RTP with a tool, and getting it from the multicast address I don't see any problem. So the problem seems to be the "PCR pause".

Can you help me to fix this problem?
Thank you!

#4

Updated by Jaroslav Kysela about 7 years ago

Something does not work, there's while loop in src/input/mpegts/iptv/iptv_file.c:

   while (!fp->shutdown && pause) {
      mono = mclk() + sec2mono(1);
      do {
        e = tvh_cond_timedwait(&fp->cond, &iptv_lock, mono);
        if (e == ETIMEDOUT)
          break;
      } while (ERRNO_AGAIN(e));
    }

This loop should end after one seconds (normally) and then new read data should be passed to iptv_input_recv_packets(). There's called iptv_input_pause_check() which should update PCR clocks.

#5

Updated by Mono Polimorph about 7 years ago

Jaroslav Kysela wrote:

Something does not work, there's while loop in src/input/mpegts/iptv/iptv_file.c:

[...]

This loop should end after one seconds (normally) and then new read data should be passed to iptv_input_recv_packets(). There's called iptv_input_pause_check() which should update PCR clocks.

I'll do another test. However, I feel something is wrong... it "scans" but doesn't "play".

Regards.

#6

Updated by Mono Polimorph about 7 years ago

Jaroslav Kysela wrote:

Something does not work

Hi Jaroslav,

Checking the differences between the thread_loop in "src/input/mpegts/iptv/iptv_file.c" and "src/input/mpegts/tsfile/tsfile_input.c" I see some differences. For example:

  • TSFile tries to get the PCR pid of the TS. I feel IPTVFile doesn't.
  • TSFile uses the generic "mpegts_input_recv_packets()" function to put the data in the buffer (like do the satip and hdhomerun modules). However, the IPTVFile uses the "iptv_input_recv_packets()" (like do the http module).

One thing that I noted after reviewing the code is that I'm using a MPTS (broadcast recording), and not a SPTS, as a input file. I feel the code is based on the assumption of one A/V stream with one PCR. You think that this can be the problem?

Regards!

#7

Updated by Jaroslav Kysela about 7 years ago

iptv_input_recv_packets() calls mpegts_input_recv_packets(); the problem is described in my commment number 4. The iptv_input_recv_packets() should be called after one second delay when the pause is activated.

#8

Updated by Mono Polimorph about 7 years ago

Hi Jaroslav,

I see that two different traces prints the same:

http://github.com/tvheadend/tvheadend/blob/3b232b66e02fc46f1e7e97efb5ef48c6968cf779/src/input/mpegts/iptv/iptv.c#L544

http://github.com/tvheadend/tvheadend/blob/3b232b66e02fc46f1e7e97efb5ef48c6968cf779/src/input/mpegts/iptv/iptv.c#L570

For a best debug, I suggest you change the first to "pcr: paused (pre-check)" and the second to "pcr: paused (post-check)".

Futhermore, I need to know (for fixing the problem) whats does this code between both checks. Please, can you explain what represents "pcr.pcr_first, pcr.pcr_last, im->im_pcr_start, im->im_pcr_end" ?

Thank you!

#9

Updated by Mono Polimorph about 7 years ago

Hi Jaroslav,

This is very annoying: I created another test file with all pids, but with only one program (removing all other pids of other programs: PMT and AV elementary streams, plus the NULL stuff). However, the problem continues: I can't play it because the "second" (post-check) is triggered.

Please, you have any idea why this refuses to play?

Futhermore, another trouble. In the configuration of the mux I set the value "Service ID:" to the SID of the program in the TS. However, when streaming I receive a complete PAT. This is normal?

#10

Updated by Jaroslav Kysela about 7 years ago

Mono Polimorph wrote:

Futhermore, I need to know (for fixing the problem) whats does this code between both checks. Please, can you explain what represents "pcr.pcr_first, pcr.pcr_last, im->im_pcr_start, im->im_pcr_end" ?

The pcr structure contains first and last PCR from the passed MPEG-TS data. The im_pcr_start+end represents PCR times for already sent data to input. Thus end-start means the total queued time.

#11

Updated by Jaroslav Kysela about 7 years ago

Mono Polimorph wrote:

Futhermore, another trouble. In the configuration of the mux I set the value "Service ID:" to the SID of the program in the TS. However, when streaming I receive a complete PAT. This is normal?

You probably do not use the correct profile. If rewrite PAT is set it, the PAT is completely replaced.

#12

Updated by Mono Polimorph about 7 years ago

Jaroslav Kysela wrote:

Mono Polimorph wrote:

Futhermore, another trouble. In the configuration of the mux I set the value "Service ID:" to the SID of the program in the TS. However, when streaming I receive a complete PAT. This is normal?

You probably do not use the correct profile. If rewrite PAT is set it, the PAT is completely replaced.

Hi,

As I use only pure TS streams, and HTTP+SAT>IP outputs for the IPTV-File input, I only have enabled the "pass" profile. Futhermore, as I know profiles aren't used in this scenario. It's this true?

#13

Updated by Mono Polimorph about 7 years ago

Jaroslav Kysela wrote:

Mono Polimorph wrote:

Futhermore, I need to know (for fixing the problem) whats does this code between both checks. Please, can you explain what represents "pcr.pcr_first, pcr.pcr_last, im->im_pcr_start, im->im_pcr_end" ?

The pcr structure contains first and last PCR from the passed MPEG-TS data. The im_pcr_start+end represents PCR times for already sent data to input. Thus end-start means the total queued time.

OK. Thank you for the clarification. So, "pcr" pointer is for "output" and "im" for input. Right?

#14

Updated by Jaroslav Kysela almost 7 years ago

  • Subject changed from TS-FILE not save config to PCR issue for IPTV
#15

Updated by Pablo R. almost 7 years ago

Mono Polimorph wrote:

Hi,

I discovered the cause why the TS-FILE config isn't stored in the configuration: the function iptv_mux_config_save() is empty

- TS-FILE: https://github.com/tvheadend/tvheadend/blob/817f67e7b5d54a05d04ec2766ba1487a58337e1c/src/input/mpegts/tsfile/tsfile_mux.c#L50

- IPTV:
https://github.com/tvheadend/tvheadend/blob/186248a148da191e7d9f917573bb358118b15566/src/input/mpegts/iptv/iptv_mux.c#L285

We need this enabled for saving the SAT>IP frequency when applying #4784.
I feel this function isn't fully implemented because the TS-FILE is only enabled (at time) using the command-line. However, until this input will be enhanced, a simple map like TSFILE1, TSFILE2, etc. based on the apperance order in the commandline will be sufficient.

You agree?

About that 2 lines that commented, one has *mm and other *m.
The rest is the same. Can it be the reason for the problem?

P.S.: I am not a programmer, I say it in case you have not seen it and that was the problem.

Regards.

#16

Updated by Jaroslav Kysela almost 7 years ago

Tsfile is for debugging only. It's was not intended to be used for regular things.

#17

Updated by Jaroslav Kysela almost 7 years ago

  • Status changed from New to Invalid

Also available in: Atom PDF