1. 07 Aug, 2019 19 commits
  2. 06 Aug, 2019 5 commits
    • Mathieu Duponchelle's avatar
      rtspsrc: expose and implement is-live property · 5c7423d7
      Mathieu Duponchelle authored
      This is useful to support the ONVIF case: when is-live is set to
      FALSE and onvif-rate-control is no, the client can control the
      rate of delivery and arrange for the server to block and still
      keep sending when unblocked, without requiring back and forth
      PAUSE / PLAY requests. This enables, amongst other things, fast
      frame stepping on the client side.
      
      When is-live is FALSE, we don't use a manager at all. This case
      was actually already pretty well handled by the current code. The
      standard manager, rtpbin, is simply no longer needed in this case.
      
      Applications can instantiate a downloadbuffer after rtspsrc if
      needed.
      5c7423d7
    • Mathieu Duponchelle's avatar
      75f53631
    • Mathieu Duponchelle's avatar
      rtspsrc: expose and implement onvif-mode property · 5f1a732b
      Mathieu Duponchelle authored
      Refactor the code for parsing and generating the Range, taking
      advantage of existing API in GstRtspTimeRange.
      
      Only use the TCP protocol in that mode, as per the specification.
      
      Generate an accurate segment when in that mode, and signal to the
      depayloader that it should not generate its own segment, through
      the "onvif-mode" field in the caps, see
      <gstreamer/gst-plugins-base!328>
      for more information.
      
      Translate trickmode seek flags to their ONVIF representation
      
      Expose an onvif-rate-control property
      5f1a732b
    • Mathieu Duponchelle's avatar
      544f8fec
    • Mathieu Duponchelle's avatar
      rtpfunnel: forward correct segment when switching pad · e18d5d6e
      Mathieu Duponchelle authored
      Forwarding a single segment event from the pad that first gets
      chained is incorrect: when that first event was sent by an element
      such as x264enc, with its offset start, we end pushing out of segment
      buffers for the other pad(s).
      
      Instead, everytime the active pad changes, forward the appropriate
      segment event.
      
      Fixes gstreamer/gst-plugins-bad#1028
      e18d5d6e
  3. 05 Aug, 2019 1 commit
  4. 02 Aug, 2019 5 commits
    • Antonio Ospite's avatar
      rtpsource: fix receiver source stats to consider previously queued packets · ae48646d
      Antonio Ospite authored
      When it is not clear yet if a packet relative to a source should be
      pushed, the packet is put into a queue, this happens in two cases:
      
        - the source is still in probation;
        - there is a large jump in seqnum, and it is not clear what
          the cause is, future packets will help making a guess.
      
      In either case stats about received packets are not updated at all; and
      even if they were, when init_seq() is called it resets all receiver
      stats, effectively loosing any possible stat about previously received
      packets.
      
      Fix this by taking into account the queued packets and update the stats
      when calling init_seq().
      ae48646d
    • Antonio Ospite's avatar
      rtpsource: clarify meaning of the octets-sent and octets-received stats · cf0ffd86
      Antonio Ospite authored
      The octets-send and octets-received stats count the payload bytes
      excluding RTP and lower level headers, clarify that in the
      documentation.
      cf0ffd86
    • Antonio Ospite's avatar
      rtpsource: expose field bytes_received in RTPSourceStats · 82199424
      Antonio Ospite authored
      Since commit c971d1a9 (rtpsource: refactor bitrate estimation,
      2010-03-02) bytes_received filed in RTPSourceStats is set but then never
      used again, expose it so that it can be used  by user code to verify how
      many bytes have been received.
      82199424
    • Antonio Ospite's avatar
      rtpmanager: consider UDP and IP headers in bandwidth calculation · 9d800cad
      Antonio Ospite authored
      According to RFC3550 lower-level headers should be considered for
      bandwidth calculation.
      
      See https://tools.ietf.org/html/rfc3550#section-6.2 paragraph 4:
      
        Bandwidth calculations for control and data traffic include
        lower-layer transport and network protocols (e.g., UDP and IP) since
        that is what the resource reservation system would need to know.
      
      Fix the source data to accommodate that.
      
      Assume UDPv4 over IP for now, this is a simplification but it's good
      enough for now.
      
      While at it define a constant and use that instead of a magic number.
      
      NOTE: this change basically reverts the logic of commit 529f443a
      (rtpsource: use payload size to estimate bitrate, 2010-03-02)
      9d800cad
    • Seungha Yang's avatar
      qtdemux: Use empty-array safe way to cleanup GPtrArray · 4146dc90
      Seungha Yang authored
      Fix assertion fail
      GLib-CRITICAL **: g_ptr_array_remove_range: assertion 'index_ < rarray->len' failed
      4146dc90
  5. 01 Aug, 2019 1 commit
    • Marc Leeman's avatar
      rtpmp4vpay: config-interval -1 send at idr · d365c4fd
      Marc Leeman authored
      adjust/port from rtph264pay and allow sending the configuration data at
      every IDR
      
      The payloader was stripping the configuration data when the
      config-interval was set to 0. The code was written in such a way !(a >
      0) that it stripped the config when it was set at -1 (send config_data
      as soon as possible).
      
      This resulted in some MPEG4 streams where no GOP/VOP-I was detected to
      be sent out without configuration.
      d365c4fd
  6. 27 Jul, 2019 1 commit
  7. 26 Jul, 2019 3 commits
    • Guillaume Desmottes's avatar
      gtkglsink: fix crash when widget is resized after element destruction · 5c4292b0
      Guillaume Desmottes authored
      Prevent _size_changed_cb() to be called after gtkglsink has been finalized.
      
      Fix #632
      5c4292b0
    • Mathieu Duponchelle's avatar
      qtdemux: fix reverse playback EOS conditions · 4830bbe6
      Mathieu Duponchelle authored
      In reverse playback, we don't want to rely on the position of the current
      keyframe to decide a stream is EOS: the last GOP we push will start with
      a keyframe, which position is likely to be outside of the segment.
      
      Instead, let the normal seek_to_previous_keyframe mechanism do its job,
      it works just fine.
      4830bbe6
    • Mathieu Duponchelle's avatar
      qtdemux: fix key unit seek corner case · 104f4592
      Mathieu Duponchelle authored
      If a key unit seek is performed with a time position that matches
      the offset of a keyframe, but not its actual PTS, we need to
      adjust the segment nevertheless.
      
      For example consider the following case:
      
      * stream starts with a keyframe at 0 nanosecond, lasting 40 milliseconds
      * user does a key unit seek at 20 milliseconds
      * we don't adjust the segment as the time position is "over" a keyframe
      * we push a segment that starts at 20 milliseconds
      * we push a buffer with PTS == 0
      * an element downstream (eg rtponviftimestamp) tries to calculate the
        stream time of the buffer, fails to do so and drops it
      104f4592
  8. 25 Jul, 2019 1 commit
  9. 22 Jul, 2019 1 commit
  10. 18 Jul, 2019 1 commit
  11. 17 Jul, 2019 1 commit
  12. 15 Jul, 2019 1 commit