39 char *filename,
char *language,
int name_id,
int is_default) {
40 if (!out || !agroup || !filename)
43 avio_printf(out,
"#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"group_%s\"", agroup);
44 avio_printf(out,
",NAME=\"audio_%d\",DEFAULT=%s,", name_id, is_default ?
"YES" :
"NO");
52 int bandwidth,
char *filename,
char *agroup,
53 char *
codecs,
char *ccgroup) {
55 if (!out || !filename)
60 "Bandwidth info not available, set audio and video bitrates\n");
64 avio_printf(out,
"#EXT-X-STREAM-INF:BANDWIDTH=%d", bandwidth);
68 if (codecs && strlen(codecs) > 0)
70 if (agroup && strlen(agroup) > 0)
72 if (ccgroup && strlen(ccgroup) > 0)
73 avio_printf(out,
",CLOSED-CAPTIONS=\"%s\"", ccgroup);
78 int target_duration, int64_t sequence,
79 uint32_t playlist_type,
int iframe_mode) {
83 if (allowcache == 0 || allowcache == 1) {
84 avio_printf(out,
"#EXT-X-ALLOW-CACHE:%s\n", allowcache == 0 ?
"NO" :
"YES");
86 avio_printf(out,
"#EXT-X-TARGETDURATION:%d\n", target_duration);
87 avio_printf(out,
"#EXT-X-MEDIA-SEQUENCE:%"PRId64
"\n", sequence);
101 int byterange_mode, int64_t
size, int64_t pos) {
102 avio_printf(out,
"#EXT-X-MAP:URI=\"%s\"", filename);
103 if (byterange_mode) {
104 avio_printf(out,
",BYTERANGE=\"%"PRId64
"@%"PRId64
"\"", size, pos);
111 double duration,
int round_duration,
112 int64_t
size, int64_t pos,
114 char *filename,
double *prog_date_time,
115 int64_t video_keyframe_size, int64_t video_keyframe_pos,
int iframe_mode) {
116 if (!out || !filename)
119 if (insert_discont) {
127 avio_printf(out,
"#EXT-X-BYTERANGE:%"PRId64
"@%"PRId64
"\n", iframe_mode ? video_keyframe_size : size,
128 iframe_mode ? video_keyframe_pos : pos);
130 if (prog_date_time) {
131 time_t tt, wrongsecs;
133 struct tm *tm, tmpbuf;
134 char buf0[128], buf1[128];
135 tt = (int64_t)*prog_date_time;
136 milli = av_clip(
lrint(1000*(*prog_date_time - tt)), 0, 999);
138 if (!strftime(buf0,
sizeof(buf0),
"%Y-%m-%dT%H:%M:%S", tm)) {
142 if (!strftime(buf1,
sizeof(buf1),
"%z", tm) || buf1[1]<
'0' ||buf1[1]>
'2') {
143 int tz_min, dst = tm->tm_isdst;
146 wrongsecs = mktime(tm);
147 tz_min = (
FFABS(wrongsecs - tt) + 30) / 60;
150 wrongsecs <= tt ?
'+' :
'-',
154 avio_printf(out,
"#EXT-X-PROGRAM-DATE-TIME:%s.%03d%s\n", buf0, milli, buf1);
#define AV_LOG_WARNING
Something somehow does not look correct.
static struct codec_string codecs[]
#define AV_LOG_VERBOSE
Detailed information.
void ff_hls_write_audio_rendition(AVIOContext *out, char *agroup, char *filename, char *language, int name_id, int is_default)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
void ff_hls_write_playlist_header(AVIOContext *out, int version, int allowcache, int target_duration, int64_t sequence, uint32_t playlist_type, int iframe_mode)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
void ff_hls_write_playlist_version(AVIOContext *out, int version)
int ff_hls_write_file_entry(AVIOContext *out, int insert_discont, int byterange_mode, double duration, int round_duration, int64_t size, int64_t pos, char *baseurl, char *filename, double *prog_date_time, int64_t video_keyframe_size, int64_t video_keyframe_pos, int iframe_mode)
void ff_hls_write_stream_info(AVStream *st, AVIOContext *out, int bandwidth, char *filename, char *agroup, char *codecs, char *ccgroup)
void ff_hls_write_init_file(AVIOContext *out, char *filename, int byterange_mode, int64_t size, int64_t pos)
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
void ff_hls_write_end_list(AVIOContext *out)
AVCodecParameters * codecpar
Codec parameters associated with this stream.
int avio_printf(AVIOContext *s, const char *fmt,...) av_printf_format(2