FFmpeg
Loading...
Searching...
No Matches
flvenc.c File Reference
#include "libavutil/attributes.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/dict.h"
#include "libavutil/intfloat.h"
#include "libavutil/avassert.h"
#include "libavutil/mastering_display_metadata.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "libavcodec/codec_desc.h"
#include "libavcodec/mpeg4audio.h"
#include "avio.h"
#include "avc.h"
#include "av1.h"
#include "vpcc.h"
#include "hevc.h"
#include "vvc.h"
#include "avformat.h"
#include "flv.h"
#include "internal.h"
#include "nal.h"
#include "mux.h"
#include "libavutil/opt.h"
#include "libavcodec/put_bits.h"

Go to the source code of this file.

Data Structures

struct  FLVFileposition
 
struct  FLVContext
 

Enumerations

enum  FLVFlags {
  FLV_AAC_SEQ_HEADER_DETECT = (1 << 0) , FLV_NO_SEQUENCE_END = (1 << 1) , FLV_ADD_KEYFRAME_INDEX = (1 << 2) , FLV_NO_METADATA = (1 << 3) ,
  FLV_NO_DURATION_FILESIZE = (1 << 4)
}
 

Functions

static int get_audio_flags (AVFormatContext *s, AVCodecParameters *par)
 
static void put_amf_string (AVIOContext *pb, const char *str)
 
static void put_timestamp (AVIOContext *pb, int64_t ts)
 
static void put_eos_tag (AVIOContext *pb, unsigned ts, enum AVCodecID codec_id)
 
static void put_amf_double (AVIOContext *pb, double d)
 
static void put_amf_byte (AVIOContext *pb, unsigned char abyte)
 
static void put_amf_dword_array (AVIOContext *pb, uint32_t dw)
 
static void put_amf_bool (AVIOContext *pb, int b)
 
static void write_metadata (AVFormatContext *s, unsigned int ts)
 
static void write_codec_fourcc (AVIOContext *pb, enum AVCodecID codec_id)
 
static void flv_write_metadata_packet (AVFormatContext *s, AVCodecParameters *par, unsigned int ts, int stream_idx)
 
static int unsupported_codec (AVFormatContext *s, const char *type, int codec_id)
 
static void flv_write_aac_header (AVFormatContext *s, AVCodecParameters *par)
 
static void flv_write_multichannel_body (AVFormatContext *s, AVCodecParameters *par)
 
static int flv_get_multichannel_body_size (AVCodecParameters *par)
 
static void flv_write_multichannel_header (AVFormatContext *s, AVCodecParameters *par, int64_t ts, int stream_index)
 
static void flv_write_codec_header (AVFormatContext *s, AVCodecParameters *par, int64_t ts, int stream_index)
 
static int flv_append_keyframe_info (AVFormatContext *s, FLVContext *flv, double ts, int64_t pos)
 
static int shift_data (AVFormatContext *s)
 
static int flv_init (struct AVFormatContext *s)
 
static int flv_write_header (AVFormatContext *s)
 
static int flv_write_trailer (AVFormatContext *s)
 
static int flv_write_packet (AVFormatContext *s, AVPacket *pkt)
 
static int flv_check_bitstream (AVFormatContext *s, AVStream *st, const AVPacket *pkt)
 
static void flv_deinit (AVFormatContext *s)
 

Variables

static const AVCodecTag flv_video_codec_ids []
 
static const AVCodecTag flv_audio_codec_ids []
 
static const AVOption options []
 
static const AVClass flv_muxer_class
 
const FFOutputFormat ff_flv_muxer
 

Enumeration Type Documentation

◆ FLVFlags

enum FLVFlags
Enumerator
FLV_AAC_SEQ_HEADER_DETECT 
FLV_NO_SEQUENCE_END 
FLV_ADD_KEYFRAME_INDEX 
FLV_NO_METADATA 
FLV_NO_DURATION_FILESIZE 

Definition at line 82 of file flvenc.c.

Function Documentation

◆ get_audio_flags()

static int get_audio_flags ( AVFormatContext * s,
AVCodecParameters * par )
static

Definition at line 141 of file flvenc.c.

Referenced by flv_init(), flv_write_codec_header(), and flv_write_packet().

◆ put_amf_string()

static void put_amf_string ( AVIOContext * pb,
const char * str )
static

◆ put_timestamp()

static void put_timestamp ( AVIOContext * pb,
int64_t ts )
static

◆ put_eos_tag()

static void put_eos_tag ( AVIOContext * pb,
unsigned ts,
enum AVCodecID codec_id )
static

Definition at line 260 of file flvenc.c.

Referenced by flv_write_trailer().

◆ put_amf_double()

static void put_amf_double ( AVIOContext * pb,
double d )
static

Definition at line 275 of file flvenc.c.

Referenced by flv_write_metadata_packet(), flv_write_trailer(), and write_metadata().

◆ put_amf_byte()

static void put_amf_byte ( AVIOContext * pb,
unsigned char abyte )
static

Definition at line 281 of file flvenc.c.

Referenced by write_metadata().

◆ put_amf_dword_array()

static void put_amf_dword_array ( AVIOContext * pb,
uint32_t dw )
static

Definition at line 286 of file flvenc.c.

Referenced by flv_write_trailer().

◆ put_amf_bool()

static void put_amf_bool ( AVIOContext * pb,
int b )
static

Definition at line 292 of file flvenc.c.

Referenced by write_metadata().

◆ write_metadata()

static void write_metadata ( AVFormatContext * s,
unsigned int ts )
static

Definition at line 298 of file flvenc.c.

Referenced by flv_write_header(), flv_write_packet(), and mxf_write_partition().

◆ write_codec_fourcc()

static void write_codec_fourcc ( AVIOContext * pb,
enum AVCodecID codec_id )
static

◆ flv_write_metadata_packet()

static void flv_write_metadata_packet ( AVFormatContext * s,
AVCodecParameters * par,
unsigned int ts,
int stream_idx )
static

Definition at line 542 of file flvenc.c.

Referenced by flv_write_packet().

◆ unsupported_codec()

static int unsupported_codec ( AVFormatContext * s,
const char * type,
int codec_id )
static

Definition at line 675 of file flvenc.c.

Referenced by flv_init().

◆ flv_write_aac_header()

static void flv_write_aac_header ( AVFormatContext * s,
AVCodecParameters * par )
static

Definition at line 686 of file flvenc.c.

Referenced by flv_write_codec_header().

◆ flv_write_multichannel_body()

static void flv_write_multichannel_body ( AVFormatContext * s,
AVCodecParameters * par )
static

Definition at line 722 of file flvenc.c.

Referenced by flv_write_multichannel_header().

◆ flv_get_multichannel_body_size()

static int flv_get_multichannel_body_size ( AVCodecParameters * par)
static

Definition at line 763 of file flvenc.c.

Referenced by flv_write_multichannel_header().

◆ flv_write_multichannel_header()

static void flv_write_multichannel_header ( AVFormatContext * s,
AVCodecParameters * par,
int64_t ts,
int stream_index )
static

Definition at line 775 of file flvenc.c.

Referenced by flv_write_codec_header().

◆ flv_write_codec_header()

static void flv_write_codec_header ( AVFormatContext * s,
AVCodecParameters * par,
int64_t ts,
int stream_index )
static

Definition at line 807 of file flvenc.c.

Referenced by flv_write_header(), and flv_write_packet().

◆ flv_append_keyframe_info()

static int flv_append_keyframe_info ( AVFormatContext * s,
FLVContext * flv,
double ts,
int64_t pos )
static

Definition at line 916 of file flvenc.c.

Referenced by flv_write_packet().

◆ shift_data()

static int shift_data ( AVFormatContext * s)
static

Definition at line 943 of file flvenc.c.

Referenced by flv_write_trailer().

◆ flv_init()

static int flv_init ( struct AVFormatContext * s)
static

Definition at line 972 of file flvenc.c.

◆ flv_write_header()

static int flv_write_header ( AVFormatContext * s)
static

Definition at line 1083 of file flvenc.c.

◆ flv_write_trailer()

static int flv_write_trailer ( AVFormatContext * s)
static

Definition at line 1120 of file flvenc.c.

◆ flv_write_packet()

static int flv_write_packet ( AVFormatContext * s,
AVPacket * pkt )
static

Definition at line 1210 of file flvenc.c.

◆ flv_check_bitstream()

static int flv_check_bitstream ( AVFormatContext * s,
AVStream * st,
const AVPacket * pkt )
static

Definition at line 1488 of file flvenc.c.

◆ flv_deinit()

static void flv_deinit ( AVFormatContext * s)
static

Definition at line 1505 of file flvenc.c.

Variable Documentation

◆ flv_video_codec_ids

const AVCodecTag flv_video_codec_ids[]
static
Initial value:
= {
{ AV_CODEC_ID_HEVC, MKBETAG('h', 'v', 'c', '1') },
{ AV_CODEC_ID_VVC, MKBETAG('v', 'v', 'c', '1') },
{ AV_CODEC_ID_AV1, MKBETAG('a', 'v', '0', '1') },
{ AV_CODEC_ID_VP9, MKBETAG('v', 'p', '0', '9') },
}
@ FLV_CODECID_SCREEN2
Definition flv.h:116
@ FLV_CODECID_MPEG4
Definition flv.h:119
@ FLV_CODECID_VP6A
Definition flv.h:115
@ FLV_CODECID_SCREEN
Definition flv.h:113
@ FLV_CODECID_REALH263
Definition flv.h:118
@ FLV_CODECID_H263
Definition flv.h:112
@ FLV_CODECID_VP6
Definition flv.h:114
@ FLV_CODECID_H264
Definition flv.h:117
@ AV_CODEC_ID_VP6
Definition codec_id.h:141
@ AV_CODEC_ID_FLV1
Definition codec_id.h:71
@ AV_CODEC_ID_VP6F
Definition codec_id.h:142
@ AV_CODEC_ID_H264
Definition codec_id.h:77
@ AV_CODEC_ID_NONE
Definition codec_id.h:48
@ AV_CODEC_ID_VVC
Definition codec_id.h:247
@ AV_CODEC_ID_AV1
Definition codec_id.h:275
@ AV_CODEC_ID_FLASHSV2
Definition codec_id.h:181
@ AV_CODEC_ID_VP6A
Definition codec_id.h:156
@ AV_CODEC_ID_HEVC
Definition codec_id.h:223
@ AV_CODEC_ID_H263
Definition codec_id.h:54
@ AV_CODEC_ID_MPEG4
Definition codec_id.h:62
@ AV_CODEC_ID_VP9
Definition codec_id.h:217
@ AV_CODEC_ID_FLASHSV
Definition codec_id.h:136
#define MKBETAG(a, b, c, d)
Definition macros.h:56

Definition at line 47 of file flvenc.c.

Referenced by flv_init(), flv_write_packet(), and put_eos_tag().

◆ flv_audio_codec_ids

const AVCodecTag flv_audio_codec_ids[]
static
Initial value:
= {
{ AV_CODEC_ID_OPUS, MKBETAG('O', 'p', 'u', 's') },
{ AV_CODEC_ID_FLAC, MKBETAG('f', 'L', 'a', 'C') },
{ AV_CODEC_ID_AC3, MKBETAG('a', 'c', '-', '3') },
{ AV_CODEC_ID_EAC3, MKBETAG('e', 'c', '-', '3') },
}
@ FLV_CODECID_PCM
Definition flv.h:97
@ FLV_CODECID_AAC
Definition flv.h:107
@ FLV_CODECID_MP3
Definition flv.h:99
@ FLV_CODECID_PCM_LE
Definition flv.h:100
@ FLV_CODECID_NELLYMOSER
Definition flv.h:103
@ FLV_CODECID_PCM_MULAW
Definition flv.h:105
@ FLV_CODECID_PCM_ALAW
Definition flv.h:104
@ FLV_CODECID_SPEEX
Definition flv.h:108
@ FLV_CODECID_ADPCM
Definition flv.h:98
#define FLV_AUDIO_CODECID_OFFSET
Definition flv.h:34
@ AV_CODEC_ID_ADPCM_SWF
Definition codec_id.h:383
@ AV_CODEC_ID_EAC3
Definition codec_id.h:493
@ AV_CODEC_ID_PCM_U8
Definition codec_id.h:335
@ AV_CODEC_ID_PCM_S16LE
Definition codec_id.h:330
@ AV_CODEC_ID_PCM_S16BE
Definition codec_id.h:331
@ AV_CODEC_ID_PCM_ALAW
Definition codec_id.h:337
@ AV_CODEC_ID_AAC
Definition codec_id.h:455
@ AV_CODEC_ID_NELLYMOSER
Definition codec_id.h:486
@ AV_CODEC_ID_FLAC
Definition codec_id.h:465
@ AV_CODEC_ID_AC3
Definition codec_id.h:456
@ AV_CODEC_ID_SPEEX
Definition codec_id.h:488
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
Definition codec_id.h:454
@ AV_CODEC_ID_OPUS
Definition codec_id.h:513
@ AV_CODEC_ID_PCM_MULAW
Definition codec_id.h:336

Definition at line 64 of file flvenc.c.

◆ options

const AVOption options[]
static
Initial value:
= {
{ "flvflags", "FLV muxer flags", 0x42 , AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "flvflags" },
{ "aac_seq_header_detect", "Put AAC sequence header based on stream data", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_AAC_SEQ_HEADER_DETECT}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "flvflags" },
{ "no_sequence_end", "disable sequence end for FLV", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_NO_SEQUENCE_END}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "flvflags" },
{ "no_metadata", "disable metadata for FLV", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_NO_METADATA}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "flvflags" },
{ "no_duration_filesize", "disable duration and filesize zero value metadata for FLV", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_NO_DURATION_FILESIZE}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "flvflags" },
{ "add_keyframe_index", "Add keyframe index metadata", 0, AV_OPT_TYPE_CONST, {.i64 = FLV_ADD_KEYFRAME_INDEX}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "flvflags" },
{ NULL },
}
#define NULL
Definition coverity.c:32
#define AV_OPT_FLAG_ENCODING_PARAM
A generic parameter which can be set by the user for muxing or encoding.
Definition opt.h:351
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition opt.h:298
@ AV_OPT_TYPE_FLAGS
Underlying C type is unsigned int.
Definition opt.h:254
@ FLV_ADD_KEYFRAME_INDEX
Definition flvenc.c:85
@ FLV_NO_SEQUENCE_END
Definition flvenc.c:84
@ FLV_AAC_SEQ_HEADER_DETECT
Definition flvenc.c:83
@ FLV_NO_METADATA
Definition flvenc.c:86
@ FLV_NO_DURATION_FILESIZE
Definition flvenc.c:87

Definition at line 1523 of file flvenc.c.

◆ flv_muxer_class

const AVClass flv_muxer_class
static
Initial value:
= {
.class_name = "flv muxer",
.item_name = av_default_item_name,
.option = options,
}
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
#define LIBAVUTIL_VERSION_INT
Definition version.h:85

Definition at line 1533 of file flvenc.c.

◆ ff_flv_muxer

const FFOutputFormat ff_flv_muxer
Initial value:
= {
.p.name = "flv",
.p.long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"),
.p.mime_type = "video/x-flv",
.p.extensions = "flv",
.priv_data_size = sizeof(FLVContext),
.p.audio_codec = CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_ADPCM_SWF,
.p.video_codec = AV_CODEC_ID_FLV1,
.p.codec_tag = (const AVCodecTag* const []) {
},
.p.priv_class = &flv_muxer_class,
}
#define AVFMT_VARIABLE_FPS
Format allows variable fps.
Definition avformat.h:501
#define AVFMT_TS_NONSTRICT
Format does not require strictly increasing timestamps, but they must still be monotonic.
Definition avformat.h:507
#define AVFMT_GLOBALHEADER
Format wants global header.
Definition avformat.h:497
static void deinit(AVFormatContext *s)
Definition chromaprint.c:53
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
static int write_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
Definition ffmpeg_mux.c:204
static void write_header(FFV1Context *f)
Definition ffv1enc.c:384
static const AVCodecTag flv_video_codec_ids[]
Definition flvenc.c:47
static int flv_write_trailer(AVFormatContext *s)
Definition flvenc.c:1120
static int flv_init(struct AVFormatContext *s)
Definition flvenc.c:972
static void flv_deinit(AVFormatContext *s)
Definition flvenc.c:1505
static int flv_write_header(AVFormatContext *s)
Definition flvenc.c:1083
static const AVCodecTag flv_audio_codec_ids[]
Definition flvenc.c:64
static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
Definition flvenc.c:1210
static int flv_check_bitstream(AVFormatContext *s, AVStream *st, const AVPacket *pkt)
Definition flvenc.c:1488
static const AVClass flv_muxer_class
Definition flvenc.c:1533
static int check_bitstream(AVFormatContext *s, FFStream *sti, AVPacket *pkt)
Definition mux.c:1056
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
static int write_trailer(AVFormatContext *s1)
Definition v4l2enc.c:101

Definition at line 1540 of file flvenc.c.

Referenced by hds_write_header().