av_strlcat(hls->key_basename, ".key", len);
if (hls->key_url) {
- strncpy(hls->key_file, hls->key_url, sizeof(hls->key_file));
- strncpy(hls->key_uri, hls->key_url, sizeof(hls->key_uri));
+ av_strlcpy(hls->key_file, hls->key_url, sizeof(hls->key_file));
+ av_strlcpy(hls->key_uri, hls->key_url, sizeof(hls->key_uri));
} else {
- strncpy(hls->key_file, hls->key_basename, sizeof(hls->key_file));
- strncpy(hls->key_uri, hls->key_basename, sizeof(hls->key_uri));
+ av_strlcpy(hls->key_file, hls->key_basename, sizeof(hls->key_file));
+ av_strlcpy(hls->key_uri, hls->key_basename, sizeof(hls->key_uri));
}
if (!*hls->iv_string) {
int64_t new_start_pos;
char line[1024];
const char *ptr;
+ const char *end;
if ((ret = ffio_open_whitelist(&in, url, AVIO_FLAG_READ,
&s->interrupt_callback, NULL,
} else if (av_strstart(line, "#EXTINF:", &ptr)) {
is_segment = 1;
hls->duration = atof(ptr);
+ } else if (av_stristart(line, "#EXT-X-KEY:", &ptr)) {
+ ptr = av_stristr(line, "URI=\"");
+ if (ptr) {
+ ptr += strlen("URI=\"");
+ end = av_stristr(ptr, ",");
+ if (end) {
+ av_strlcpy(hls->key_uri, ptr, end - ptr);
+ } else {
+ av_strlcpy(hls->key_uri, ptr, sizeof(hls->key_uri));
+ }
+ }
+
+ ptr = av_stristr(line, "IV=0x");
+ if (ptr) {
+ ptr += strlen("IV=0x");
+ end = av_stristr(ptr, ",");
+ if (end) {
+ av_strlcpy(hls->iv_string, ptr, end - ptr);
+ } else {
+ av_strlcpy(hls->iv_string, ptr, sizeof(hls->iv_string));
+ }
+ }
+
} else if (av_strstart(line, "#", NULL)) {
continue;
} else if (line[0]) {
sls_flag_file_rename(hls, old_filename);
ret = hls_start(s);
}
+ av_free(old_filename);
if (ret < 0) {
- av_free(old_filename);
return ret;
}
if ((ret = hls_window(s, 0)) < 0) {
- av_free(old_filename);
return ret;
}
}