From patchwork Mon Jan 23 09:34:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wentao Tang X-Patchwork-Id: 2292 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp1151317vsb; Mon, 23 Jan 2017 01:34:42 -0800 (PST) X-Received: by 10.28.182.6 with SMTP id g6mr12007767wmf.11.1485164082105; Mon, 23 Jan 2017 01:34:42 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r1si18132732wra.91.2017.01.23.01.34.41; Mon, 23 Jan 2017 01:34:42 -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; dkim=neutral (body hash did not verify) header.i=@hotmail.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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1DCB568A1A6; Mon, 23 Jan 2017 11:34:27 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from COL004-OMC3S8.hotmail.com (col004-omc3s8.hotmail.com [65.55.34.146]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B61C268A0DE for ; Mon, 23 Jan 2017 11:34:19 +0200 (EET) Received: from APC01-HK2-obe.outbound.protection.outlook.com ([65.55.34.136]) by COL004-OMC3S8.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Mon, 23 Jan 2017 01:34:30 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=NME0nGo0vXI+W+TPJGA2HNvVG/2OEi3J/VNdrMVs6uo=; b=jZZ2kSQtneCZI6cLakSt9ytTfy788ISX2qOendYQegGFubYMjqQXzP9OvU706VmbJJ2IDPE0i+1MNV5vO4HD6jTsjly/D+q9ABZKaVUv8s089Iv1ZsJ3FKEu1baFWC8rwCOimNoO/LFA6owRLZqzZ/EM8ldzNOF8O1KSKa1Lz78MOqCLbSPXR4d9VKFxEWxXdaE//iidcGSDIi4ocmua7wbDoeWVg0RkabczOsLJoScqgy6UHv0ojzU+bMFaV3+jgjOjgDqVo0KQUNTx4e6+anzBVU4n/6KsYaVWVvJcqFeILRt8gEcLM/MD2CynsP9QjO77VuhDqWNgeFvECQFoJg== Received: from PU1APC01FT046.eop-APC01.prod.protection.outlook.com (10.152.252.54) by PU1APC01HT044.eop-APC01.prod.protection.outlook.com (10.152.253.134) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.8; Mon, 23 Jan 2017 09:34:27 +0000 Received: from HK2PR0401MB1316.apcprd04.prod.outlook.com (10.152.252.60) by PU1APC01FT046.mail.protection.outlook.com (10.152.253.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.8 via Frontend Transport; Mon, 23 Jan 2017 09:34:27 +0000 Received: from HK2PR0401MB1316.apcprd04.prod.outlook.com ([10.165.180.10]) by HK2PR0401MB1316.apcprd04.prod.outlook.com ([10.165.180.10]) with mapi id 15.01.0860.021; Mon, 23 Jan 2017 09:34:27 +0000 From: Wentao Tang To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] ff_rtmp_packet_write do not allow channel_id larger than 64 when send chunk with header type 3. Thread-Index: AQHSdVvj4ZrD8FnHUESMrkT+cEI3dg== Date: Mon, 23 Jan 2017 09:34:27 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-slblob-mailprops: LzDHi3doVoKNITvhEhV0WQakOmS5WpdJ585bLDS9J5vvUhWNr8McCjGKagVx0EVuAc5oOqHGEbWpeiTRzOzv6DkD4TxUbdZdQshSLa7ChZjdmPRE/tM8/Q4fpmAQxs8syyLb5dwfJQupfIpaBJrb19KJ7VX0aIeEWA4szoVZZWRlIZp9603VA1c9+OYRlEHzlc2XKLICSyTTfQg48nWxCRmuXrpS7q3zR1PslvN2xszd0pTvawibKuM2r96ANkgXeWM5h3NQG8cI+1JUJrtfeHzZKiqS/qaGtFThsvex74YrhDj9PjLKglugSZKm77BvNval6iVZFNZUJaM1zIQu+X0EE8I+EAgokXgVMzprCIp3e/aPtsJN8Kzm753xZjBXlJCDOFpeKFRK8atd6kiB93jPFYYvmmhHqe+mxQ6uamgM+vrFmmiTLiBqLRRh5sxlFMC700NjldwjMpYybtB2pj85mYnoqpyPWhhq61AHPcmQ7nAxB6ZfKVdwU91xRc0JzNDFtY4hfqS8I++Q830593PSaT646ukRBnuTcR8x9URFqLPhPuP0//W4xea8A1OGaCbjFLoY+6IuW80UvwKf7RTVHYECpD80j3mtkJ7Wv1DkFpRvlQ9jkHomxGlMU/CAQUJfXGYGbGt3hV3KkbBZFJv1HR1A54byWVme0mfdPDkVxWKZcA4u5Qzf4pnPWUInooMawkRs9fbbjpRqs+bGS53b0PVh/qi/DNfo93jNz9A= authentication-results: ffmpeg.org; dkim=none (message not signed) header.d=none; ffmpeg.org; dmarc=none action=none header.from=hotmail.com; x-incomingtopheadermarker: OriginalChecksum:372E20CC2493908CA7C1183F7CA6004DEDA10C3E984F619F189AA376C57686A7; UpperCasedChecksum:5A3EA1B7AA893AA1F708D411FC22E633A5DA2BA348B444BFD0E9DD2643F4C3C2; SizeAsReceived:8264; Count:36 x-ms-exchange-messagesentrepresentingtype: 1 x-incomingheadercount: 36 x-eopattributedmessage: 0 x-microsoft-exchange-diagnostics: 1; PU1APC01HT044; 7:RhtPGuhcrf7cbqShE4slAwi/S67wnhx77H3v0e5yDSVgyD5AHKBGBjPp0qDnQLu3X3Yi1ymSt/9BZ1V6Dzc513TMk1a1leRmt4JiJ4KfdTgMfR34uNvU1pwLvmN8HOZB6z9FeGnG+lIZaTUdDwI4fqTzvUovClLCnmbS2XUdVu+c0LQNN9KvPKFQCCN+nPVXtyVarD7J7VgJRZNy15Tb0sPcbN2lfy2MpgZhAguAGlho06y3PnTEdUAXmXMjGO74s0EcxjBBR82iL4Ro4vi6KyhtG+7u33PbS/m9ck2oNIB/O5VVnm0JUzOjfMJ8I48eQl1sWGhDhEWocBqM+l8T1JUbgnn0sAw5yquGd5y6/W3kLHH7uXcKJ+JxSY6xYRk783HnY3OyD13rW5HhXNCRUY4Xgin9/I+JttXZNfHVtpO8e5+Wn1rLq4N6xQZJjErMC8ZC0tpr0alatFG42nQ3XQ== x-forefront-antispam-report: EFV:NLI; SFV:NSPM; SFS:(10019020)(98900005); DIR:OUT; SFP:1102; SCL:1; SRVR:PU1APC01HT044; H:HK2PR0401MB1316.apcprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; x-ms-office365-filtering-correlation-id: c8304ad9-6062-446d-a02e-08d443730472 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(1601124038)(5061506344)(5061507293)(1603103113)(1603101340)(1601125047)(1701031023); SRVR:PU1APC01HT044; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(444111334)(444112120)(432015012)(82015046); SRVR:PU1APC01HT044; BCL:0; PCL:0; RULEID:; SRVR:PU1APC01HT044; x-forefront-prvs: 0196A226D1 spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jan 2017 09:34:27.0837 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: PU1APC01HT044 X-OriginalArrivalTime: 23 Jan 2017 09:34:30.0487 (UTC) FILETIME=[E5CA2670:01D2755B] Subject: [FFmpeg-devel] [PATCH] ff_rtmp_packet_write do not allow channel_id larger than 64 when send chunk with header type 3. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Wentao Tang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Although ffmpeg use internel defined video and audio channel ids that are than less than 64, I think it's better to patch ff_rtmp_packet_write write chunk logic for more clearness? Signed-off-by: Wentao --- libavformat/rtmppkt.c | 31 +++++++++++++++++++------------ 1 files changed, 19 insertions(+), 12 deletions(-) diff --git a/libavformat/rtmppkt.c b/libavformat/rtmppkt.c index cde0da7..51288ad 100644 --- a/libavformat/rtmppkt.c +++ b/libavformat/rtmppkt.c @@ -310,6 +310,18 @@ int ff_rtmp_packet_read_internal(URLContext *h, RTMPPacket *p, int chunk_size, } } +static void ff_rtmp_packet_write_chunk_basic_header(uint8_t **p, int mode, int channel_id) { + if (channel_id < 64) { + bytestream_put_byte(p, channel_id | (mode << 6)); + } else if (channel_id < 64 + 256) { + bytestream_put_byte(p, 0 | (mode << 6)); + bytestream_put_byte(p, channel_id - 64); + } else { + bytestream_put_byte(p, 1 | (mode << 6)); + bytestream_put_le16(p, channel_id - 64); + } +} + int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt, int chunk_size, RTMPPacket **prev_pkt_ptr, int *nb_prev_pkt) @@ -354,15 +366,8 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt, } } - if (pkt->channel_id < 64) { - bytestream_put_byte(&p, pkt->channel_id | (mode << 6)); - } else if (pkt->channel_id < 64 + 256) { - bytestream_put_byte(&p, 0 | (mode << 6)); - bytestream_put_byte(&p, pkt->channel_id - 64); - } else { - bytestream_put_byte(&p, 1 | (mode << 6)); - bytestream_put_le16(&p, pkt->channel_id - 64); - } + ff_rtmp_packet_write_chunk_basic_header(&p, mode, pkt->channel_id); + if (mode != RTMP_PS_ONEBYTE) { bytestream_put_be24(&p, pkt->ts_field); if (mode != RTMP_PS_FOURBYTES) { @@ -391,10 +396,12 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt, return ret; off += towrite; if (off < pkt->size) { - uint8_t marker = 0xC0 | pkt->channel_id; - if ((ret = ffurl_write(h, &marker, 1)) < 0) + p = pkt_hdr; + ff_rtmp_packet_write_chunk_basic_header(&p, RTMP_PS_ONEBYTE, pkt->channel_id); + if ((ret = ffurl_write(h, pkt_hdr, p - pkt_hdr)) < 0) return ret; - written++; + written += p - pkt_hdr; + if (pkt->ts_field == 0xFFFFFF) { uint8_t ts_header[4]; AV_WB32(ts_header, timestamp);