Commit 071f4764 authored by Steven Liu's avatar Steven Liu

avformat/hlsplaylist: add int type of API ff_hls_write_file_entry

Signed-off-by: 's avatarSteven Liu <lq@chinaffmpeg.org>
parent 31b351ea
...@@ -342,6 +342,7 @@ static void output_segment_list(OutputStream *os, AVIOContext *out, DASHContext ...@@ -342,6 +342,7 @@ static void output_segment_list(OutputStream *os, AVIOContext *out, DASHContext
AVIOContext *out_hls = NULL; AVIOContext *out_hls = NULL;
AVDictionary *http_opts = NULL; AVDictionary *http_opts = NULL;
int target_duration = 0; int target_duration = 0;
int ret = 0;
const char *proto = avio_find_protocol_name(c->dirname); const char *proto = avio_find_protocol_name(c->dirname);
int use_rename = proto && !strcmp(proto, "file"); int use_rename = proto && !strcmp(proto, "file");
...@@ -368,11 +369,14 @@ static void output_segment_list(OutputStream *os, AVIOContext *out, DASHContext ...@@ -368,11 +369,14 @@ static void output_segment_list(OutputStream *os, AVIOContext *out, DASHContext
for (i = start_index; i < os->nb_segments; i++) { for (i = start_index; i < os->nb_segments; i++) {
Segment *seg = os->segments[i]; Segment *seg = os->segments[i];
ff_hls_write_file_entry(out_hls, 0, c->single_file, ret = ff_hls_write_file_entry(out_hls, 0, c->single_file,
(double) seg->duration / timescale, 0, (double) seg->duration / timescale, 0,
seg->range_length, seg->start_pos, NULL, seg->range_length, seg->start_pos, NULL,
c->single_file ? os->initfile : seg->file, c->single_file ? os->initfile : seg->file,
NULL); NULL);
if (ret < 0) {
av_log(os->ctx, AV_LOG_WARNING, "ff_hls_write_file_entry get error\n");
}
} }
if (final) if (final)
......
...@@ -1236,11 +1236,13 @@ static int hls_window(AVFormatContext *s, int last, VariantStream *vs) ...@@ -1236,11 +1236,13 @@ static int hls_window(AVFormatContext *s, int last, VariantStream *vs)
hls->flags & HLS_SINGLE_FILE, en->size, en->pos); hls->flags & HLS_SINGLE_FILE, en->size, en->pos);
} }
ff_hls_write_file_entry(out, en->discont, byterange_mode, ret = ff_hls_write_file_entry(out, en->discont, byterange_mode,
en->duration, hls->flags & HLS_ROUND_DURATIONS, en->duration, hls->flags & HLS_ROUND_DURATIONS,
en->size, en->pos, vs->baseurl, en->size, en->pos, vs->baseurl,
en->filename, prog_date_time_p); en->filename, prog_date_time_p);
if (ret < 0) {
av_log(s, AV_LOG_WARNING, "ff_hls_write_file_entry get error\n");
}
} }
if (last && (hls->flags & HLS_OMIT_ENDLIST)==0) if (last && (hls->flags & HLS_OMIT_ENDLIST)==0)
...@@ -1251,11 +1253,13 @@ static int hls_window(AVFormatContext *s, int last, VariantStream *vs) ...@@ -1251,11 +1253,13 @@ static int hls_window(AVFormatContext *s, int last, VariantStream *vs)
goto fail; goto fail;
ff_hls_write_playlist_header(sub_out, hls->version, hls->allowcache, ff_hls_write_playlist_header(sub_out, hls->version, hls->allowcache,
target_duration, sequence, PLAYLIST_TYPE_NONE); target_duration, sequence, PLAYLIST_TYPE_NONE);
for (en = vs->segments; en; en = en->next) { for (en = vs->segments; en; en = en->next) {
ff_hls_write_file_entry(sub_out, 0, byterange_mode, ret = ff_hls_write_file_entry(sub_out, 0, byterange_mode,
en->duration, 0, en->size, en->pos, en->duration, 0, en->size, en->pos,
vs->baseurl, en->sub_filename, NULL); vs->baseurl, en->sub_filename, NULL);
if (ret < 0) {
av_log(s, AV_LOG_WARNING, "ff_hls_write_file_entry get error\n");
}
} }
if (last) if (last)
......
...@@ -82,14 +82,14 @@ void ff_hls_write_init_file(AVIOContext *out, char *filename, ...@@ -82,14 +82,14 @@ void ff_hls_write_init_file(AVIOContext *out, char *filename,
avio_printf(out, "\n"); avio_printf(out, "\n");
} }
void ff_hls_write_file_entry(AVIOContext *out, int insert_discont, int ff_hls_write_file_entry(AVIOContext *out, int insert_discont,
int byterange_mode, int byterange_mode,
double duration, int round_duration, double duration, int round_duration,
int64_t size, int64_t pos, //Used only if HLS_SINGLE_FILE flag is set int64_t size, int64_t pos, //Used only if HLS_SINGLE_FILE flag is set
char *baseurl, //Ignored if NULL char *baseurl, //Ignored if NULL
char *filename, double *prog_date_time) { char *filename, double *prog_date_time) {
if (!out || !filename) if (!out || !filename)
return; return AVERROR(EINVAL);
if (insert_discont) { if (insert_discont) {
avio_printf(out, "#EXT-X-DISCONTINUITY\n"); avio_printf(out, "#EXT-X-DISCONTINUITY\n");
...@@ -128,6 +128,8 @@ void ff_hls_write_file_entry(AVIOContext *out, int insert_discont, ...@@ -128,6 +128,8 @@ void ff_hls_write_file_entry(AVIOContext *out, int insert_discont,
if (baseurl) if (baseurl)
avio_printf(out, "%s", baseurl); avio_printf(out, "%s", baseurl);
avio_printf(out, "%s\n", filename); avio_printf(out, "%s\n", filename);
return 0;
} }
void ff_hls_write_end_list (AVIOContext *out) { void ff_hls_write_end_list (AVIOContext *out) {
......
...@@ -49,7 +49,7 @@ void ff_hls_write_playlist_header(AVIOContext *out, int version, int allowcache, ...@@ -49,7 +49,7 @@ void ff_hls_write_playlist_header(AVIOContext *out, int version, int allowcache,
uint32_t playlist_type); uint32_t playlist_type);
void ff_hls_write_init_file(AVIOContext *out, char *filename, void ff_hls_write_init_file(AVIOContext *out, char *filename,
int byterange_mode, int64_t size, int64_t pos); int byterange_mode, int64_t size, int64_t pos);
void ff_hls_write_file_entry(AVIOContext *out, int insert_discont, int ff_hls_write_file_entry(AVIOContext *out, int insert_discont,
int byterange_mode, int byterange_mode,
double duration, int round_duration, double duration, int round_duration,
int64_t size, int64_t pos, //Used only if HLS_SINGLE_FILE flag is set int64_t size, int64_t pos, //Used only if HLS_SINGLE_FILE flag is set
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment