[FFmpeg-devel] [PATCH] lavf/dashenc.c: Fix creating audio-only HLS playlists
Przemysław Sobala
przemyslaw.sobala at gmail.com
Mon May 24 15:39:06 EEST 2021
Hello all,
I wanted to follow Carl's advice (
https://trac.ffmpeg.org/ticket/9252#comment:4) and prepared a patch with
hidden indentation changes, via git format-patch --ignore-space-change
origin/master (see my previous message) but that patch does not apply then.
So once again I'm sending the whole patch that applies correctly, as an
attachment.
Really, contributing to FFmpeg should be made easier (e.g. reviewing
indentation changes is easy when sent as GitHub merge request)
--
Best regards.
Przemysław Sobala
On Fri, 21 May 2021 at 13:46, Przemysław Sobala <przemyslaw.sobala at gmail.com>
wrote:
> With audio/video HLS playlists, audio chunklists are treated as
> alternative renditions for video chunklists. This is wrong for
> audio-only HLS playlists.
>
> fixes: 9252
>
> Please correct indentation of introduced if statement's body, before
> applying.
> ---
> libavformat/dashenc.c | 39 +++++++++++++++++++++++++++++++++++----
> 1 file changed, 35 insertions(+), 4 deletions(-)
>
> diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
> index 07f191e2a2..c5da02840b 100644
> --- a/libavformat/dashenc.c
> +++ b/libavformat/dashenc.c
> @@ -1256,10 +1256,6 @@ static int write_manifest(AVFormatContext *s, int
> final)
>
> if (c->hls_playlist) {
> char filename_hls[1024];
> - const char *audio_group = "A1";
> - char audio_codec_str[128] = "\0";
> - int is_default = 1;
> - int max_audio_bitrate = 0;
>
> // Publish master playlist only the configured rate
> if (c->master_playlist_created && (!c->master_publish_rate ||
> @@ -1282,6 +1278,13 @@ static int write_manifest(AVFormatContext *s, int
> final)
>
> ff_hls_write_playlist_version(c->m3u8_out, 7);
>
> + if (c->has_video) {
> + // treat audio streams as alternative renditions for video
> streams
> + const char *audio_group = "A1";
> + char audio_codec_str[128] = "\0";
> + int is_default = 1;
> + int max_audio_bitrate = 0;
> +
> for (i = 0; i < s->nb_streams; i++) {
> char playlist_file[64];
> AVStream *st = s->streams[i];
> @@ -1336,6 +1339,34 @@ static int write_manifest(AVFormatContext *s, int
> final)
> playlist_file, agroup,
> codec_str_ptr, NULL, NULL);
> }
> +
> + } else {
> + // treat audio streams as separate renditions
> +
> + for (i = 0; i < s->nb_streams; i++) {
> + char playlist_file[64];
> + char codec_str[128];
> + AVStream *st = s->streams[i];
> + OutputStream *os = &c->streams[i];
> + int stream_bitrate = os->muxer_overhead;
> + if (os->bit_rate > 0)
> + stream_bitrate += os->bit_rate;
> + else if (final)
> + stream_bitrate += os->pos * 8 * AV_TIME_BASE /
> c->total_duration;
> + else if (os->first_segment_bit_rate > 0)
> + stream_bitrate += os->first_segment_bit_rate;
> + if (st->codecpar->codec_type != AVMEDIA_TYPE_AUDIO)
> + continue;
> + if (os->segment_type != SEGMENT_TYPE_MP4)
> + continue;
> + av_strlcpy(codec_str, os->codec_str, sizeof(codec_str));
> + get_hls_playlist_name(playlist_file,
> sizeof(playlist_file), NULL, i);
> + ff_hls_write_stream_info(st, c->m3u8_out, stream_bitrate,
> + playlist_file, NULL,
> + codec_str, NULL, NULL);
> + }
> + }
> +
> dashenc_io_close(s, &c->m3u8_out, temp_filename);
> if (use_rename)
> if ((ret = ff_rename(temp_filename, filename_hls, s)) < 0)
> --
> 2.31.1
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-lavf-dashenc.c-Fix-creating-audio-only-HLS-playlists.patch
Type: text/x-patch
Size: 8528 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20210524/d0dda5e4/attachment.bin>
More information about the ffmpeg-devel
mailing list