1. 08 Dec, 2018 1 commit
  2. 05 Dec, 2018 1 commit
  3. 04 Dec, 2018 1 commit
    • Gyan Doshi's avatar
      doc: libgme · aae7e009
      Gyan Doshi authored
      Add entry in external library list and add details to demuxer entry.
      aae7e009
  4. 07 Aug, 2018 2 commits
  5. 19 May, 2018 1 commit
    • 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
  6. 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
  7. 14 Jan, 2018 1 commit
  8. 26 Dec, 2017 1 commit
    • Aman Gupta's avatar
      avformat/hls: enable http_multiple only for http/1.1 servers · 1dd82ede
      Aman Gupta authored
      Some http/1.0 implementations, like python's SimpleHTTPServer, can only support one client connection at a time. Making a second request while the first is still connected leads to a deadlock.
      
      This change enables multiple connections for http/1.1 servers only, which need to support keepalive by default and should have no problem with concurrent requests.
      Signed-off-by: 's avatarAman Gupta <aman@tmm1.net>
      1dd82ede
  9. 22 Dec, 2017 2 commits
    • Aman Gupta's avatar
      avformat/hls: add http_multiple option · 1f0eaa02
      Aman Gupta authored
      This improves network throughput of the hls demuxer by avoiding
      the latency introduced by downloading segments one at a time.
      
      The problem is particularly noticable over high-latency network
      connections: for instance, if RTT is 250ms, there will a 250ms idle
      period between when one segment response is read and the next one
      starts.
      
      The obvious solution to this is to use HTTP pipelining, where a
      second request can be sent (on the persistent http/1.1 connection)
      before the first response is fully read. Unfortunately the way the
      http protocol is implemented in avformat makes implementing pipleining
      very complex.
      
      Instead, this commit simulates pipelining using two separate persistent
      http connections. This has the advantage of working independently of
      the http_persistent option, and can be used with http/1.0 servers as
      well. The pair of connections is swapped every time a new segment starts
      downloading, and a request for the next segment is sent on the secondary
      connection right away. This means the second response will be ready and
      waiting by the time the current response is fully read.
      Signed-off-by: 's avatarAman Gupta <aman@tmm1.net>
      Signed-off-by: 's avatarAnssi Hannula <anssi.hannula@iki.fi>
      1f0eaa02
    • Aman Gupta's avatar
      avformat/hls: add http_persistent option · b7d6c0cd
      Aman Gupta authored
      This teaches the HLS demuxer to use the HTTP protocols
      multiple_requests=1 option, to take advantage of "Connection:
      Keep-Alive" when downloading playlists and segments from the HLS server.
      
      With the new option, you can avoid TCP connection and TLS negotiation
      overhead, which is particularly beneficial when streaming via a
      high-latency internet connection.
      
      Similar to the http_persistent option recently implemented in hlsenc.c
      Signed-off-by: 's avatarAman Gupta <aman@tmm1.net>
      Signed-off-by: 's avatarAnssi Hannula <anssi.hannula@iki.fi>
      b7d6c0cd
  10. 27 Aug, 2017 1 commit
  11. 11 Feb, 2017 1 commit
  12. 26 Dec, 2016 1 commit
  13. 13 Oct, 2016 1 commit
  14. 11 Oct, 2016 1 commit
  15. 21 Jul, 2016 1 commit
  16. 13 Apr, 2016 1 commit
  17. 10 Mar, 2016 1 commit
  18. 03 Feb, 2016 1 commit
  19. 24 Jan, 2016 1 commit
  20. 22 Jan, 2016 1 commit
  21. 02 Dec, 2015 1 commit
  22. 24 Nov, 2015 1 commit
  23. 21 Aug, 2015 1 commit
  24. 14 Aug, 2015 2 commits
  25. 16 Jul, 2015 3 commits
  26. 29 May, 2015 1 commit
  27. 12 May, 2015 1 commit
  28. 29 Mar, 2015 1 commit
  29. 25 Nov, 2014 1 commit
  30. 03 Sep, 2014 1 commit
  31. 29 Apr, 2014 1 commit
  32. 22 Apr, 2014 1 commit
  33. 12 Apr, 2014 1 commit
  34. 23 Mar, 2014 1 commit
  35. 06 Mar, 2014 1 commit