Commit Graph

216 Commits

Author SHA1 Message Date
Steven Liu ee24c8ad01 avformat/flvenc: fix ticket 5976 and use old commit
mythtv have problem with non-seekable dont write duration and filesize
and there have problem with some other server and player with 0 value
duation and filesize.
So add a flv flags to fix the ticket and make a choose for users.

Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2016-11-26 08:52:19 +08:00
Steven Liu d316b21dba avformat/flvenc: add no_metadata to flvflags
some flv have no metadata,
ffmpeg will same with the source flv stream.

Signed-off-by: Steven Liu <lingjiujianke@gmail.com>
2016-11-22 10:18:23 +08:00
Steven Liu 863ebe6f83 avformat/flvenc: add add_keyframe_index option
Add keyframe index metadata
Used to facilitate seeking; particularly for HTTP pseudo streaming.
 1. read live streaming or file by sequence
 2. if use add_keyframe_index option, add a mark flag at the position,
    use to insert new context at the last step.
 3. add the keyframes *offset* and *timestamp* into a list
 4. if use add_keyframe_index option, shift the metadata data from
    mark flag offset
 5. insert the keyframes *offset* and *timestamp* from the list by
    sequence
 6. free the list
 7. end.

Add FATE test case;

Reviewed-by: Lou Logan <lou@lrcd.com>
Signed-off-by: Steven Liu <liuqi@gosun.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-11-10 10:30:48 +08:00
fuqiuping 2d72ea68f0 avformat/flvenc: support mp3 audio with 48khz
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-11-06 22:46:25 +01:00
Steven Liu 5702416c57 avformat/flvenc: do not attempt to write duration and filesize when not seekable
Its impossible to update the filesize & duration values if seekback is not
possible as with live streams

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-10-20 18:07:24 +02:00
Steven Liu c8528e54e5 avformat/flvenc: add no_sequence_end flags for flvflags
when split flv file by flv format at first, and cat flvs file
into one flv file, the flv sequence end is be used,
then the whole flv have many flv sequence end TAG.
this flags can give user an option to ignore write sequence end TAG

Signed-off-by: Steven Liu <lingjiujianke@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-14 15:50:07 +02:00
Michael Niedermayer e85c4a4706 avformat/flvenc: Add () around &
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-14 15:50:07 +02:00
Steven Liu 84aebfc74e avformat/flvenc: add FLVFlags for flvflags options
add FLVFlags type, be used to add new FLVFlags options

Signed-off-by: Steven Liu <lingjiujianke@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-14 01:45:40 +02:00
Matthieu Bouron 625eb41086 Merge commit '371df9ba71393a1c5429d5f40c76348b30e556c7'
* commit '371df9ba71393a1c5429d5f40c76348b30e556c7':
  flvenc: Provide output bytestream markers

Merged-by: Matthieu Bouron <matthieu.bouron@stupeflix.com>
2016-06-23 17:43:19 +02:00
Ivan c1f57e2f91 libavformat/flvenc: support for codec configuration change mid stream
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-06-11 10:54:43 +02:00
Ivan 52985768af libavformat/flvenc: refactoring: extracted method for writing codec headers
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-06-11 10:54:43 +02:00
Martin Storsjö 371df9ba71 flvenc: Provide output bytestream markers
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-18 10:36:53 +03:00
Derek Buitenhuis 6f69f7a8bf Merge commit '9200514ad8717c63f82101dc394f4378854325bf'
* commit '9200514ad8717c63f82101dc394f4378854325bf':
  lavf: replace AVStream.codec with AVStream.codecpar

This has been a HUGE effort from:
    - Derek Buitenhuis <derek.buitenhuis@gmail.com>
    - Hendrik Leppkes <h.leppkes@gmail.com>
    - wm4 <nfxjfg@googlemail.com>
    - Clément Bœsch <clement@stupeflix.com>
    - James Almer <jamrial@gmail.com>
    - Michael Niedermayer <michael@niedermayer.cc>
    - Rostislav Pehlivanov <atomnuker@gmail.com>

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-04-10 20:59:55 +01:00
Marton Balint 28fbdece79 avformat: use ff_standardize_creation_time for formats writing all format string metadata
Reviewed-by: wm4 <nfxjfg@googlemail.com>
Signed-off-by: Marton Balint <cus@passwd.hu>
2016-03-03 01:37:18 +01:00
Anton Khirnov 9200514ad8 lavf: replace AVStream.codec with AVStream.codecpar
Currently, AVStream contains an embedded AVCodecContext instance, which
is used by demuxers to export stream parameters to the caller and by
muxers to receive stream parameters from the caller. It is also used
internally as the codec context that is passed to parsers.

In addition, it is also widely used by the callers as the decoding (when
demuxer) or encoding (when muxing) context, though this has been
officially discouraged since Libav 11.

There are multiple important problems with this approach:
    - the fields in AVCodecContext are in general one of
        * stream parameters
        * codec options
        * codec state
      However, it's not clear which ones are which. It is consequently
      unclear which fields are a demuxer allowed to set or a muxer allowed to
      read. This leads to erratic behaviour depending on whether decoding or
      encoding is being performed or not (and whether it uses the AVStream
      embedded codec context).
    - various synchronization issues arising from the fact that the same
      context is used by several different APIs (muxers/demuxers,
      parsers, bitstream filters and encoders/decoders) simultaneously, with
      there being no clear rules for who can modify what and the different
      processes being typically delayed with respect to each other.
    - avformat_find_stream_info() making it necessary to support opening
      and closing a single codec context multiple times, thus
      complicating the semantics of freeing various allocated objects in the
      codec context.

Those problems are resolved by replacing the AVStream embedded codec
context with a newly added AVCodecParameters instance, which stores only
the stream parameters exported by the demuxers or read by the muxers.
2016-02-23 17:01:58 +01:00
Ivan a0174f6729 avformat/flvenc: copyts in FLV muxer
The purpose of this patch is to preserve timestamps when using ffmpeg for publishing RTMP streams, e.g. ffmpeg -i rtmp://source/stream -f flv rtmp://target/stream.
There is a setting "copyts" for that purpose. Unfortunately it doesn't work with FLV muxer because it has its own timestamp correction which makes global setting "copyts" ineffective.

This patch removes timestamp correction in FLV muxer. This means FLV will rely on ffmpeg timestamp correction which makes it possible to use copyts.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-01-26 20:56:55 +01:00
Maksym Veremeyenko acb430e4d3 avformat/flvenc: Add aac_seq_header_detect and flvflags
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-11-20 18:18:56 +01:00
Andreas Cadhalpun ed0b1db640 doc: fix spelling errors
Neccessary -> Necessary
formated   -> formatted
thee       -> the
eventhough -> even though
seperately -> separately

Reviewed-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
2015-06-14 15:09:33 +02:00
Michael Niedermayer 14bc7aaa86 Revert "avformat/flvenc: Allow muxing video codecs which are not explicitly supported by the muxer"
This commit has no known use case ATM as there are no unsupported video codecs in flv and could
theoretically be use to generate broken files allthough that would be not entirely easy as
tags/codecs still get sanity checked

This reverts commit 76f4b11780.
2015-03-22 17:19:25 +01:00
Michael Niedermayer 76f4b11780 avformat/flvenc: Allow muxing video codecs which are not explicitly supported by the muxer
This allows stream copying video codecs before they are explicitly
supported. The same feature was in the past useful for audio codecs
in flv

This partly reverts the changes from 735ab7c5e0

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-22 16:20:14 +01:00
Michael Niedermayer 735ab7c5e0 Merge commit 'e767c9e8f2eaa116b61b8b6881b401b54bd320f5'
* commit 'e767c9e8f2eaa116b61b8b6881b401b54bd320f5':
  flv: Validate and reject unsupported codecs

Conflicts:
	libavformat/flvenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-04 20:47:14 +01:00
Luca Barbato e767c9e8f2 flv: Validate and reject unsupported codecs
And provide a more informative message in case of failure.

CC: libav-stable@libav.org
2015-03-04 18:28:40 +01:00
Andreas Cadhalpun e8565d21c2 avformat/flvenc: check that the codec_tag fits in the available bits
flags is later written with avio_w8 and if it doesn't fit in one byte it
triggers an av_assert2.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-28 22:53:12 +01:00
Michael Niedermayer b942a71eaa avformat/flvenc: accept AVMEDIA_TYPE_SUBTITLE instead of DATA for subtitles
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-22 13:26:29 +01:00
Michael Niedermayer 58721388b8 avformat/flvenc: omit more metadata elements with specific meaning
Reviewed-by: Thilo Borgmann <thilo.borgmann@mail.de>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-05 01:45:49 +01:00
Carl Eugen Hoyos 78093cf849 Print a warning if vp6 is muxed into flv: The output is flipped.
Fixes ticket #4132.
2014-11-23 13:22:27 +01:00
Michael Niedermayer 4b68edd08a flvenc: Remove an unused variable
Signed-off-by: Martin Storsjö <martin@martin.st>
2014-11-22 22:10:52 +02:00
Michael Niedermayer cc5f731541 avformat/flvenc: remove unused variable
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-17 13:08:05 +01:00
Michael Niedermayer 4127d97c8d Merge commit 'c64f3615118d757dcf76040fe5407bf2b3883206'
* commit 'c64f3615118d757dcf76040fe5407bf2b3883206':
  flvenc: Send new metadata when FLAG_METADATA_UPDATED is set.

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-17 13:01:39 +01:00
Michael Niedermayer bb7be3b763 Merge commit '4d0cd5f58c892276716f46f4b2702915e5018215'
* commit '4d0cd5f58c892276716f46f4b2702915e5018215':
  flvenc: move metadata updates into a single function

Conflicts:
	libavformat/flvenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-17 12:43:55 +01:00
Andrew Stone c64f361511 flvenc: Send new metadata when FLAG_METADATA_UPDATED is set.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-11-17 09:28:16 +01:00
Andrew Stone 4d0cd5f58c flvenc: move metadata updates into a single function
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-11-17 09:28:06 +01:00
Michael Niedermayer 470e116e3f avformat/flvenc: Use AVFormatContext strict_std_compliance instead of AVCodecContext
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-06 14:47:43 +01:00
Stefano Sabatini f0158e6f0c lavf/flvenc: fail in case the muxed packet is too big
Avoid the creation of files which cannot be successfully decoded by
ffmpeg, for example generated with:
ffmpeg -f lavfi -i sine -af "aselect='not(between(t,100,500))',aresample=min_comp=0.001:min_hard_comp=0.100000" -acodec pcm_s16le -t 1000 -y out_audio.flv
2014-11-03 09:31:48 +01:00
Michael Niedermayer 8cde94ec0d avformat/flvenc: fix codec_id_text check
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-10-02 03:58:54 +02:00
Jeffrey Wescott 07de0db74b avformat/flvenc: When using "-c:d copy", don't require a codec for passing the AMF metadata through from input to output. 2014-09-30 20:27:07 +02:00
Moritz Barsnick 66d02d3ca6 align and correct messages regarding bitstream filters
The messages regarding the recommended use of bitstream filters are somewhat different.
This also adds the ":v" stream specifier to "-bsf h264_mp4toannexb".

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-19 20:18:01 +02:00
Michael Niedermayer 3f2f87cd5a Merge commit '74bc9458057f07c0820c3d3264396c4c64442e47'
* commit '74bc9458057f07c0820c3d3264396c4c64442e47':
  flvenc: Don't over-count metadata.

Conflicts:
	tests/ref/lavf/flv_fmt
	tests/ref/vsynth/vsynth1-flashsv
	tests/ref/vsynth/vsynth1-flv
	tests/ref/vsynth/vsynth2-flashsv
	tests/ref/vsynth/vsynth2-flv

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-06-18 01:44:24 +02:00
Josh Allmann 74bc945805 flvenc: Don't over-count metadata.
Over-counting occurs if framerate is not set.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-06-17 21:38:21 +02:00
Michael Niedermayer 74760883fc avformat/flvenc: Do not allow creating h263/mpeg4 in flv without unofficial format extensions being enabled.
Found-by: Jean-Baptiste Kempf <jb@videolan.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-06-07 12:03:31 +02:00
Michael Niedermayer 2e532aa82d avformat/flvenc: fix assertion failure after 4h muxing
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-05-31 01:43:41 +02:00
Michael Niedermayer e46cc1dab0 Merge commit '43e7f0797f9f821a3866a20f05e512e13c82076a'
* commit '43e7f0797f9f821a3866a20f05e512e13c82076a':
  flvenc: only write the framerate tag based on avg_frame_rate

Conflicts:
	tests/ref/lavf/flv_fmt
	tests/ref/seek/lavf-flv_fmt
	tests/ref/seek/vsynth2-flv
	tests/ref/vsynth/vsynth1-flashsv
	tests/ref/vsynth/vsynth1-flv
	tests/ref/vsynth/vsynth2-flashsv
	tests/ref/vsynth/vsynth2-flv

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-05-29 13:30:12 +02:00
Anton Khirnov 43e7f0797f flvenc: only write the framerate tag based on avg_frame_rate
Do not fall back on the codec timebase, since that can be anything for
VFR video.
2014-05-29 08:01:30 +02:00
Carl Eugen Hoyos fe9f575924 Warn if s16be is muxed into flv.
Players that conform to the specification can only playback such
files correctly on big-endian hardware.
2014-01-16 00:38:27 +01:00
Michael Niedermayer 6fc9f5e0ff Merge commit 'f412b2c9f3a7add0ab8021262ec4bad249347e30'
* commit 'f412b2c9f3a7add0ab8021262ec4bad249347e30':
  flv: Use the correct type to hold the file offset

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-12-21 00:14:11 +01:00
Luca Barbato f412b2c9f3 flv: Use the correct type to hold the file offset 2013-12-20 17:44:20 +01:00
Carl Eugen Hoyos b8667bccad Revert: flvenc: Don't pretend to support muxing "plain" VP6
Muxing VP6 is used by applications and works with Flashplayer.

Reported-by: David Bertrand
2013-12-09 13:18:29 +01:00
Michael Niedermayer 7acb464f0e Merge commit 'e6ed8668597cfea25dfb350a9b4df7fb2efc1d90'
* commit 'e6ed8668597cfea25dfb350a9b4df7fb2efc1d90':
  flvenc: Write proper cropping for VP6 even if there's no extradata

Conflicts:
	libavformat/flvenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-10-10 12:06:17 +02:00
Michael Niedermayer c2555bcbd1 Merge commit 'be1e1373d267bae2af8a62d79eef736736f24565'
* commit 'be1e1373d267bae2af8a62d79eef736736f24565':
  flvenc: Support muxing VP6A as well

Conflicts:
	libavformat/flvenc.c

See: 42ae83c196
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-10-10 11:58:58 +02:00
Michael Niedermayer 0efbd98e23 Merge commit '4d7aeff9a1080e64125f3374d993b2c9c4c2751b'
* commit '4d7aeff9a1080e64125f3374d993b2c9c4c2751b':
  flvenc: Don't pretend to support muxing "plain" VP6

Conflicts:
	libavformat/flvenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-10-10 11:45:45 +02:00