Commit graph

306 commits

Author SHA1 Message Date
Havard Graff
bcbb8fc1da flvdemux: don't emit pad-added until caps are ready
In other words, gst_pad_get_current_caps should never return NULL
in a pad-added callback from the demuxer.

Added tests for the two special cases with AAC and H.264 where this
would happen every time.

https://bugzilla.gnome.org/show_bug.cgi?id=763780
2016-03-24 14:33:33 +02:00
Vineeth TM
1071309870 good: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763076
2016-03-24 14:32:20 +02:00
Dave Craig
211c8492b3 gst: Don't assume that get_current_caps() returns non-NULL caps after has_current_caps()
Remove calls to gst_pad_has_current_caps() which then go on to call
gst_pad_get_current_caps() as the caps can go to NULL in between. Instead just
use gst_pad_get_current_caps() and check for NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=759539
2016-02-23 18:11:42 +02:00
Tim-Philipp Müller
df341f41dc flvmux, rtpvp9depay: fix indentation 2016-02-19 15:04:15 +00:00
Havard Graff
7787f439fc flvmux: plug leak(s) in error-scenario
https://bugzilla.gnome.org/show_bug.cgi?id=762210
2016-02-19 14:59:09 +00:00
Havard Graff
1e09e5bfe9 flvdemux: fix eos event leak
https://bugzilla.gnome.org/show_bug.cgi?id=762209
2016-02-19 14:54:04 +00:00
Tim-Philipp Müller
ff422c112f flvdemux: relax creation time parsing
Parse wrong timestamps like we used to write as well,
e.g. 10:9:42, and the hour might be without a leading
zero in any case.
2015-10-21 11:53:09 +01:00
Tim-Philipp Müller
31b61f3add flvdemux: fix indentation 2015-10-21 11:45:35 +01:00
Tim-Philipp Müller
a6eb0e5489 flvdemux: extract both creation date and time
Before we only extracted the date part.
2015-10-21 11:45:14 +01:00
Tim-Philipp Müller
5413fd5f20 flvmux: fix writing of creation time
Don't write time as e.g. 11:9:42
2015-10-21 11:16:01 +01:00
Havard Graff
240b0ac9f6 flvdemux: output speex vorbiscomment as a GstTagList
This is what speexdec expects.

https://bugzilla.gnome.org/show_bug.cgi?id=755478
2015-10-11 11:12:27 +01:00
Havard Graff
b6f133ba17 flvmux: GST_BUFFER_OFFSETs should be GST_BUFFER_OFFSET_NONE
Or else flvdemux don't understand it

https://bugzilla.gnome.org/show_bug.cgi?id=754435
2015-10-11 11:10:20 +01:00
Havard Graff
cf3a2294da flvmux: use time segment and copy timestamps when streamable
Add a basic test using speex data to verify timestamping.

https://bugzilla.gnome.org/show_bug.cgi?id=754435
2015-10-11 11:09:08 +01:00
Havard Graff
a937c59acd flvdemux: speex is also always 16KHz
This is just a cosmetic change for the logs, since the right caps
for Speex is being set elsewhere.

https://bugzilla.gnome.org/show_bug.cgi?id=755479
2015-10-11 11:07:00 +01:00
George Chriss
1afb988256 flvmux: Make the element count in arrays not include end
One-line removal of tags_written++

This should fix rtmp output to crtmpserver, and hopefully
noone is expecting that the element count includes the end
element, as different bits of documentation say different
things about whether it should or not.

https://bugzilla.gnome.org/show_bug.cgi?id=661624
2015-09-05 23:45:37 +10:00
Jan Schmidt
db2967125b flvmux: Store incoming bitrate tags and send in the metadata
Apparently the Microsoft Azure RTMP server requires that the
videodatarate and audiodatarate metadata be provided, so
set those, even if it's to 0. Use the actual input bitrate
tags if available.
2015-09-05 23:45:37 +10:00
Jan Alexander Steffens (heftig)
439f98ed9a flvdemux: Handle seek flags properly
Allows for non-keyframe seeks.

https://bugzilla.gnome.org/show_bug.cgi?id=738570
2015-07-06 10:30:42 -04:00
Nicolas Dufresne
bbea34bb6e flvmux: Insert AVC end of sequence
This FLV specific mark is needed to prevent Flow Player (most likely
all Flash base player) from going into buffering state when near EOS.

https://bugzilla.gnome.org/show_bug.cgi?id=751320
2015-06-22 17:24:16 -04:00
Vineeth TM
636d47d2d6 flvdemux: trivial cleanup
trivial patch to add proper ( while checking for if(G_UNLIKELY())

https://bugzilla.gnome.org/show_bug.cgi?id=751306
2015-06-22 11:13:32 +01:00
Nicolas Dufresne
212f39ee1d flvmux: Fix DTS validity check
This check was up-side-down, causing a bad timestamp at start
and then all timestamp being delayed.

https://bugzilla.gnome.org/show_bug.cgi?id=751298
2015-06-21 19:23:22 -04:00
Nicolas Dufresne
717265ebfb flmux: Make sure best_time is initialized 2015-06-12 17:45:23 -04:00
Nicolas Dufresne
2274ca7d07 flvmux: Add negative runtime DTS support
This is done by using new feature of the CollectPad clip function
which sets the DTS as a gint64 in the collected data. It also simplify
the code a bit.

https://bugzilla.gnome.org/show_bug.cgi?id=740575
2015-06-12 17:18:24 -04:00
Luis de Bethencourt
9391622579 Rename property enums from ARG_ to PROP_
Property enum items should be named PROP_ for consistency and readability.
2015-04-27 11:22:11 +01:00
Tim-Philipp Müller
d753a3eeb1 Remove obsolete Android build cruft
This is not needed any longer.
2015-04-26 17:55:07 +01:00
Jan Schmidt
c0d4986c8d flv: When passing seek event upstream, hold a ref.
In case upstream can't handle the seek, make sure we
keep a ref on the event to attempt to handle it ourselves.
2015-03-31 00:20:48 +11:00
Mark Nauwelaerts
33cc1b4854 flvdemux: resurrect some flow return handling
https://bugzilla.gnome.org/show_bug.cgi?id=744572
2015-03-29 13:58:56 +02:00
Sebastian Dröge
ac0141b6a0 flvdemux: Only set caps once if they don't change
Previously we were setting new caps with the same content for every H264 or
AAC codec_data we found in the stream, spamming everything and causing
renegotiations.
2015-03-24 16:18:53 +01:00
Sebastian Dröge
c9b42951fe flvdemux: Don't create AAC/H264 caps without codec_data
Instead delay creating the caps until we read the codec_data from the stream,
or fail if we get normal data before the codec_data.

AAC raw caps and H264 avc caps always need codec_data, setting caps on the pad
without them is going to make negotiation fail most of the time. Even if we
later set new caps with the codec_data, that's usually going to be too late.

https://bugzilla.gnome.org/show_bug.cgi?id=746682
2015-03-24 16:15:04 +01:00
Sebastian Dröge
5e88b53212 flvdemux: Fix indention 2015-03-24 15:39:40 +01:00
Jan Alexander Steffens (heftig)
be8e3196a3 flvdemux: Don't repeatedly warn after no_more_pads (v2)
This can get rather spammy for such a high log level.
Only warn once per stream.

https://bugzilla.gnome.org/show_bug.cgi?id=746274
2015-03-16 12:01:43 +00:00
Jan Alexander Steffens (heftig)
ac8a272381 flvdemux: Introduce constant for no-more-pads threshold
https://bugzilla.gnome.org/show_bug.cgi?id=746274
2015-03-16 12:01:43 +00:00
Jan Alexander Steffens (heftig)
f2a1f74cec flvdemux: Fix warning to contain 'video'
https://bugzilla.gnome.org/show_bug.cgi?id=746274
2015-03-16 12:01:43 +00:00
Jan Schmidt
2e00311fe1 flvdemux: Use gst_video_guess_framerate()
Use gst_video_guess_framerate() from libgstvideo to guess
sensible common framerates where possible from the
floating point fps in the stream.
2015-02-12 23:38:47 +11:00
Jan Alexander Steffens (heftig)
bf73d834b2 flvdemux: Restrict resyncing to TS regressions
The behavior of resyncing video and audio indepen-
dently can cause A/V desyncs. Lets restrict resyncs
to jumps backward for now.

https://bugzilla.gnome.org/show_bug.cgi?id=736397
2014-11-19 11:58:19 -05:00
Sanjay NM
ba4b9b22d0 flv: Removed unreachable break statements
https://bugzilla.gnome.org/show_bug.cgi?id=736884
2014-09-18 09:42:43 -04:00
Nicolas Dufresne
356defdfea flvmux: Fallback to PTS if DTS is missing
Fixing a regression introduce when fixing:
https://bugzilla.gnome.org/show_bug.cgi?id=731352
2014-08-28 15:05:56 -04:00
Nicolas Dufresne
a7a3cb343a flvmux: Correctly offset timestamp
The previous method would break AV sync in the case audio or video
didn't start at the same point in running time.

https://bugzilla.gnome.org/show_bug.cgi?id=731352
2014-08-27 21:09:57 -04:00
Nicolas Dufresne
aa5bd99127 flvmux: Save dts from buffer
We no longer set dts in muxed buffer. This would lead to encoding tags
with timestamp 0 instead of the timestamp of previous buffer.

https://bugzilla.gnome.org/show_bug.cgi?id=731352
2014-08-27 21:08:21 -04:00
Nicolas Dufresne
c1e7bec616 flvmux: Ensure Timestamp starts at 0
FLV documentation stipulates that timestamp must start at zero.
In order to respect this rule, keep the first timestamp around
and offset the timestamp from this value. This allow for longer
recording time in presence of timestamp that does not start
at 0 already.

https://bugzilla.gnome.org/show_bug.cgi?id=731352
2014-08-26 16:46:03 -04:00
Nicolas Dufresne
ff2bce7b26 flv: Tag timestamp are DTS not PTS
The tags in FLV are DTS. In audio cases, and for many video format this makes
no difference, but for AVC with B-Frames, PTS need to be computed from
composition timestamp CTS, with PTS = DTS + CTS.

https://bugzilla.gnome.org/show_bug.cgi?id=731352
2014-08-26 16:45:59 -04:00
Tim-Philipp Müller
6ee2665b7c flvdemux: fix indentation 2014-08-13 11:59:39 +01:00
Tim-Philipp Müller
9afeb9652b flvdemux: un-break duration querying
Commit 2b9493b5 broke this in two ways: a) we should only
pass duration queries in TIME format upstream (or at least
not those in DEFAULT or BYTE format), and b) we mustn't
overwrite the default value of 'res' from TRUE to FALSE
and not set it again later. This led to bogus durations
being reported for FLV playback from file, because TIME
queries would fail (as 'res' had been set to FALSE) and
parsers then do a BYTE query as fallback and try to
guesstimate something in return, which of course goes
horribly wrong since the BYTE size returned is for the
muxed file.
2014-08-13 11:59:39 +01:00
Tim-Philipp Müller
e9f2d63011 flvdemux: fix speex caps
Decoder complains about "notification: Invalid mode encountered.
The stream is corrupted" though, even if it works, so there's
probably something wrong with the generated codec headers.
2014-06-26 13:50:19 +01:00
Tim-Philipp Müller
d98b996523 flvmux: fix speex in FLV
Speex in FLV is always mono @ 16kHz, see
http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf
section E.4.2.1: "If the SoundFormat indicates Speex, the audio is
compressed mono sampled at 16 kHz, the SoundRate shall be 0, the
SoundSize shall be 1, and the SoundType shall be 0"

Also see https://bugzilla.gnome.org/show_bug.cgi?id=683622
2014-06-26 13:43:33 +01:00
Edward Hervey
f7fc8d74c9 flvdemux: Attempt upstream seek first
If we have an upstream element that can handle the seek (such as
rtmpsrc), try to do that first before attempting it ourself.
2014-06-09 10:04:38 +02:00
Edward Hervey
2b9493b5f0 flvdemux: Query duration upstream first
Upstream elements (like rtmpsrc) might be able to provide the duration
more accurately than flvdemux. Especially with index-less vod files
2014-06-05 09:38:29 +02:00
Jan Alexander Steffens (heftig)
303883752e flvdemux: set RESYNC buffer flag when bridging large PTS gaps
So downstream gets notified when this happens.

https://bugzilla.gnome.org/show_bug.cgi?id=725903
2014-06-04 10:28:47 -04:00
Thiago Santos
3b887887be flvdemux: Use GstFlowCombiner
Use the flow combiner to have the standard combination results and avoid
repeating the same code

https://bugzilla.gnome.org/show_bug.cgi?id=709224
2014-05-26 19:51:07 -03:00
Edward Hervey
6c4882996f flvdemux: Don't use WARNING for not-linked flow return
Pollutes debug logs for no reason. It's only an error if all pads
return not-linked
2014-05-12 13:46:01 +02:00
Edward Hervey
c09b14c931 flvdemux: Skip unknown tags in push-mode
We add a new mode (SKIP) in push-mode to skip tags that we don't known about

Partially fixes https://bugzilla.gnome.org/show_bug.cgi?id=670712
2014-05-12 13:45:06 +02:00