1. 12 Dec, 2019 1 commit
  2. 19 Sep, 2019 1 commit
  3. 18 Sep, 2019 1 commit
  4. 03 Sep, 2019 1 commit
  5. 31 Aug, 2019 1 commit
  6. 12 Jul, 2019 1 commit
    • Marton Balint's avatar
      avformat/mpegts: respect program number when merging streams · 81d3d7dd
      Marton Balint authored
      merge_pmt_versions was not usable if multiple programs were present because
      when it was searching for candidate streams it did not make sure that the PMT was
      of the same program. This caused the streams of all programs to get merged into
      a single (garbled) program.
      
      This patch makes sure that the program number (service ID) is also matching
      with the old streams when parsing the PMT making the feature useful for multi
      program streams.
      
      This change might cause issues for single program streams if the program number
      changes, but I think it is acceptable because the goal of the option is to make
      the parsing resilient to PID changes, and that is still working as expected.
      Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
      81d3d7dd
  7. 21 Mar, 2019 1 commit
  8. 09 Mar, 2019 2 commits
  9. 13 Feb, 2019 2 commits
  10. 10 Feb, 2019 1 commit
    • Jan Ekström's avatar
      lavf/mpegts: add reading of ARIB data coding descriptor · a03885b7
      Jan Ekström authored
      This enables us to read the data coding type utilized for
      a specific private data stream, of which we currently are
      interested in ARIB caption streams.
      
      The component tag limitations are according to ARIB TR-B14,
      and the component IDs are defined in ARIB STD-B10.
      a03885b7
  11. 09 Feb, 2019 1 commit
  12. 04 Feb, 2019 1 commit
    • Marton Balint's avatar
      avformat/mpegts: cache PID discard values · 56c58b99
      Marton Balint authored
      discard_pid can be quite expensive, so let's cache it and recalculate it on
      every packet start.
      
      ffmpeg -y -i samples/MPEG-VOB/sdtv/RAI.ts -c copy -map 0:v:0 -map 0:a:0 -f mpegts /dev/null
      
      Before:
         1685 decicycles in handle_packet,  523483 runs,    805 skips
      
      After:
          883 decicycles in handle_packet,  523505 runs,    783 skips
      Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
      56c58b99
  13. 22 Dec, 2018 1 commit
    • Jan Ekström's avatar
      avformat/mpegts: unset DTS/PTS for subtitle PES packets if PCR not available · a1b4f120
      Jan Ekström authored
      Fixes issues when a subtitle packet is received before PCR for the
      program has been received, leading to wildly jumping timestamps
      on the lavf client side as well as in the re-ordering logic.
      
      This usually happens in case of multiplexes where the PCR of a
      program is not taken into account with subtitle tracks' DTS/PTS.
      a1b4f120
  14. 19 Dec, 2018 1 commit
  15. 25 Aug, 2018 1 commit
  16. 18 Jun, 2018 1 commit
    • Aman Gupta's avatar
      avformat/mpegts: parse large PMTs with multiple tables · cd86c5db
      Aman Gupta authored
      In 9152c1e4, the mpegts parser was taught how to parse
      PMT sections which contained multiple tables. That commit
      fixed parsing of PMT packets from some cable providers,
      which included a special SCTE table (0xc0) before the
      standard program map table (0x2).
      
      Sometimes, however, the combined 0xc0 and 0x2 tables are
      larger than a single TS packet (188 bytes). The mpegts parser
      already attempts to parse sections which span multiple packets,
      but still assumed that the split section only contained one
      table.
      
      This patch fixes parsing of such a sample[1].
      
      Before:
      
          Input #0, mpegts, from 'combined-pmt-tids-split.ts':
            Duration: 00:00:01.26, start: 39188.931756, bitrate: 597 kb/s
            Program 1
            No Program
              Stream #0:0[0xeff]: Audio: ac3, 48000 Hz, mono, fltp, 64 kb/s
              Stream #0:1[0xefd]: Audio: mp3, 0 channels, fltp
              Stream #0:2[0xefe]: Unknown: none
      
      After:
      
          Input #0, mpegts, from 'combined-pmt-tids-split.ts':
            Duration: 00:00:01.27, start: 39188.931756, bitrate: 589 kb/s
            Program 1
              Stream #0:0[0xefd]: Video: h264 ([27][0][0][0] / 0x001B), none, 59.94 fps, 59.94 tbr, 90k tbn, 180k tbc
              Stream #0:1[0xefe](eng): Audio: ac3 ([129][0][0][0] / 0x0081), 48000 Hz, stereo, fltp, 384 kb/s
              Stream #0:2[0xeff](spa): Audio: ac3 ([129][0][0][0] / 0x0081), 48000 Hz, mono, fltp, 64 kb/s
              Stream #0:3[0xf00]: Data: scte_35
              Stream #0:4[0xf01]: Unknown: none (ETV1 / 0x31565445)
              Stream #0:5[0xf02]: Unknown: none (ETV1 / 0x31565445)
              Stream #0:6[0xf03]: Unknown: none ([192][0][0][0] / 0x00C0)
      
      With the patch, the PMT is parsed correctly so the streams are
      created in the correct order, are associated with "Program 1",
      and their codecs are set correctly.
      
      [1] https://s3.amazonaws.com/tmm1/combined-pmt-tids-split.tsSigned-off-by: 's avatarAman Gupta <aman@tmm1.net>
      Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
      cd86c5db
  17. 21 May, 2018 2 commits
  18. 19 May, 2018 2 commits
    • Aman Gupta's avatar
      avformat/mpegts: add merge_pmt_versions option · 16b4f97b
      Aman Gupta authored
      This new optional flag makes it easier to deal with mpegts
      samples where the PMT is updated and elementary streams move
      to different PIDs in the middle of playback.
      
      Previously, new AVStreams were created per PID, and it was up
      to the user to figure out which streams had migrated to a new PID
      (by iterating over the list of AVProgram and making guesses), and
      switch seamlessly to the new AVStream during playback.
      
      Transcoding or remuxing these streams with ffmpeg on the CLI was
      also quite painful, and the user would need to extract each set
      of PIDs into a separate file and then stitch them back together.
      
      With this new option, the mpegts demuxer will automatically detect
      PMT changes and feed data from the new PID to the original AVStream
      that was created for the orignal PID. For mpegts samples with
      stream_identifier_descriptor available, the unique ID is used to
      merge PIDs together. If the stream id is not available, the demuxer
      attempts to map PIDs based on their position within the PMT.
      
      With this change, I am able to playback and transcode/remux these
      two samples which previously caused issues:
      
          https://tmm1.s3.amazonaws.com/pmt-version-change.ts
          https://kuroko.fushizen.eu/videos/pid_switch_sample.ts
      
      I also have another longer sample in which the PMT changes
      repeatedly and ES streams move to different pids three times
      during playback:
      
          https://tmm1.s3.amazonaws.com/multiple-pmt-change.ts
      
      Demuxing this sample with the new option shows several new log
      messages as the PMT changes are handled:
      
          [mpegts] detected PMT change (program=1, version=3/6, pcr_pid=0xf98/0xfb7)
          [mpegts] re-using existing video stream 0 (pid=0xf98) for new pid=0xfb7
          [mpegts] re-using existing audio stream 1 (pid=0xf99) for new pid=0xfb8
          [mpegts] re-using existing audio stream 2 (pid=0xf9a) for new pid=0xfb9
          [mpegts] detected PMT change (program=1, version=6/3, pcr_pid=0xfb7/0xf98)
          [mpegts] detected PMT change (program=1, version=3/4, pcr_pid=0xf98/0xf9b)
          [mpegts] re-using existing video stream 0 (pid=0xf98) for new pid=0xf9b
          [mpegts] re-using existing audio stream 1 (pid=0xf99) for new pid=0xf9c
          [mpegts] re-using existing audio stream 2 (pid=0xf9a) for new pid=0xf9d
          [mpegts] detected PMT change (program=1, version=4/5, pcr_pid=0xf9b/0xfa9)
          [mpegts] re-using existing video stream 0 (pid=0xf98) for new pid=0xfa9
          [mpegts] re-using existing audio stream 1 (pid=0xf99) for new pid=0xfaa
          [mpegts] re-using existing audio stream 2 (pid=0xf9a) for new pid=0xfab
          [mpegts] detected PMT change (program=1, version=5/6, pcr_pid=0xfa9/0xfb7)
      Signed-off-by: 's avatarAman Gupta <aman@tmm1.net>
      16b4f97b
    • Aman Gupta's avatar
      avformat/mpegts: keep track of PMT details in AVProgram/AVStream · 24579bf5
      Aman Gupta authored
      With these fields, the user has enough information to
      detect PMT changes and switch to new streams when the PMT
      is updated with new ES pids.
      
      To do so, the user would monitor the AVProgram they're interested
      in for changes to pmt_version. If the version changes, they would
      iterate over the program's streams to find new streams added with
      the updated version number.
      
      If new versions of streams are found, then the user would first try
      to replace existing streams where stream_identifier matched.
      If stream_identifier is not available, then the user would compare
      pmt_stream_idx instead to replace the stream that was previously
      at the same position within the PMT.
      Signed-off-by: 's avatarAman Gupta <aman@tmm1.net>
      24579bf5
  19. 18 May, 2018 1 commit
    • Aman Gupta's avatar
      avformat/mpegts: add skip_unknown_pmt option · e24d768a
      Aman Gupta authored
      Some filtered mpegts streams may erroneously include PMTs for
      programs that are not advertised in the PAT. This confuses ffmpeg
      and most players because multiple audio/video streams are created
      and it is unclear which ones actually contain data.
      
      See for example https://tmm1.s3.amazonaws.com/unknown-pmts.ts
      
      In this sample, the PAT advertises exactly one program. But the
      pid it points to for the program's PMT contains PMTs for other
      programs as well. This is because the broadcaster decided to
      re-use the same pid for multiple program PMTs.
      
      The hardware that filtered the original multi-program stream
      into a single-program stream did so by rewriting the PAT to
      contain only the program that was requested. But since it just
      passed through the PMT pid referenced in the PAT, multiple PMTs
      are still present for the other programs.
      
      Before:
      
          Input #0, mpegts, from 'unknown-pmts.ts':
            Duration: 00:00:10.11, start: 80741.189700, bitrate: 9655 kb/s
            Program 4
              Stream #0:2[0x41]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], Closed Captions, 11063 kb/s, 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
              Stream #0:3[0x44](eng): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
              Stream #0:4[0x45](spa): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 128 kb/s
            No Program
              Stream #0:0[0x31]: Video: mpeg2video ([2][0][0][0] / 0x0002), none(tv), 90k tbr, 90k tbn, 90k tbc
              Stream #0:1[0x34](eng): Audio: ac3 (AC-3 / 0x332D4341), 0 channels, fltp
              Stream #0:5[0x51]: Video: mpeg2video ([2][0][0][0] / 0x0002), none, 90k tbr, 90k tbn
              Stream #0:6[0x54](eng): Audio: ac3 (AC-3 / 0x332D4341), 0 channels
      
      With skip_unknown_pmt=1:
      
          Input #0, mpegts, from 'unknown-pmts.ts':
            Duration: 00:00:10.11, start: 80741.189700, bitrate: 9655 kb/s
            Program 4
              Stream #0:0[0x41]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], Closed Captions, 11063 kb/s, 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
              Stream #0:1[0x44](eng): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
              Stream #0:2[0x45](spa): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 128 kb/s
      Signed-off-by: 's avatarAman Gupta <aman@tmm1.net>
      e24d768a
  20. 17 May, 2018 1 commit
  21. 15 May, 2018 1 commit
  22. 14 May, 2018 1 commit
  23. 12 May, 2018 2 commits
    • Aman Gupta's avatar
      avformat/mpegts: reindent after last change · 7db022e6
      Aman Gupta authored
      Signed-off-by: 's avatarAman Gupta <aman@tmm1.net>
      7db022e6
    • Aman Gupta's avatar
      avformat/mpegts: parse sections with multiple tables · 9152c1e4
      Aman Gupta authored
      Fixes PMT parsing in some mpegts streams which contain
      multiple tables within the PMT pid. Previously, the parser
      assumed only one table was present in each packet, and discarded
      the rest of the section data after attempting to parse the first
      table.
      
      A similar issue was documented in the BeyondTV software[1], which
      helped me diagnose the same bug in the ffmpeg mpegts demuxer. I also
      tried DVBInspector, libdvbpsi's dvbinfo, and tstools' tsinfo to
      help debug. The former two properly read PMTs with multiple tables,
      whereas the last has the same bug as ffmpeg.
      
      I've created a minimal sample[2] which contains the combined PMT.
      Here's what ffmpeg probe shows before and after this patch:
      
      Before:
      
          Input #0, mpegts, from 'combined-pmt-tids.ts':
            Duration: 00:00:01.08, start: 4932.966167, bitrate: 741 kb/s
            Program 1
            No Program
              Stream #0:0[0xf9d]: Audio: ac3, 48000 Hz, mono, fltp, 96 kb/s
              Stream #0:1[0xf9b]: Audio: mp3, 0 channels, fltp
              Stream #0:2[0xf9c]: Unknown: none
      
      After:
      
          Input #0, mpegts, from 'combined-pmt-tids.ts':
            Duration: 00:00:01.11, start: 4932.966167, bitrate: 718 kb/s
            Program 1
              Stream #0:0[0xf9b]: Video: mpeg2video ([2][0][0][0] / 0x0002), none(tv, top first), 29.97 fps, 29.97 tbr, 90k tbn, 90k tbc
              Stream #0:1[0xf9c](eng): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
              Stream #0:2[0xf9d](spa): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, mono, fltp, 96 kb/s
      
      With the patch, the PMT is parsed correctly so the streams are
      created in the correct order, are associated with "Program 1",
      and their codecs are set correctly.
      
      [1] http://forums.snapstream.com/vb/showpost.php?p=343816&postcount=201
      [2] https://s3.amazonaws.com/tmm1/combined-pmt-tids.tsSigned-off-by: 's avatarAman Gupta <aman@tmm1.net>
      Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
      9152c1e4
  24. 09 May, 2018 3 commits
  25. 26 Apr, 2018 1 commit
  26. 23 Feb, 2018 2 commits
  27. 14 Dec, 2017 1 commit
  28. 20 Sep, 2017 1 commit
  29. 07 Jun, 2017 1 commit
  30. 12 Feb, 2017 1 commit
  31. 07 Feb, 2017 1 commit
  32. 24 Nov, 2016 1 commit