Lines Matching refs:hls
286 HLSContext *hls = s->priv_data;
289 if (!*pb || !http_base_proto || !hls->http_persistent) {
306 HLSContext *hls = s->priv_data;
311 if (!http_base_proto || !hls->http_persistent || hls->key_info_file || hls->encrypt) {
565 static int hls_delete_file(HLSContext *hls, AVFormatContext *avf,
568 if (hls->method || (proto && !av_strcasecmp(proto, "http"))) {
572 set_http_options(avf, &opt, hls);
577 return hls->ignore_io_errors ? 1 : ret;
580 av_log(hls, AV_LOG_ERROR, "failed to delete old segment %s: %s\n",
586 static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls,
621 if (segment_cnt >= hls->hls_delete_threshold) {
627 if (segment && !hls->use_localtime_mkdir) {
628 dirname_r = hls->segment_filename ? av_strdup(hls->segment_filename): av_strdup(vs->avf->url);
651 av_log(hls, AV_LOG_DEBUG, "deleting old segment %s\n",
653 if (!hls->use_localtime_mkdir) // segment->filename contains basename only
663 if (ret = hls_delete_file(hls, vs->avf, path.str, proto))
680 if (ret = hls_delete_file(hls, vs->vtt_avf, path.str, proto))
713 HLSContext *hls = s->priv_data;
718 char * key_basename_source = (hls->master_m3u8_url) ? hls->master_m3u8_url : s->url;
721 hls->key_basename = av_mallocz(len);
722 if (!hls->key_basename)
725 av_strlcpy(hls->key_basename, key_basename_source, len);
726 av_strlcat(hls->key_basename, ".key", len);
728 if (hls->key_url) {
729 av_strlcpy(hls->key_file, hls->key_url, sizeof(hls->key_file));
730 av_strlcpy(hls->key_uri, hls->key_url, sizeof(hls->key_uri));
732 av_strlcpy(hls->key_file, hls->key_basename, sizeof(hls->key_file));
733 av_strlcpy(hls->key_uri, hls->key_basename, sizeof(hls->key_uri));
736 if (!*hls->iv_string) {
740 if (!hls->iv) {
743 memcpy(iv, hls->iv, sizeof(iv));
746 memcpy(hls->iv_string, buf, sizeof(hls->iv_string));
749 if (!*hls->key_uri) {
750 av_log(hls, AV_LOG_ERROR, "no key URI specified in key info file\n");
754 if (!*hls->key_file) {
755 av_log(hls, AV_LOG_ERROR, "no key file specified in key info file\n");
759 if (!*hls->key_string) {
761 if (!hls->key) {
767 memcpy(key, hls->key, sizeof(key));
770 ff_data_to_hex(hls->key_string, key, sizeof(key), 0);
771 set_http_options(s, &options, hls);
772 ret = s->io_open(s, &pb, hls->key_file, AVIO_FLAG_WRITE, &options);
786 HLSContext *hls = s->priv_data;
792 set_http_options(s, &options, hls);
793 ret = s->io_open(s, &pb, hls->key_info_file, AVIO_FLAG_READ, &options);
796 av_log(hls, AV_LOG_ERROR,
797 "error opening key info file %s\n", hls->key_info_file);
813 av_log(hls, AV_LOG_ERROR, "no key URI specified in key info file\n");
818 av_log(hls, AV_LOG_ERROR, "no key file specified in key info file\n");
822 set_http_options(s, &options, hls);
826 av_log(hls, AV_LOG_ERROR, "error opening key file %s\n", vs->key_file);
833 av_log(hls, AV_LOG_ERROR, "error reading key file %s\n", vs->key_file);
846 HLSContext *hls = s->priv_data;
849 int byterange_mode = (hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size > 0);
907 if (hls->segment_type == SEGMENT_TYPE_FMP4 && hls->max_seg_size > 0) {
908 if (hls->http_persistent > 0) {
912 if (hls->max_seg_size > 0) {
921 if (hls->segment_type == SEGMENT_TYPE_FMP4) {
922 set_http_options(s, &options, hls);
935 av_dict_copy(&options, hls->format_options, 0);
936 if (hls->segment_type == SEGMENT_TYPE_FMP4) {
969 static int sls_flags_filename_process(struct AVFormatContext *s, HLSContext *hls,
973 if ((hls->flags & (HLS_SECOND_LEVEL_SEGMENT_SIZE | HLS_SECOND_LEVEL_SEGMENT_DURATION)) &&
980 if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_SIZE) {
983 av_log(hls, AV_LOG_ERROR,
992 if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_DURATION) {
996 av_log(hls, AV_LOG_ERROR,
1009 static int sls_flag_check_duration_size_index(HLSContext *hls)
1013 if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_DURATION) {
1014 av_log(hls, AV_LOG_ERROR,
1018 if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_SIZE) {
1019 av_log(hls, AV_LOG_ERROR,
1023 if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_INDEX) {
1024 av_log(hls, AV_LOG_ERROR,
1032 static int sls_flag_check_duration_size(HLSContext *hls, VariantStream *vs)
1038 if ((hls->flags & HLS_SECOND_LEVEL_SEGMENT_DURATION) && !segment_renaming_ok) {
1039 av_log(hls, AV_LOG_ERROR,
1043 if ((hls->flags & HLS_SECOND_LEVEL_SEGMENT_SIZE) && !segment_renaming_ok) {
1044 av_log(hls, AV_LOG_ERROR,
1052 static void sls_flag_file_rename(HLSContext *hls, VariantStream *vs, char *old_filename) {
1053 if ((hls->flags & (HLS_SECOND_LEVEL_SEGMENT_SIZE | HLS_SECOND_LEVEL_SEGMENT_DURATION)) &&
1055 ff_rename(old_filename, vs->avf->url, hls);
1103 static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls,
1109 int byterange_mode = (hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size > 0);
1116 ret = sls_flags_filename_process(s, hls, vs, en, duration, pos, size);
1124 if (hls->use_localtime_mkdir) {
1129 av_log(hls, AV_LOG_WARNING, "Duplicated segment filename detected: %s\n", filename);
1152 if (hls->key_info_file || hls->encrypt) {
1165 if (hls->pl_type != PLAYLIST_TYPE_NONE)
1166 hls->max_nb_segments = 0;
1168 if (hls->max_nb_segments && vs->nb_entries >= hls->max_nb_segments) {
1173 if (en && hls->flags & HLS_DELETE_SEGMENTS &&
1174 !(hls->flags & HLS_SINGLE_FILE)) {
1177 if ((ret = hls_delete_old_segments(s, hls, vs)) < 0)
1184 if (hls->max_seg_size > 0) {
1194 HLSContext *hls = s->priv_data;
1220 av_log(hls, AV_LOG_VERBOSE,
1223 "omitting\n", tmp_sequence, hls->start_sequence);
1225 av_log(hls, AV_LOG_DEBUG, "Found playlist sequence number: %"PRId64"\n", tmp_sequence);
1288 ret = hls_append_segment(s, hls, vs, vs->duration, vs->start_pos, vs->size);
1370 HLSContext *hls = s->priv_data;
1381 const char *proto = avio_find_protocol_name(hls->master_m3u8_url);
1383 int use_temp_file = is_file_proto && ((hls->flags & HLS_TEMP_FILE) || hls->master_publish_rate);
1387 if (!hls->master_m3u8_created) {
1389 for (i = 0; i < hls->nb_varstreams; i++)
1390 if (!hls->var_streams[i].m3u8_created)
1394 if (&hls->var_streams[0] != input_vs || !hls->master_publish_rate ||
1395 input_vs->number % hls->master_publish_rate)
1399 set_http_options(s, &options, hls);
1400 snprintf(temp_filename, sizeof(temp_filename), use_temp_file ? "%s.tmp" : "%s", hls->master_m3u8_url);
1401 ret = hlsenc_io_open(s, &hls->m3u8_out, temp_filename, &options);
1409 ff_hls_write_playlist_version(hls->m3u8_out, hls->version);
1411 for (i = 0; i < hls->nb_ccstreams; i++) {
1412 ccs = &(hls->cc_streams[i]);
1413 avio_printf(hls->m3u8_out, "#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS");
1414 avio_printf(hls->m3u8_out, ",GROUP-ID=\"%s\"", ccs->ccgroup);
1415 avio_printf(hls->m3u8_out, ",NAME=\"%s\"", ccs->instreamid);
1417 avio_printf(hls->m3u8_out, ",LANGUAGE=\"%s\"", ccs->language);
1418 avio_printf(hls->m3u8_out, ",INSTREAM-ID=\"%s\"\n", ccs->instreamid);
1422 for (i = 0; i < hls->nb_varstreams; i++) {
1423 vs = &(hls->var_streams[i]);
1428 m3u8_rel_name = get_relative_url(hls->master_m3u8_url, vs->m3u8_name);
1434 ff_hls_write_audio_rendition(hls->m3u8_out, vs->agroup, m3u8_rel_name, vs->language, i, hls->has_default_key ? vs->is_default : 1);
1438 for (i = 0; i < hls->nb_varstreams; i++) {
1439 vs = &(hls->var_streams[i]);
1441 m3u8_rel_name = get_relative_url(hls->master_m3u8_url, vs->m3u8_name);
1466 for (j = 0; j < hls->nb_varstreams; j++) {
1467 temp_vs = &(hls->var_streams[j]);
1490 for (j = 0; j < hls->nb_ccstreams; j++) {
1491 ccs = &(hls->cc_streams[j]);
1497 if (j == hls->nb_ccstreams)
1504 vtt_m3u8_rel_name = get_relative_url(hls->master_m3u8_url, vs->vtt_m3u8_name);
1510 ff_hls_write_subtitle_rendition(hls->m3u8_out, sgroup, vtt_m3u8_rel_name, vs->language, i, hls->has_default_key ? vs->is_default : 1);
1513 if (!hls->has_default_key || !hls->has_video_m3u8) {
1514 ff_hls_write_stream_info(vid_st, hls->m3u8_out, bandwidth, m3u8_rel_name,
1518 ff_hls_write_stream_info(vid_st, hls->m3u8_out, bandwidth, m3u8_rel_name,
1525 hls->master_m3u8_created = 1;
1526 hlsenc_io_close(s, &hls->m3u8_out, temp_filename);
1528 ff_rename(temp_filename, hls->master_m3u8_url, s);
1535 HLSContext *hls = s->priv_data;
1541 int64_t sequence = FFMAX(hls->start_sequence, vs->sequence - vs->nb_entries);
1544 int use_temp_file = is_file_proto && ((hls->flags & HLS_TEMP_FILE) || !(hls->pl_type == PLAYLIST_TYPE_VOD));
1550 double *prog_date_time_p = (hls->flags & HLS_PROGRAM_DATE_TIME) ? &prog_date_time : NULL;
1551 int byterange_mode = (hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size > 0);
1553 hls->version = 2;
1554 if (!(hls->flags & HLS_ROUND_DURATIONS)) {
1555 hls->version = 3;
1559 hls->version = 4;
1563 if (hls->flags & HLS_I_FRAMES_ONLY) {
1564 hls->version = 4;
1567 if (hls->flags & HLS_INDEPENDENT_SEGMENTS) {
1568 hls->version = 6;
1571 if (hls->segment_type == SEGMENT_TYPE_FMP4) {
1572 hls->version = 7;
1575 if (!is_file_proto && (hls->flags & HLS_TEMP_FILE) && !warned_non_file++)
1578 set_http_options(s, &options, hls);
1580 if ((ret = hlsenc_io_open(s, byterange_mode ? &hls->m3u8_out : &vs->out, temp_filename, &options)) < 0) {
1581 if (hls->ignore_io_errors)
1592 ff_hls_write_playlist_header(byterange_mode ? hls->m3u8_out : vs->out, hls->version, hls->allowcache,
1593 target_duration, sequence, hls->pl_type, hls->flags & HLS_I_FRAMES_ONLY);
1595 if ((hls->flags & HLS_DISCONT_START) && sequence==hls->start_sequence && vs->discontinuity_set==0) {
1596 avio_printf(byterange_mode ? hls->m3u8_out : vs->out, "#EXT-X-DISCONTINUITY\n");
1599 if (vs->has_video && (hls->flags & HLS_INDEPENDENT_SEGMENTS)) {
1600 avio_printf(byterange_mode ? hls->m3u8_out : vs->out, "#EXT-X-INDEPENDENT-SEGMENTS\n");
1603 if ((hls->encrypt || hls->key_info_file) && (!key_uri || strcmp(en->key_uri, key_uri) ||
1605 avio_printf(byterange_mode ? hls->m3u8_out : vs->out, "#EXT-X-KEY:METHOD=AES-128,URI=\"%s\"", en->key_uri);
1607 avio_printf(byterange_mode ? hls->m3u8_out : vs->out, ",IV=0x%s", en->iv_string);
1608 avio_printf(byterange_mode ? hls->m3u8_out : vs->out, "\n");
1613 if ((hls->segment_type == SEGMENT_TYPE_FMP4) && (en == vs->segments)) {
1614 ff_hls_write_init_file(byterange_mode ? hls->m3u8_out : vs->out, (hls->flags & HLS_SINGLE_FILE) ? en->filename : vs->fmp4_init_filename,
1615 hls->flags & HLS_SINGLE_FILE, vs->init_range_length, 0);
1618 ret = ff_hls_write_file_entry(byterange_mode ? hls->m3u8_out : vs->out, en->discont, byterange_mode,
1619 en->duration, hls->flags & HLS_ROUND_DURATIONS,
1620 en->size, en->pos, hls->baseurl,
1623 en->keyframe_size, en->keyframe_pos, hls->flags & HLS_I_FRAMES_ONLY);
1631 if (last && (hls->flags & HLS_OMIT_ENDLIST)==0)
1632 ff_hls_write_end_list(byterange_mode ? hls->m3u8_out : vs->out);
1636 if ((ret = hlsenc_io_open(s, &hls->sub_m3u8_out, temp_vtt_filename, &options)) < 0) {
1637 if (hls->ignore_io_errors)
1641 ff_hls_write_playlist_header(hls->sub_m3u8_out, hls->version, hls->allowcache,
1644 ret = ff_hls_write_file_entry(hls->sub_m3u8_out, 0, byterange_mode,
1646 hls->baseurl, en->sub_filename, NULL, 0, 0, 0);
1653 ff_hls_write_end_list(hls->sub_m3u8_out);
1659 ret = hlsenc_io_close(s, byterange_mode ? &hls->m3u8_out : &vs->out, temp_filename);
1663 hlsenc_io_close(s, &hls->sub_m3u8_out, vs->vtt_m3u8_name);
1669 if (ret >= 0 && hls->master_pl_name)
1866 HLSContext *hls = s->priv_data;
1871 if (hls->segment_type == SEGMENT_TYPE_FMP4) {
1996 HLSContext *hls = s->priv_data;
2019 p = av_strdup(hls->var_stream_map);
2030 hls->var_streams = av_mallocz(sizeof(*hls->var_streams) * nb_varstreams);
2031 if (!hls->var_streams)
2033 hls->nb_varstreams = nb_varstreams;
2035 p = hls->var_stream_map;
2040 if (nb_varstreams < hls->nb_varstreams) {
2041 vs = &(hls->var_streams[nb_varstreams]);
2073 hls->has_default_key = 1;
2089 hls->has_video_m3u8 = 1;
2115 for (i = 0; i < hls->var_streams[j].nb_streams; i++) {
2116 if (hls->var_streams[j].streams[i] == s->streams[stream_index]) {
2132 hls->nb_varstreams);
2139 HLSContext *hls = s->priv_data;
2146 p = av_strdup(hls->cc_stream_map);
2157 hls->cc_streams = av_mallocz(sizeof(*hls->cc_streams) * nb_ccstreams);
2158 if (!hls->cc_streams)
2160 hls->nb_ccstreams = nb_ccstreams;
2162 p = hls->cc_stream_map;
2167 if (nb_ccstreams < hls->nb_ccstreams)
2168 ccs = &(hls->cc_streams[nb_ccstreams++]);
2216 HLSContext *hls = s->priv_data;
2220 if (hls->cc_stream_map) {
2226 if (hls->var_stream_map) {
2230 hls->var_streams = av_mallocz(sizeof(*hls->var_streams));
2231 if (!hls->var_streams)
2233 hls->nb_varstreams = 1;
2235 hls->var_streams[0].var_stream_idx = 0;
2236 hls->var_streams[0].nb_streams = s->nb_streams;
2237 hls->var_streams[0].streams = av_mallocz(sizeof(AVStream *) *
2238 hls->var_streams[0].nb_streams);
2239 if (!hls->var_streams[0].streams)
2243 if (hls->nb_ccstreams)
2244 hls->var_streams[0].ccgroup = hls->cc_streams[0].ccgroup;
2247 hls->var_streams[0].streams[i] = s->streams[i];
2254 HLSContext *hls = s->priv_data;
2278 hls->master_m3u8_url = av_append_path_component(dir, hls->master_pl_name);
2280 hls->master_m3u8_url = av_strdup(hls->master_pl_name);
2282 if (!hls->master_m3u8_url) {
2296 HLSContext *hls = s->priv_data;
2300 for (i = 0; i < hls->nb_varstreams; i++) {
2302 vs = &hls->var_streams[i];
2307 //av_assert0(s->nb_streams == hls->avf->nb_streams);
2312 if (hls->max_seg_size > 0) {
2314 (outer_st->codecpar->bit_rate > hls->max_seg_size)) {
2317 outer_st->codecpar->bit_rate, hls->max_seg_size);
2341 for (j = 0; j < hls->nb_varstreams; j++) {
2342 VariantStream *vs_agroup = &(hls->var_streams[j]);
2357 HLSContext *hls = s->priv_data;
2361 set_http_options(s, &options, hls);
2367 hlsenc_io_close(s, &vs->out, hls->fmp4_init_filename);
2405 HLSContext *hls = s->priv_data;
2419 for (i = 0; i < hls->nb_varstreams; i++) {
2420 vs = &hls->var_streams[i];
2446 end_pts = hls->recording_time * vs->number;
2448 if (vs->sequence - vs->nb_entries > hls->start_sequence && hls->init_time > 0) {
2449 /* reset end_pts, hls->recording_time at end of the init hls list */
2450 int64_t init_list_dur = hls->init_time * vs->nb_entries;
2451 int64_t after_init_list_dur = (vs->sequence - hls->start_sequence - vs->nb_entries) * hls->time;
2452 hls->recording_time = hls->time;
2468 ((pkt->flags & AV_PKT_FLAG_KEY) || (hls->flags & HLS_SPLIT_BY_TIME));
2497 int byterange_mode = (hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size > 0);
2503 if (hls->segment_type == SEGMENT_TYPE_FMP4) {
2509 if (!hls->resend_init_file)
2526 if (hls->flags & HLS_SINGLE_FILE) {
2533 if (hls->key_info_file || hls->encrypt)
2539 && (hls->flags & HLS_TEMP_FILE);
2542 if ((hls->max_seg_size > 0 && (vs->size + vs->start_pos >= hls->max_seg_size)) || !byterange_mode) {
2545 if (hls->key_info_file || hls->encrypt) {
2561 set_http_options(s, &options, hls);
2565 av_log(s, hls->ignore_io_errors ? AV_LOG_WARNING : AV_LOG_ERROR,
2569 return hls->ignore_io_errors ? 0 : ret;
2571 if (hls->segment_type == SEGMENT_TYPE_FMP4) {
2603 if (vs->start_pos || hls->segment_type != SEGMENT_TYPE_FMP4) {
2605 ret = hls_append_segment(s, hls, vs, cur_duration, vs->start_pos, vs->size);
2615 if (hls->pl_type != PLAYLIST_TYPE_VOD) {
2626 if (hls->resend_init_file && hls->segment_type == SEGMENT_TYPE_FMP4) {
2634 if (hls->flags & HLS_SINGLE_FILE) {
2636 if (hls->key_info_file || hls->encrypt)
2638 if (hls->segment_type == SEGMENT_TYPE_MPEGTS && oc->oformat->priv_class && oc->priv_data) {
2641 } else if (hls->max_seg_size > 0) {
2642 if (vs->size + vs->start_pos >= hls->max_seg_size) {
2644 sls_flag_file_rename(hls, vs, old_filename);
2654 sls_flag_file_rename(hls, vs, old_filename);
2674 if (hls->ignore_io_errors)
2683 HLSContext *hls = s->priv_data;
2687 for (i = 0; i < hls->nb_varstreams; i++) {
2688 vs = &hls->var_streams[i];
2698 if (hls->resend_init_file)
2706 ff_format_io_close(s, &hls->m3u8_out);
2707 ff_format_io_close(s, &hls->sub_m3u8_out);
2708 av_freep(&hls->key_basename);
2709 av_freep(&hls->var_streams);
2710 av_freep(&hls->cc_streams);
2711 av_freep(&hls->master_m3u8_url);
2716 HLSContext *hls = s->priv_data;
2728 for (i = 0; i < hls->nb_varstreams; i++) {
2730 vs = &hls->var_streams[i];
2739 if (hls->key_info_file || hls->encrypt) {
2751 if (hls->segment_type == SEGMENT_TYPE_FMP4) {
2764 byterange_mode = (hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size > 0);
2771 if (!(hls->flags & HLS_SINGLE_FILE)) {
2772 set_http_options(s, &options, hls);
2778 if (hls->segment_type == SEGMENT_TYPE_FMP4)
2800 if (hls->flags & HLS_SINGLE_FILE) {
2801 if (hls->key_info_file || hls->encrypt) {
2813 use_temp_file = proto && !strcmp(proto, "file") && (hls->flags & HLS_TEMP_FILE);
2817 if (use_temp_file && !(hls->flags & HLS_SINGLE_FILE)) {
2828 hls_append_segment(s, hls, vs, vs->duration + vs->dpp, vs->start_pos, vs->size);
2830 sls_flag_file_rename(hls, vs, old_filename);
2858 HLSContext *hls = s->priv_data;
2861 const char *vtt_pattern = hls->flags & HLS_SINGLE_FILE ? ".vtt" : "%d.vtt";
2864 int fmp4_init_filename_len = strlen(hls->fmp4_init_filename) + 1;
2867 if (hls->use_localtime) {
2870 pattern = hls->segment_type == SEGMENT_TYPE_FMP4 ? "%d.m4s" : "%d.ts";
2871 if (hls->flags & HLS_SINGLE_FILE)
2875 hls->has_default_key = 0;
2876 hls->has_video_m3u8 = 0;
2884 if (!hls->method && http_base_proto) {
2885 av_log(hls, AV_LOG_WARNING, "No HTTP method set, hls muxer defaulting to method PUT.\n");
2888 ret = validate_name(hls->nb_varstreams, s->url);
2892 if (hls->segment_filename) {
2893 ret = validate_name(hls->nb_varstreams, hls->segment_filename);
2898 if (av_strcasecmp(hls->fmp4_init_filename, "init.mp4")) {
2899 ret = validate_name(hls->nb_varstreams, hls->fmp4_init_filename);
2904 if (hls->subtitle_filename) {
2905 ret = validate_name(hls->nb_varstreams, hls->subtitle_filename);
2910 if (hls->master_pl_name) {
2919 if ((hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_SECONDS_SINCE_EPOCH) ||
2920 (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_MICROSECONDS_SINCE_EPOCH) ||
2921 (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_FORMATTED_DATETIME)) {
2923 if (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_MICROSECONDS_SINCE_EPOCH) {
2924 hls->start_sequence = av_gettime();
2925 } else if (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_SECONDS_SINCE_EPOCH) {
2926 hls->start_sequence = (int64_t)t;
2927 } else if (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_FORMATTED_DATETIME) {
2934 hls->start_sequence = strtoll(b, NULL, 10);
2936 av_log(hls, AV_LOG_DEBUG, "start_number evaluated to %"PRId64"\n", hls->start_sequence);
2939 hls->recording_time = hls->init_time ? hls->init_time : hls->time;
2941 if (hls->flags & HLS_SPLIT_BY_TIME && hls->flags & HLS_INDEPENDENT_SEGMENTS) {
2943 hls->flags &= ~HLS_INDEPENDENT_SEGMENTS;
2949 for (i = 0; i < hls->nb_varstreams; i++) {
2950 vs = &hls->var_streams[i];
2956 vs->sequence = hls->start_sequence;
2974 if (hls->segment_type == SEGMENT_TYPE_FMP4) {
2982 if (hls->segment_filename) {
2983 ret = format_name(hls->segment_filename, &vs->basename, i, vs->varname);
2999 if (hls->segment_type == SEGMENT_TYPE_FMP4) {
3000 if (hls->nb_varstreams > 1)
3002 if (hls->flags & HLS_SINGLE_FILE) {
3010 av_strlcpy(vs->fmp4_init_filename, hls->fmp4_init_filename,
3012 if (hls->nb_varstreams > 1) {
3015 ret = format_name(hls->fmp4_init_filename,
3024 if (hls->use_localtime) {
3052 ret = hls->use_localtime ? sls_flag_check_duration_size(hls, vs) : sls_flag_check_duration_size_index(hls);
3069 if (hls->subtitle_filename) {
3070 ret = format_name(hls->subtitle_filename, &vs->vtt_m3u8_name, i, vs->varname);
3085 if (hls->flags & HLS_APPEND_LIST) {
3088 if (hls->init_time > 0) {
3091 hls->init_time = 0;
3092 hls->recording_time = hls->time;
3113 {"hls_ts_options","set hls mpegts list of options for the container format used for hls (deprecated, use hls_segment_options instead of it.)", OFFSET(format_options), AV_OPT_TYPE_DICT, {.str = NULL}, 0, 0, E | AV_OPT_FLAG_DEPRECATED},
3115 {"hls_vtt_options","set hls vtt list of options for the container format used for hls", OFFSET(vtt_format_options_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E},
3119 {"hls_segment_options","set segments files format options of hls", OFFSET(format_options), AV_OPT_TYPE_DICT, {.str = NULL}, 0, 0, E},
3126 {"hls_subtitle_path", "set path of hls subtitles", OFFSET(subtitle_filename), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E},
3127 {"hls_segment_type", "set hls segment files type", OFFSET(segment_type), AV_OPT_TYPE_INT, {.i64 = SEGMENT_TYPE_MPEGTS }, 0, SEGMENT_TYPE_FMP4, E, "segment_type"},
3139 {"split_by_time", "split the hls segment by time which user set by hls_time", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SPLIT_BY_TIME }, 0, UINT_MAX, E, "flags"},
3140 {"append_list", "append the new segments into old hls segment list", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_APPEND_LIST }, 0, UINT_MAX, E, "flags"},
3172 .class_name = "hls muxer",
3180 .name = "hls",