From patchwork Mon Nov 8 06:35:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maksym Veremeyenko X-Patchwork-Id: 31328 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5e:dc01:0:0:0:0:0 with SMTP id b1csp3343894iok; Sun, 7 Nov 2021 22:35:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJxdEwcC5OwU/C1bECl8v+UxRs4iGmrhVKpfxCTy81/Uuq6GSO4xYpJYU8U6JLnuIWaAJh5+ X-Received: by 2002:a17:906:6549:: with SMTP id u9mr93980707ejn.514.1636353343897; Sun, 07 Nov 2021 22:35:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636353343; cv=none; d=google.com; s=arc-20160816; b=pSGKzKdko8D2bL8wAIAjvHE/KdxGB+kWkL6lSVIkazGiz5Z3FI7m24oS4KMrQIhMXr CrFzCKGO2dhDDAf3CfZt+sU/FWnmlfP/FoER4TsdMJ1jvEDrJclQNsVy3RfEoT1LJhTU td9PqDMP9rsxAQVA2LIV4xddfN2ONpam111R6N/+c+wbPJgOjh042IC5k4/KgI7Ob2fE Syl6NN2xqz/Jm30XZqWZxpEpdw8KNmFGvnJmhICOFy4lYGiX38T/IfqfiSUw3LkU9bxW 7Ip2AH9g5lPV7/S8XzdSXSLnQwiuT10D8R1yT/5d8gmTXoY7957FSibXQau9pdqzqVoZ 6t3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:from:to :content-language:user-agent:mime-version:date:message-id :delivered-to; bh=ZwRPWEevk2u1E+utQ2+Mah/jxJQ3UZAnSfmPTbI8UIw=; b=0R/Zsd5dA+S0NkS7er4tTJnHPzj6BtRyUw1xtACxU5t0E0pb7y1/KZi6IC6wlOUE32 tHwwV6LmIG8Yq8No62aejcKUSgtStuA/N8jq+2BdIU04NdXrV8ueSLvDGNIGqpDCg6ej V9vzNxa9vUWUyCUZzWRXIkf5Fjfs2D1zapkrQ7xxC/oRymRllQMQs24+gQCc9hONJ9IH uB8WTGqufJW/87aV28H7SKeioTzm6n+f9PDYyBenHS/IH8+Zlzd8kh57TnW5FdulMb3a MfTHLbh8ghU8aycxL0Q8tKKvFaf8GSsURNxZnJVbTg2lLNGKI92kiqDy2yZSbObQsJ0y 57aA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c25si23453432edr.452.2021.11.07.22.35.43; Sun, 07 Nov 2021 22:35:43 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B7D40689818; Mon, 8 Nov 2021 08:35:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from kazbek.m1stereo.tv (mail.m1stereo.tv [91.244.124.37]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C1895689CDF for ; Mon, 8 Nov 2021 08:35:33 +0200 (EET) Received: from [10.1.5.65] (dev-3.internal.m1stereo.tv [10.1.5.65]) by kazbek.m1stereo.tv (8.14.4/8.14.4) with ESMTP id 1A86ZWlC018993 for ; Mon, 8 Nov 2021 08:35:32 +0200 Message-ID: <2a3fb2cb-1f37-a3f5-950a-8e6c943f3fd4@m1stereo.tv> Date: Mon, 8 Nov 2021 08:35:32 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.0 Content-Language: en-US To: FFmpeg development discussions and patches From: Maksym Veremeyenko Subject: [FFmpeg-devel] [PATCH] avformat/mpegtsenc: Implement muxing SCTE-35 and EPG packets X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ziQLYnw1/vlo Hi, Attached patch implement muxing SCTE-35 and EPG packets into mpegts stream. diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index e3fba54..1fe3f55 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -429,6 +429,12 @@ 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 = 0x86; + break; + case AV_CODEC_ID_EPG: + stream_type = 0; + 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 " @@ -514,6 +520,16 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) *q++ = 0xfc; // private_data_byte } + /* put scte-35 registration tag */ + for (i = 0; i < s->nb_streams; i++) { + AVStream *st = s->streams[i]; + + if (st->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; @@ -547,6 +563,9 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) stream_type = ts->m2ts_mode ? get_m2ts_stream_type(s, st) : get_dvb_stream_type(s, st); + if (!stream_type) + continue; + *q++ = stream_type; put16(&q, 0xe000 | ts_st->pid); desc_length_ptr = q; @@ -2099,6 +2118,34 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) ts_st->dvb_ac3_desc = dvb_ac3_desc; } av_free(hdr); + } else if (st->codecpar->codec_id == AV_CODEC_ID_SCTE_35) { + MpegTSSection sec; + + sec.pid = ts_st->pid; + sec.cc = ts_st->payload_size; + sec.discontinuity= ts->flags & MPEGTS_FLAG_DISCONT; + sec.write_packet = section_write_packet; + sec.opaque = s; + + mpegts_write_section(&sec, pkt->data, pkt->size); + + ts_st->payload_size = sec.cc; + + return 0; + } else if (st->codecpar->codec_id == AV_CODEC_ID_EPG) { + MpegTSSection sec; + + sec.pid = EIT_PID; + sec.cc = ts_st->payload_size; + sec.discontinuity= ts->flags & MPEGTS_FLAG_DISCONT; + sec.write_packet = section_write_packet; + sec.opaque = s; + + mpegts_write_section(&sec, pkt->data, pkt->size); + + ts_st->payload_size = sec.cc; + + return 0; } if (ts_st->payload_size && (ts_st->payload_size + size > ts->pes_payload_size ||