return 0;
}
-static int resolve_content_path(AVFormatContext *s, const char *url, int *max_url_size, xmlNodePtr *baseurl_nodes, int n_baseurl_nodes) {
-
+static int resolve_content_path(AVFormatContext *s, const char *url, int *max_url_size, xmlNodePtr *baseurl_nodes, int n_baseurl_nodes)
+{
char *tmp_str = NULL;
char *path = NULL;
char *mpdName = NULL;
char *root_url = NULL;
char *text = NULL;
char *tmp = NULL;
-
int isRootHttp = 0;
char token ='/';
int start = 0;
static int refresh_manifest(AVFormatContext *s)
{
-
int ret = 0, i;
DASHContext *c = s->priv_data;
-
// save current context
int n_videos = c->n_videos;
struct representation **videos = c->videos;
pls->ctx->streams[i]->r_frame_rate = pls->framerate;
}
#endif
-
ret = avformat_find_stream_info(pls->ctx, NULL);
if (ret < 0)
goto fail;
goto fail;
}
st->id = i;
- avcodec_parameters_copy(st->codecpar, pls->ctx->streams[i]->codecpar);
+ avcodec_parameters_copy(st->codecpar, ist->codecpar);
avpriv_set_pts_info(st, ist->pts_wrap_bits, ist->time_base.num, ist->time_base.den);
}
static int dash_read_header(AVFormatContext *s)
{
DASHContext *c = s->priv_data;
+ struct representation *rep;
int ret = 0;
int stream_index = 0;
int i;
/* Open the demuxer for video and audio components if available */
for (i = 0; i < c->n_videos; i++) {
- struct representation *cur_video = c->videos[i];
+ rep = c->videos[i];
if (i > 0 && c->is_init_section_common_video) {
- ret = copy_init_section(cur_video,c->videos[0]);
+ ret = copy_init_section(rep, c->videos[0]);
if (ret < 0)
goto fail;
}
- ret = open_demux_for_component(s, cur_video);
+ ret = open_demux_for_component(s, rep);
if (ret)
goto fail;
- cur_video->stream_index = stream_index;
+ rep->stream_index = stream_index;
++stream_index;
}
c->is_init_section_common_audio = is_common_init_section_exist(c->audios, c->n_audios);
for (i = 0; i < c->n_audios; i++) {
- struct representation *cur_audio = c->audios[i];
+ rep = c->audios[i];
if (i > 0 && c->is_init_section_common_audio) {
- ret = copy_init_section(cur_audio,c->audios[0]);
+ ret = copy_init_section(rep, c->audios[0]);
if (ret < 0)
goto fail;
}
- ret = open_demux_for_component(s, cur_audio);
+ ret = open_demux_for_component(s, rep);
if (ret)
goto fail;
- cur_audio->stream_index = stream_index;
+ rep->stream_index = stream_index;
++stream_index;
}
c->is_init_section_common_audio = is_common_init_section_exist(c->subtitles, c->n_subtitles);
for (i = 0; i < c->n_subtitles; i++) {
- struct representation *cur_subtitle = c->subtitles[i];
+ rep = c->subtitles[i];
if (i > 0 && c->is_init_section_common_audio) {
- ret = copy_init_section(cur_subtitle,c->subtitles[0]);
+ ret = copy_init_section(rep, c->subtitles[0]);
if (ret < 0)
goto fail;
}
- ret = open_demux_for_component(s, cur_subtitle);
+ ret = open_demux_for_component(s, rep);
if (ret)
goto fail;
- cur_subtitle->stream_index = stream_index;
+ rep->stream_index = stream_index;
++stream_index;
}
-
if (!stream_index) {
ret = AVERROR_INVALIDDATA;
goto fail;
}
for (i = 0; i < c->n_videos; i++) {
- struct representation *pls = c->videos[i];
-
- av_program_add_stream_index(s, 0, pls->stream_index);
- pls->assoc_stream = s->streams[pls->stream_index];
- if (pls->bandwidth > 0)
- av_dict_set_int(&pls->assoc_stream->metadata, "variant_bitrate", pls->bandwidth, 0);
- if (pls->id[0])
- av_dict_set(&pls->assoc_stream->metadata, "id", pls->id, 0);
+ rep = c->videos[i];
+ av_program_add_stream_index(s, 0, rep->stream_index);
+ rep->assoc_stream = s->streams[rep->stream_index];
+ if (rep->bandwidth > 0)
+ av_dict_set_int(&rep->assoc_stream->metadata, "variant_bitrate", rep->bandwidth, 0);
+ if (rep->id[0])
+ av_dict_set(&rep->assoc_stream->metadata, "id", rep->id, 0);
}
for (i = 0; i < c->n_audios; i++) {
- struct representation *pls = c->audios[i];
-
- av_program_add_stream_index(s, 0, pls->stream_index);
- pls->assoc_stream = s->streams[pls->stream_index];
- if (pls->bandwidth > 0)
- av_dict_set_int(&pls->assoc_stream->metadata, "variant_bitrate", pls->bandwidth, 0);
- if (pls->id[0])
- av_dict_set(&pls->assoc_stream->metadata, "id", pls->id, 0);
+ rep = c->audios[i];
+ av_program_add_stream_index(s, 0, rep->stream_index);
+ rep->assoc_stream = s->streams[rep->stream_index];
+ if (rep->bandwidth > 0)
+ av_dict_set_int(&rep->assoc_stream->metadata, "variant_bitrate", rep->bandwidth, 0);
+ if (rep->id[0])
+ av_dict_set(&rep->assoc_stream->metadata, "id", rep->id, 0);
}
for (i = 0; i < c->n_subtitles; i++) {
- struct representation *pls = c->subtitles[i];
- av_program_add_stream_index(s, 0, pls->stream_index);
- pls->assoc_stream = s->streams[pls->stream_index];
- if (pls->id[0])
- av_dict_set(&pls->assoc_stream->metadata, "id", pls->id, 0);
+ rep = c->subtitles[i];
+ av_program_add_stream_index(s, 0, rep->stream_index);
+ rep->assoc_stream = s->streams[rep->stream_index];
+ if (rep->id[0])
+ av_dict_set(&rep->assoc_stream->metadata, "id", rep->id, 0);
}
-
}
return 0;
for (i = 0; i < n; i++) {
struct representation *pls = p[i];
-
int needed = !pls->assoc_stream || pls->assoc_stream->discard < AVDISCARD_ALL;
+
if (needed && !pls->ctx) {
pls->cur_seg_offset = 0;
pls->init_sec_buf_read_offset = 0;
int ret = 0, i;
int64_t mints = 0;
struct representation *cur = NULL;
+ struct representation *rep = NULL;
recheck_discard_flags(s, c->videos, c->n_videos);
recheck_discard_flags(s, c->audios, c->n_audios);
recheck_discard_flags(s, c->subtitles, c->n_subtitles);
for (i = 0; i < c->n_videos; i++) {
- struct representation *pls = c->videos[i];
- if (!pls->ctx)
+ rep = c->videos[i];
+ if (!rep->ctx)
continue;
- if (!cur || pls->cur_timestamp < mints) {
- cur = pls;
- mints = pls->cur_timestamp;
+ if (!cur || rep->cur_timestamp < mints) {
+ cur = rep;
+ mints = rep->cur_timestamp;
}
}
for (i = 0; i < c->n_audios; i++) {
- struct representation *pls = c->audios[i];
- if (!pls->ctx)
+ rep = c->audios[i];
+ if (!rep->ctx)
continue;
- if (!cur || pls->cur_timestamp < mints) {
- cur = pls;
- mints = pls->cur_timestamp;
+ if (!cur || rep->cur_timestamp < mints) {
+ cur = rep;
+ mints = rep->cur_timestamp;
}
}
for (i = 0; i < c->n_subtitles; i++) {
- struct representation *pls = c->subtitles[i];
- if (!pls->ctx)
+ rep = c->subtitles[i];
+ if (!rep->ctx)
continue;
- if (!cur || pls->cur_timestamp < mints) {
- cur = pls;
- mints = pls->cur_timestamp;
+ if (!cur || rep->cur_timestamp < mints) {
+ cur = rep;
+ mints = rep->cur_timestamp;
}
}
DASHContext *c = s->priv_data;
free_audio_list(c);
free_video_list(c);
-
av_dict_free(&c->avio_opts);
av_freep(&c->base_url);
return 0;