Commit graph

45 commits

Author SHA1 Message Date
Sebastian Dröge 211cd095d6 Add new mux subdirectory for container formats
Contains the (incomplete) flavors FLV demuxer and the fragmented MP4
muxer for now.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/173
2022-10-23 20:25:08 +03:00
François Laignel 6319d104a8 Take advantage of Into<Option<_>> args
Commit 24b7cfc8 applied changes related to nullability as declared
by gir. One consequence was that some functions signature ended up
requiring users to pass `Some(val)` when they could use `val`
before.

This commit applies changes on `gstreamer-rs` which, will honoring
the nullability stil allow users to pass `val` for the few affected
functions.

This commit also fixes the signature for `Element::request_new_pad`
which was updated upstream.
2022-10-21 11:54:24 +02:00
Sebastian Dröge 24b7cfc841 Update for GStreamer API changes 2022-10-18 19:26:52 +03:00
François Laignel 8011eadfd2 Use new format constructors
See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1128
2022-10-18 10:36:59 +00:00
Sebastian Dröge 7ee4afacf4 Change *Impl trait methods to only take &self and not Self::Type in addition 2022-10-10 15:03:25 +03:00
Sebastian Dröge 9b85dcc03b fmp4mux: Drop GAP buffers before doing ONVIF UTC time re-timestamping
GAP buffers won't have the reference timestamp meta.
2022-10-02 09:27:50 +00:00
Sebastian Dröge 36ce8bd4f7 fmp4mux: Implement a better strategy for splitting fragments and deciding which buffers go into which fragment
It is now guaranteed that each fragment is at most fragment-duration
long unless the one and only GOP of the fragment is longer than that.
The first (non-EOS) stream determines the duration of each fragment and
all other streams are drained to at most the fragment end timestamp
determined this way.

In addition the next fragment's target time is now at the end of the
previous fragment plus fragment-duration instead of using
  first-fragment + N*fragment-duration
regardless of where fragments were split before.

That is, fmp4mux now uses the same strategy as used by splitmuxsink and
as is required e.g. by HLS with regards to the target duration.
2022-10-02 09:27:50 +00:00
Sebastian Dröge b63627025e fmp4mux: Split huge drain function into separate functions 2022-09-29 10:40:41 +03:00
Sebastian Dröge 7e13ea4ba9 fmp4mux: Drop gap buffers before further processing
They would potentially change timestamps and will break in ONVIF mode.
2022-09-16 14:54:33 +03:00
Sebastian Dröge 1a40186485 Update for GLib ParamSpec builder API changes 2022-09-05 11:45:47 +03:00
Mathieu Duponchelle 052092cd2e onvifmetadata: removing encoding field
The encoding of ONVIF metadata is always UTF-8. ONVIF metadata may
or may not be encoded with gzip, but we don't see a use case for
transporting compressed ONVIF metadata between elements for now.
2022-08-24 08:57:12 +00:00
Vivia Nikolaidou 5606111345 plugins: Simplify code using ParamSpecBuilder 2022-08-22 17:58:43 +03:00
Sebastian Dröge 84f6484140 fmp4mux: Consider invalid running times as zero and before anything else
The code tried to do this before but didn't consider the case where the
first pad has a valid running time, in which case the buffer with the
invalid running time would never be dequeued and the muxer would never
output anything.
2022-08-22 15:20:10 +03:00
Sebastian Dröge 2c99f66ea5 fmp4mux: Dequeue the earliest buffer from any pad first instead of dequeueing up to a whole fragment from the same pad
This keeps the fill levels of each sinkpad in sync.
2022-08-17 19:23:18 +03:00
Sebastian Dröge b464e74d41 fmp4mux: Require parsed ONVIF timed metadata 2022-08-12 18:51:26 +03:00
Sebastian Dröge e4081872c5 fmp4mux: Use UTC times from reference timestamp meta in ONVIF mode 2022-08-12 18:51:26 +03:00
Sebastian Dröge 5376596557 fmp4mux: Write ONVIF Export File Format CorrectStartTime box for ONVIF variant 2022-08-12 18:51:06 +03:00
François Laignel 18f85a1543 generic/fmp4: use opt_ops 2022-07-20 15:56:04 +00:00
François Laignel 6a2df92453 Revert "fmp4mux: Dequeue as many buffers as are available in each aggregate call"
This reverts commit 402500f79c.

This commit introduces race conditions. It was intended as solving
an issue with some pipelines which had their queues filling up,
causing the streams to stall. It is reverted as this solution is
considered a workaround for another issue.

See discussion in:

https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/803
2022-07-20 15:56:04 +00:00
François Laignel 44b05b4285 generic/fmp4: update Signed return type
See: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1068
2022-07-19 15:40:43 +02:00
François Laignel 5c5c15d36a Simplify Formatted value handling
See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1059
2022-07-11 21:21:54 +02:00
Sebastian Dröge 8e90abfebb fmp4mux: Handle PTS<segment.start when requesting keyframes 2022-06-30 16:51:03 +03:00
Sebastian Dröge e52d1fa317 fmp4mux: Ensure that DTS (or PTS for intra-only streams) are monotonically increasing 2022-06-30 16:51:03 +03:00
Sebastian Dröge 402500f79c fmp4mux: Dequeue as many buffers as are available in each aggregate call 2022-06-30 16:51:03 +03:00
Sebastian Dröge 7e2cf613b4 fmp4mux: Add debug output for each fragment's start PTS 2022-06-30 16:51:03 +03:00
Sebastian Dröge 3d7a38f7d4 fmp4mux: Fix draining if there are no GOPs for a stream 2022-06-30 16:51:03 +03:00
Sebastian Dröge a1553a8411 fmp4mux: Fix some clippy warnings 2022-06-30 16:51:03 +03:00
Sebastian Dröge 191a48ca41 fmp4mux: Write header as late as possible
Especially do it only after the initial fragment's information are all
known.
2022-06-30 16:51:03 +03:00
Sebastian Dröge 4ef0e26762 fmp4mux: Refactor timestamp handling for writing out data
Pass less data around and calculate the values we need to work with
earlier.
2022-06-30 16:50:59 +03:00
Sebastian Dröge d6fa921822 fmp4mux: Use saturing_sub() in more places
On unclean input, PTS/DTS might go backwards a bit and in those cases
calculate a duration of 0 instead of panicking.
2022-05-20 15:03:06 +03:00
Sebastian Dröge 6bca5a9962 fmp4mux: Implement interleaving based on start timestamps instead of accumulated durations
Durations might accumulate rounding errors and streams might not
actually start at the same time. For that reason also start with the
stream that has the lowest timestamp.
2022-05-20 15:03:06 +03:00
Sebastian Dröge d7bd4c1c93 fmp4mux: Implement handling of GAP events 2022-05-20 15:03:04 +03:00
Sebastian Dröge 987e4efc02 fmp4mux: In live pipelines use the current fragment end time as timeout
This allows muxing even if some streams are sparse or have big gaps.
2022-05-20 15:02:46 +03:00
Sebastian Dröge ffea0e2d2d fmp4mux: Add support for ONVIF timed XML metadata 2022-05-19 17:55:07 +03:00
Sebastian Dröge e4634ca2fe fmp4mux: Add ONVIF variant with support for additional codecs
This variant supports H264/5, JPEG, alaw, mulaw and G726.
2022-05-19 17:55:07 +03:00
Sebastian Dröge 4bc0ae09fa fmp4mux: Use saturing subtraction to calculate sample durations
PTS/DTS might go backwards if the input is borderline broken but that
shouldn't cause a panic.
2022-05-13 10:54:23 +00:00
Sebastian Dröge e06665b92d fmp4mux: Add support for multiple input streams 2022-05-12 18:31:02 +03:00
Sebastian Dröge 31a32a7e2e fmp4mux: Add support for writing out multiple tracks in the serialization code
Not yet exposed from the element.
2022-05-12 18:31:02 +03:00
Sebastian Dröge c09b7b9e41 fmp4mux: Port to aggregator as base class as preparation for supporting multiple streams 2022-05-12 18:31:02 +03:00
Julien Vary f908cbaffd fmp4mux: adding headers when data resumes after EOS 2022-04-28 11:39:55 -04:00
François Laignel 422ea740ca Update to gst::_log_macro_
See the details:
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/980
2022-02-21 20:50:01 +01:00
Sebastian Dröge 65fcd55160 Update for event/message/query view API changes 2022-01-19 15:07:45 +02:00
Sebastian Dröge 81f5f0f60c Fix various clippy warnings 2022-01-12 19:51:08 +02:00
Sebastian Dröge 55aad51141 Update for glib constructor renames
See https://github.com/gtk-rs/gtk-rs-core/pull/384
2021-11-20 14:31:06 +02:00
Sebastian Dröge e3fbf2078d Add new fmp4 plugin with muxers for ISO fragmented MP4, DASH and CMAF containers 2021-11-15 14:04:03 +02:00