[FFmpeg-devel] [PATCH] libavformat/mpegts.c: fix hardcoded 5-bytes skip for metadata streams.

Paul B Mahol onemda at gmail.com
Tue Jun 20 10:09:52 EEST 2023


On Tue, Jun 20, 2023 at 7:19 AM <toots at rastageeks.org> wrote:

> From: Romain Beauxis <toots at rastageeks.org>
>
> Before the introduction of AV_CODEC_ID_TIMED_ID3 for timed_id3 metadata
> streams
> in mpegts (commit 4a4437c0fbc8f7afe0c533070395a42e56b4ee75),
> AV_CODEC_ID_SMPTE_KLV
> was the only existing codec for metadata.
>
> It seems that this codec has a 5-bytes metadata header[1] that, for some
> reason,
> was always skipped when decoding data packets.
>
> However, when working with a AV_CODEC_ID_TIMED_ID3 streams, this results
> in the
> 5 first bytes of the payload being cut-off, which includes essential
> informations
> such as the ID3 tag version.
>
> This patch fixes the issue by keeping the 5-bytes skip only for
> AV_CODEC_ID_SMPTE_KLV
> streams.
>
> To test:
> 1. download this file:
> https://www.dropbox.com/s/jy8sih3pe8qskxb/bla.ts?dl=1
>
> This file was download from:
> http://playertest.longtailvideo.com/adaptive/wowzaid3/playlist.m3u8
>
> 2. run this command:
>   ffprobe -show_streams -select_streams 0 -show_packets -show_private_data
> \
>           -show_data /path/to/bla.ts
>
> Before:
> [PACKET]
> codec_type=data
> stream_index=0
> pts=494646418
> pts_time=5496.071311
> dts=494646418
> dts_time=5496.071311
> duration=N/A
> duration_time=N/A
> size=21
> pos=482784
> flags=K__
> data=
> 00000000: 0000 0000 1054 4954 3200 0000 0600 0003  .....TIT2.......
> 00000010: 7465 7374 00                             test.
>
> After:
> [PACKET]
> codec_type=data
> stream_index=0
> pts=494646418
> pts_time=5496.071311
> dts=494646418
> dts_time=5496.071311
> duration=N/A
> duration_time=N/A
> size=26
> pos=482784
> flags=K__
> data=
> 00000000: 4944 3304 0000 0000 0010 5449 5432 0000  ID3.......TIT2..
> 00000010: 0006 0000 0374 6573 7400                 .....test.
>
> ---
>  libavformat/mpegts.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
> index fb8b0bf8fd..0b3edda817 100644
> --- a/libavformat/mpegts.c
> +++ b/libavformat/mpegts.c
> @@ -1305,7 +1305,7 @@ skip:
>                      p += sl_header_bytes;
>                      buf_size -= sl_header_bytes;
>                  }
> -                if (pes->stream_type == 0x15 && buf_size >= 5) {
> +                if (pes->st->codecpar->codec_id == AV_CODEC_ID_SMPTE_KLV
> && buf_size >= 5) {
>                      /* skip metadata access unit header */
>                      pes->pes_header_size += 5;
>                      p += 5;
> --
> 2.39.2 (Apple Git-143)
>

LGTM


>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>


More information about the ffmpeg-devel mailing list