mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2026-01-23 23:21:06 +01:00
hls: Create an AVProgram for each variant
Without the information, an application may choose audio from one variant and video from another variant, which leads to fetching two variants from the network. This enables av_find_best_stream() to find matching audio and video streams, so that only one variant is fetched. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
9d64f23629
commit
c110cbf6b5
1 changed files with 9 additions and 0 deletions
|
|
@ -489,6 +489,8 @@ static int hls_read_header(AVFormatContext *s)
|
|||
struct variant *v = c->variants[i];
|
||||
AVInputFormat *in_fmt = NULL;
|
||||
char bitrate_str[20];
|
||||
AVProgram *program;
|
||||
|
||||
if (v->n_segments == 0)
|
||||
continue;
|
||||
|
||||
|
|
@ -528,6 +530,12 @@ static int hls_read_header(AVFormatContext *s)
|
|||
if (ret < 0)
|
||||
goto fail;
|
||||
snprintf(bitrate_str, sizeof(bitrate_str), "%d", v->bandwidth);
|
||||
|
||||
program = av_new_program(s, i);
|
||||
if (!program)
|
||||
goto fail;
|
||||
av_dict_set(&program->metadata, "variant_bitrate", bitrate_str, 0);
|
||||
|
||||
/* Create new AVStreams for each stream in this variant */
|
||||
for (j = 0; j < v->ctx->nb_streams; j++) {
|
||||
AVStream *st = avformat_new_stream(s, NULL);
|
||||
|
|
@ -536,6 +544,7 @@ static int hls_read_header(AVFormatContext *s)
|
|||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
ff_program_add_stream_index(s, i, stream_offset + j);
|
||||
st->id = i;
|
||||
avpriv_set_pts_info(st, ist->pts_wrap_bits, ist->time_base.num, ist->time_base.den);
|
||||
avcodec_copy_context(st->codec, v->ctx->streams[j]->codec);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue