[FFmpeg-devel] [PATCH] avformat/mpegts: detect synchronous metadata KLV more reliably

Marton Balint cus at passwd.hu
Sat Mar 2 20:39:27 EET 2024



On Fri, 1 Mar 2024, Marton Balint wrote:

> The mpegts code historically tries to strip (the first) metadata access unit
> header from synchronous KLV metadata, but the detection for such streams was
> unreliable causing strips of asynchronous metadata or ID3 as well.
>
> MISB ST 1402 specifies required stream type, stream id and registration
> descriptor (which eventually maps to the codec ID) so let's use all of these
> for reliable detection.
>
> Fixes ticket #10828, #10883.
>
> Signed-off-by: Marton Balint <cus at passwd.hu>
> ---
> libavformat/mpegts.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
> index 836d5dd5a3..01f6c04223 100644
> --- a/libavformat/mpegts.c
> +++ b/libavformat/mpegts.c
> @@ -1307,8 +1307,11 @@ skip:
>                     p += sl_header_bytes;
>                     buf_size -= sl_header_bytes;
>                 }
> -                if (pes->st->codecpar->codec_id == AV_CODEC_ID_SMPTE_KLV && buf_size >= 5) {
> -                    /* skip metadata access unit header */
> +                if (pes->stream_type == STREAM_TYPE_METADATA &&
> +                    pes->stream_id == STREAM_ID_METADATA_STREAM &&
> +                    pes->st->codecpar->codec_id == AV_CODEC_ID_SMPTE_KLV &&
> +                    buf_size >= 5) {
> +                    /* skip metadata access unit header - see MISB ST 1402 */
>                     pes->pes_header_size += 5;
>                     p += 5;
>                     buf_size -= 5;

Will apply.

Regards,
Marton


More information about the ffmpeg-devel mailing list