39 #define INITIAL_BUFFER_SIZE 32768
156 const char *
url,
const char *base)
173 int key_len,
char **dest,
int *dest_len)
175 if (!strncmp(key,
"BANDWIDTH=", key_len)) {
188 int key_len,
char **dest,
int *dest_len)
190 if (!strncmp(key,
"METHOD=", key_len)) {
192 *dest_len =
sizeof(info->
method);
193 }
else if (!strncmp(key,
"URI=", key_len)) {
195 *dest_len =
sizeof(info->
uri);
196 }
else if (!strncmp(key,
"IV=", key_len)) {
198 *dest_len =
sizeof(info->
iv);
205 int ret = 0, is_segment = 0, is_variant = 0, bandwidth = 0;
227 if (strcmp(line,
"#EXTM3U")) {
238 if (
av_strstart(line,
"#EXT-X-STREAM-INF:", &ptr)) {
244 }
else if (
av_strstart(line,
"#EXT-X-KEY:", &ptr)) {
250 if (!strcmp(info.
method,
"AES-128"))
252 if (!strncmp(info.
iv,
"0x", 2) || !strncmp(info.
iv,
"0X", 2)) {
257 }
else if (
av_strstart(line,
"#EXT-X-TARGETDURATION:", &ptr)) {
266 }
else if (
av_strstart(line,
"#EXT-X-MEDIA-SEQUENCE:", &ptr)) {
275 }
else if (
av_strstart(line,
"#EXT-X-ENDLIST", &ptr)) {
283 }
else if (line[0]) {
309 memcpy(seg->
iv, iv,
sizeof(iv));
312 memset(seg->
iv, 0,
sizeof(seg->
iv));
346 !=
sizeof(var->
key)) {
359 iv[32] = key[32] =
'\0';
360 if (strstr(seg->
url,
"://"))
361 snprintf(url,
sizeof(url),
"crypto+%s", seg->
url);
363 snprintf(url,
sizeof(url),
"crypto:%s", seg->
url);
405 "skipping %d segments ahead, expired from playlists\n",
496 char bitrate_str[20];
542 snprintf(bitrate_str,
sizeof(bitrate_str),
"%d", v->
bandwidth);
616 int ret, i, minvariant = -1;
671 struct variant *minvar = minvariant < 0 ?
673 if (minvariant < 0 || var->cur_seq_no < minvar->
cur_seq_no) {
676 int64_t dts = var->
pkt.
dts;
677 int64_t mindts = minvar->
pkt.
dts;
701 if (minvariant >= 0) {
719 int64_t timestamp,
int flags)
762 if (timestamp >= pos &&
780 if (strncmp(p->
buf,
"#EXTM3U", 7))
782 if (strstr(p->
buf,
"#EXT-X-STREAM-INF:") ||
783 strstr(p->
buf,
"#EXT-X-TARGETDURATION:") ||
784 strstr(p->
buf,
"#EXT-X-MEDIA-SEQUENCE:"))
790 .
name =
"hls,applehttp",