X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fhlsplaylist.c;h=9cbd02353f46c41b7e4a61ffc9a81f738605672d;hb=d92b2296f85467af25b0ec95a6d6f6327db9e056;hp=efcbff0009db775323dcdd2128a1f7b4082510df;hpb=4069096dd535ee99175c2a29c1a1f59c3fc110c1;p=ffmpeg diff --git a/libavformat/hlsplaylist.c b/libavformat/hlsplaylist.c index efcbff0009d..9cbd02353f4 100644 --- a/libavformat/hlsplaylist.c +++ b/libavformat/hlsplaylist.c @@ -36,17 +36,20 @@ void ff_hls_write_playlist_version(AVIOContext *out, int version) { } void ff_hls_write_audio_rendition(AVIOContext *out, char *agroup, - char *filename, int name_id, int is_default) { + const char *filename, char *language, int name_id, int is_default) { if (!out || !agroup || !filename) return; avio_printf(out, "#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"group_%s\"", agroup); - avio_printf(out, ",NAME=\"audio_%d\",DEFAULT=%s,URI=\"%s\"\n", name_id, - is_default ? "YES" : "NO", filename); + avio_printf(out, ",NAME=\"audio_%d\",DEFAULT=%s,", name_id, is_default ? "YES" : "NO"); + if (language) { + avio_printf(out, "LANGUAGE=\"%s\",", language); + } + avio_printf(out, "URI=\"%s\"\n", filename); } void ff_hls_write_stream_info(AVStream *st, AVIOContext *out, - int bandwidth, char *filename, char *agroup, + int bandwidth, const char *filename, char *agroup, char *codecs, char *ccgroup) { if (!out || !filename) @@ -73,7 +76,7 @@ void ff_hls_write_stream_info(AVStream *st, AVIOContext *out, void ff_hls_write_playlist_header(AVIOContext *out, int version, int allowcache, int target_duration, int64_t sequence, - uint32_t playlist_type) { + uint32_t playlist_type, int iframe_mode) { if (!out) return; ff_hls_write_playlist_version(out, version); @@ -89,6 +92,9 @@ void ff_hls_write_playlist_header(AVIOContext *out, int version, int allowcache, } else if (playlist_type == PLAYLIST_TYPE_VOD) { avio_printf(out, "#EXT-X-PLAYLIST-TYPE:VOD\n"); } + if (iframe_mode) { + avio_printf(out, "#EXT-X-I-FRAMES-ONLY\n"); + } } void ff_hls_write_init_file(AVIOContext *out, char *filename, @@ -105,7 +111,8 @@ int ff_hls_write_file_entry(AVIOContext *out, int insert_discont, double duration, int round_duration, int64_t size, int64_t pos, //Used only if HLS_SINGLE_FILE flag is set char *baseurl, //Ignored if NULL - char *filename, double *prog_date_time) { + char *filename, double *prog_date_time, + int64_t video_keyframe_size, int64_t video_keyframe_pos, int iframe_mode) { if (!out || !filename) return AVERROR(EINVAL); @@ -117,7 +124,8 @@ int ff_hls_write_file_entry(AVIOContext *out, int insert_discont, else avio_printf(out, "#EXTINF:%f,\n", duration); if (byterange_mode) - avio_printf(out, "#EXT-X-BYTERANGE:%"PRId64"@%"PRId64"\n", size, pos); + avio_printf(out, "#EXT-X-BYTERANGE:%"PRId64"@%"PRId64"\n", iframe_mode ? video_keyframe_size : size, + iframe_mode ? video_keyframe_pos : pos); if (prog_date_time) { time_t tt, wrongsecs;