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

James Almer jamrial at gmail.com
Wed Jun 21 03:09:26 EEST 2023


On 6/20/2023 8:58 PM, Romain Beauxis wrote:
> Le mar. 20 juin 2023 à 02:10, Paul B Mahol <onemda at gmail.com> a écrit :
>>
>>
>>
>> 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
> 
> Great, thanks!
> 
> Anything I can do to help move this to the finish line?
> 
> Thanks,
> -- Romain

Pushed, thanks.


More information about the ffmpeg-devel mailing list