FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
dashenc.c File Reference
#include "config.h"
#include "libavutil/avstring.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/time_internal.h"
#include "avc.h"
#include "avformat.h"
#include "avio_internal.h"
#include "internal.h"
#include "isom.h"
#include "os_support.h"
#include "url.h"

Go to the source code of this file.

Data Structures

struct  Segment
 
struct  OutputStream
 
struct  DASHContext
 

Macros

#define OFFSET(x)   offsetof(DASHContext, x)
 
#define E   AV_OPT_FLAG_ENCODING_PARAM
 

Enumerations

enum  DASHTmplId {
  DASH_TMPL_ID_UNDEFINED = -1, DASH_TMPL_ID_ESCAPE, DASH_TMPL_ID_REP_ID, DASH_TMPL_ID_NUMBER,
  DASH_TMPL_ID_BANDWIDTH, DASH_TMPL_ID_TIME
}
 

Functions

static int dash_write (void *opaque, uint8_t *buf, int buf_size)
 
static void set_codec_str (AVFormatContext *s, AVCodecContext *codec, char *str, int size)
 
static void dash_free (AVFormatContext *s)
 
static void output_segment_list (OutputStream *os, AVIOContext *out, DASHContext *c)
 
static DASHTmplId dash_read_tmpl_id (const char *identifier, char *format_tag, size_t format_tag_size, const char **ptr)
 
static void dash_fill_tmpl_params (char *dst, size_t buffer_size, const char *template, int rep_id, int number, int bit_rate, int64_t time)
 
static char * xmlescape (const char *str)
 
static void write_time (AVIOContext *out, int64_t time)
 
static int write_manifest (AVFormatContext *s, int final)
 
static int dash_write_header (AVFormatContext *s)
 
static int add_segment (OutputStream *os, const char *file, int64_t time, int duration, int64_t start_pos, int64_t range_length, int64_t index_length)
 
static void write_styp (AVIOContext *pb)
 
static void find_index_range (AVFormatContext *s, const char *full_path, int64_t pos, int *index_length)
 
static int update_stream_extradata (AVFormatContext *s, OutputStream *os, AVCodecContext *codec)
 
static int dash_flush (AVFormatContext *s, int final, int stream)
 
static int dash_write_packet (AVFormatContext *s, AVPacket *pkt)
 
static int dash_write_trailer (AVFormatContext *s)
 

Variables

static const AVOption options []
 
static const AVClass dash_class
 
AVOutputFormat ff_dash_muxer
 

Macro Definition Documentation

#define OFFSET (   x)    offsetof(DASHContext, x)

Definition at line 956 of file dashenc.c.

Definition at line 957 of file dashenc.c.

Enumeration Type Documentation

enum DASHTmplId
Enumerator:
DASH_TMPL_ID_UNDEFINED 
DASH_TMPL_ID_ESCAPE 
DASH_TMPL_ID_REP_ID 
DASH_TMPL_ID_NUMBER 
DASH_TMPL_ID_BANDWIDTH 
DASH_TMPL_ID_TIME 

Definition at line 42 of file dashenc.c.

Function Documentation

static int dash_write ( void opaque,
uint8_t buf,
int  buf_size 
)
static

Definition at line 98 of file dashenc.c.

Referenced by dash_write_header().

static void set_codec_str ( AVFormatContext s,
AVCodecContext codec,
char *  str,
int  size 
)
static

Definition at line 107 of file dashenc.c.

Referenced by dash_write_header(), and update_stream_extradata().

static void dash_free ( AVFormatContext s)
static

Definition at line 172 of file dashenc.c.

Referenced by dash_write_header(), and dash_write_trailer().

static void output_segment_list ( OutputStream os,
AVIOContext out,
DASHContext c 
)
static

Definition at line 195 of file dashenc.c.

Referenced by write_manifest().

static DASHTmplId dash_read_tmpl_id ( const char *  identifier,
char *  format_tag,
size_t  format_tag_size,
const char **  ptr 
)
static

Definition at line 257 of file dashenc.c.

Referenced by dash_fill_tmpl_params().

static void dash_fill_tmpl_params ( char *  dst,
size_t  buffer_size,
const char *  template,
int  rep_id,
int  number,
int  bit_rate,
int64_t  time 
)
static

Definition at line 309 of file dashenc.c.

Referenced by dash_flush(), and dash_write_header().

static char* xmlescape ( const char *  str)
static

Definition at line 370 of file dashenc.c.

Referenced by write_manifest().

static void write_time ( AVIOContext out,
int64_t  time 
)
static

Definition at line 410 of file dashenc.c.

Referenced by write_manifest().

static int write_manifest ( AVFormatContext s,
int  final 
)
static

Definition at line 426 of file dashenc.c.

Referenced by dash_flush(), and dash_write_header().

static int dash_write_header ( AVFormatContext s)
static

Definition at line 534 of file dashenc.c.

static int add_segment ( OutputStream os,
const char *  file,
int64_t  time,
int  duration,
int64_t  start_pos,
int64_t  range_length,
int64_t  index_length 
)
static

Definition at line 674 of file dashenc.c.

Referenced by dash_flush().

static void write_styp ( AVIOContext pb)
static

Definition at line 706 of file dashenc.c.

Referenced by dash_flush().

static void find_index_range ( AVFormatContext s,
const char *  full_path,
int64_t  pos,
int *  index_length 
)
static

Definition at line 716 of file dashenc.c.

Referenced by dash_flush().

static int update_stream_extradata ( AVFormatContext s,
OutputStream os,
AVCodecContext codec 
)
static

Definition at line 739 of file dashenc.c.

Referenced by dash_write_packet().

static int dash_flush ( AVFormatContext s,
int  final,
int  stream 
)
static

Definition at line 762 of file dashenc.c.

Referenced by dash_write_packet(), and dash_write_trailer().

static int dash_write_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 857 of file dashenc.c.

static int dash_write_trailer ( AVFormatContext s)
static

Definition at line 923 of file dashenc.c.

Variable Documentation

const AVOption options[]
static
Initial value:
= {
{ "window_size", "number of segments kept in the manifest", OFFSET(window_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, E },
{ "extra_window_size", "number of segments kept outside of the manifest before removing from disk", OFFSET(extra_window_size), AV_OPT_TYPE_INT, { .i64 = 5 }, 0, INT_MAX, E },
{ "min_seg_duration", "minimum segment duration (in microseconds)", OFFSET(min_seg_duration), AV_OPT_TYPE_INT64, { .i64 = 5000000 }, 0, INT_MAX, E },
{ "remove_at_exit", "remove all segments when finished", OFFSET(remove_at_exit), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, E },
{ "use_template", "Use SegmentTemplate instead of SegmentList", OFFSET(use_template), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, E },
{ "use_timeline", "Use SegmentTimeline in SegmentTemplate", OFFSET(use_timeline), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, E },
{ "single_file", "Store all segments in one file, accessed using byte ranges", OFFSET(single_file), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, E },
{ "single_file_name", "DASH-templated name to be used for baseURL. Implies storing all segments in one file, accessed using byte ranges", OFFSET(single_file_name), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, E },
{ "init_seg_name", "DASH-templated name to used for the initialization segment", OFFSET(init_seg_name), AV_OPT_TYPE_STRING, {.str = "init-stream$RepresentationID$.m4s"}, 0, 0, E },
{ "media_seg_name", "DASH-templated name to used for the media segments", OFFSET(media_seg_name), AV_OPT_TYPE_STRING, {.str = "chunk-stream$RepresentationID$-$Number%05d$.m4s"}, 0, 0, E },
{ NULL },
}

Definition at line 958 of file dashenc.c.

const AVClass dash_class
static
Initial value:
= {
.class_name = "dash muxer",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 972 of file dashenc.c.

AVOutputFormat ff_dash_muxer
Initial value:
= {
.name = "dash",
.long_name = NULL_IF_CONFIG_SMALL("DASH Muxer"),
.priv_data_size = sizeof(DASHContext),
.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_H264,
.codec_tag = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 },
.priv_class = &dash_class,
}

Definition at line 979 of file dashenc.c.