From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id CF12F4BA3E for ; Tue, 26 Aug 2025 11:12:13 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'mty/rajDNSljcbZ2qoLhY03qxah5K9jJtozwB8YOhJs=', expected b'GCPWNv4H6vKWhJj/cHTt0PGy4tqljAEBl207BF+tKyI=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1756206680; h=mime-version : to : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=mty/rajDNSljcbZ2qoLhY03qxah5K9jJtozwB8YOhJs=; b=MFkshReYsyCix4Ko3XJ3YghqwaEVqH1UcJ6dAVmUeQJ4ERo4c+uRJBjW0gG0kULOpo+5x 3DGpJd72RVK1XlMS60OcEE1vKg3p5Dxt8X1uWhM9FZEDwRGa/8p9bmXWpBXa0Bznz+BPWxb hRBEA903d/gn4Szhhy45ZCbD3z5cprg67nPPYj5ErXbfVstSq8sr1b4Ocn/33LorqIYdY6H 1UwN9fEH4k10WxAMsV/YKe3GsNZrws4J02WXmqZqd9/x3dWC94JLMS0kkDsrl9kjHKa97V0 FX/lw6TDoJcLiX5SYJdjoonFuaE3Bbgz/Y0wttp8mquSmbB87o2b4niCU8AA== Received: from [172.18.0.4] (unknown [172.19.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 4204268E79B; Tue, 26 Aug 2025 14:11:20 +0300 (EEST) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1756206650; b=fplXWgpfa2EjOd/s99HMj/+KO/9k4/juFkTu6kuoU9sk6iHzJslKlIfOogHcsg9mHsG4F BWaALVmWighD3fL353JwUOyoMDd0zfM5R0omcnRUhymQnPGtPrcT58z3ODZzx/4x2mPx/YM o2dQbHbcN8K8tjzw1jpQwcIA+E2W0+VXvGqMjEBb2/Yj6QuO5IkakcDc9BNx+3uFV82T9SE hSKCAyiJvYKgRMF6zuJQ5GZhyTu4T5tYAxYISzxLhnXjBaf+MmjgmbakdWGoeujdPNiIr2/ BZ68h48dl1ETYQGcR1gTRoA7vEpce7lm3yEySsSoipZqJ7cAOBer/WOwx8RA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1756206650; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=eJnsE1lILxLo/07XnOwM73hre72cH/P1rJZtpmSgGeM=; b=Dt0p9d4o3z66qWVXcZ1RCPU5ru6mD3bgX3oKtgSIc23INL8ObCxXy+AM7qvheEth4V5I0 tUMJBzSjkfn62HN0aNg6tCLo5B+RjFzIIaQ5S73WVtoYEnV+J6QrRqT2Dkllpy2O5YuMNXK S2QahS/arH3ywznqGobsP8JSh/rdKmTgZiXqRhUq/H5pST/29HCORYNiH2/Pp7SQQk6xNLt 4CTY7J4hKjjws0c2FByzdfXta928CiGNcanClf1EXNXWK+Kbs79lRJ/mFmLaNEbwTP2Xz80 oSRZa3jPulYaDFHoO/5jAVEj+Aolb1gayFfFU0NzdfSvY5Ow7z8Bup75D0sQ== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=none Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1756206638; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : from; bh=GCPWNv4H6vKWhJj/cHTt0PGy4tqljAEBl207BF+tKyI=; b=BzviVWM87/aH4RxWznmFad6UGLdR+4clcR/uvO5XAuCPssToG9r102DOYACGb1FVueRVm 4pnrx/UPn68f4UC2yxwCdcTPI361n8oMMdOmchArbWnqwIgnRH+6UQ54+5ioPr/XWK4R4OT TRW3eJvvK+DkPAlzFP+/GteJuR8yFeVDGAtkdmW6/mDJ6xMZ3VSwM7d9jat8tQsVBMK+gBm FcDQkjLg5+4E9U2WL2LzNtpDf2hvCPrjNMUAwTv1edzZzpHI1mzV5o9wQGXRnTBG35oIpHc JpK6Esf4Y3CPzbDdIBd58uYSQeQmsTsIIwgQj51Zjn2iwGkaDfeS1XbV2rww== Received: from 0f4167fb2350 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id B1A4568E723 for ; Tue, 26 Aug 2025 14:10:38 +0300 (EEST) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Message-ID: <175620663902.34.10087014612919019866@5a0384606a8e> Message-ID-Hash: F3T3X5SFYDVPXWVX4JSDPNOTMQSUHRDC X-Message-ID-Hash: F3T3X5SFYDVPXWVX4JSDPNOTMQSUHRDC X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] avformat/mpegts: Passthrough SCTE 35 (PR #20342) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: pierrelefevre via ffmpeg-devel Cc: pierrelefevre Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #20342 opened by pierrelefevre URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20342 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20342.patch Current behavior breaks SCTE 35 streams by wrapping the data in a PES packet. This MR lets SCTE 35 pass through cleanly without modification. >>From da29faa314e3abc5f325a0988ac1424d8e4a0746 Mon Sep 17 00:00:00 2001 From: Pierre Le Fevre Date: Wed, 11 Jun 2025 15:25:13 +0200 Subject: [PATCH] avformat/mpegts: Passthrough SCTE 35 Current behavior breaks SCTE 35 by wrapping it in a PES packet, this adds the logic for the SCTE 35 messages to be passed through cleanly. Signed-off-by: Pierre Le Fevre --- libavformat/mpegtsenc.c | 27 +++++++++++++++++++++++++++ libavformat/mux.c | 6 ++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 6935b71cfe..ba28e17696 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -84,6 +84,7 @@ typedef struct MpegTSWrite { MpegTSSection pat; /* MPEG-2 PAT table */ MpegTSSection sdt; /* MPEG-2 SDT table context */ MpegTSSection nit; /* MPEG-2 NIT table context */ + MpegTSSection scte35; MpegTSService **services; AVPacket *pkt; int64_t sdt_period; /* SDT period in PCR time base */ @@ -443,6 +444,9 @@ static int get_dvb_stream_type(AVFormatContext *s, AVStream *st) stream_type = STREAM_TYPE_PRIVATE_DATA; } break; + case AV_CODEC_ID_SCTE_35: + stream_type = STREAM_TYPE_SCTE_DATA_SCTE_35; + break; default: av_log_once(s, AV_LOG_WARNING, AV_LOG_DEBUG, &ts_st->data_st_warning, "Stream %d, codec %s, is muxed as a private data stream " @@ -530,6 +534,13 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) *q++ = 0xfc; // private_data_byte } + for (i = 0; i < s->nb_streams; i++) { + if(s->streams[i]->codecpar->codec_id==AV_CODEC_ID_SCTE_35) { + put_registration_descriptor(&q, MKTAG('C', 'U', 'E', 'I')); + break; + } + } + val = 0xf000 | (q - program_info_length_ptr - 2); program_info_length_ptr[0] = val >> 8; program_info_length_ptr[1] = val; @@ -1160,6 +1171,11 @@ static int mpegts_init(AVFormatContext *s) ts->nit.write_packet = section_write_packet; ts->nit.opaque = s; + ts->scte35.cc = 15; + ts->scte35.discontinuity= ts->flags & MPEGTS_FLAG_DISCONT; + ts->scte35.write_packet = section_write_packet; + ts->scte35.opaque = s; + ts->pkt = ffformatcontext(s)->pkt; /* assign pids to each stream */ @@ -2195,6 +2211,17 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) mpegts_write_pes(s, st, buf, size, pts, dts, pkt->flags & AV_PKT_FLAG_KEY, stream_id); return 0; + } else if (st->codecpar->codec_id == AV_CODEC_ID_SCTE_35) { + uint8_t q[1024]; + unsigned int len; + + len = pkt->size; + memcpy(q, pkt->data, len); + + ts->scte35.pid = ts_st->pid; + + mpegts_write_section(&ts->scte35, q, len); + return 0; } if (ts_st->payload_size && (ts_st->payload_size + size > ts->pes_payload_size || diff --git a/libavformat/mux.c b/libavformat/mux.c index db3b6c2bfe..411c9674df 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -325,7 +325,8 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options) } if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT && - par->codec_id != AV_CODEC_ID_SMPTE_2038) + par->codec_id != AV_CODEC_ID_SMPTE_2038 && + par->codec_id != AV_CODEC_ID_SCTE_35) fci->nb_interleaved_streams++; } fci->interleave_packet = of->interleave_packet; @@ -959,7 +960,8 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *pkt, } else if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT && par->codec_id != AV_CODEC_ID_VP8 && par->codec_id != AV_CODEC_ID_VP9 && - par->codec_id != AV_CODEC_ID_SMPTE_2038) { + par->codec_id != AV_CODEC_ID_SMPTE_2038 && + par->codec_id != AV_CODEC_ID_SCTE_35) { ++noninterleaved_count; } } -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org