[FFmpeg-devel] [PATCH] libavformat/mpegts.c: fix hardcoded 5-bytes skip for metadata streams.
Romain Beauxis
toots at rastageeks.org
Wed Jun 21 02:58:12 EEST 2023
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
>>
>>
>> _______________________________________________
>> 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