From patchwork Mon Jan 23 05:55:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wentao Tang X-Patchwork-Id: 2287 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp1090415vsb; Sun, 22 Jan 2017 21:55:48 -0800 (PST) X-Received: by 10.28.230.91 with SMTP id d88mr11360193wmh.129.1485150948191; Sun, 22 Jan 2017 21:55:48 -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 p12si17492354wrd.158.2017.01.22.21.55.47; Sun, 22 Jan 2017 21:55:48 -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 D103E68A7BF; Mon, 23 Jan 2017 07:55:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from COL004-OMC4S17.hotmail.com (col004-omc4s17.hotmail.com [65.55.34.219]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0D6DB689FAA for ; Mon, 23 Jan 2017 07:55:25 +0200 (EET) Received: from APC01-PU1-obe.outbound.protection.outlook.com ([65.55.34.200]) by COL004-OMC4S17.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Sun, 22 Jan 2017 21:55:36 -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=ioohngZPJtVoWZKAkWqqDJNfFHY4CcaHDO4tixz6158=; b=tCHRdwJebfux+srrhorJ7F5QnYnO7LILWmd8ofrYqICrC8DfYCAyxabRzQNojkH/Cz1OteiO3ecn89PVS4clN7yT+mn5pvbki/2cANyFoaqVb9o5lzORO7SB0XjFayElqg2KgO4l7LILjiW2ktgexalzg25ATUaPMnGt8aDjRJy/HC0R3hW9eE6hCRzoAhiZVZe7DJCB0KlHmhmv4NR8sQfpzKL8/In40i0RKCkGA5dK4v7jos+0NTA55+hecie1TJhYmDHgVSbKH6xGzIQFn5QdKiVfIpYve1kXnOpq34EOlco9aVv/1QaTlTaPbrJSVzvtXvx23Oo9CcGvPd0dkQ== Received: from PU1APC01FT043.eop-APC01.prod.protection.outlook.com (10.152.252.57) by PU1APC01HT106.eop-APC01.prod.protection.outlook.com (10.152.253.22) 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 05:55:34 +0000 Received: from HK2PR0401MB1316.apcprd04.prod.outlook.com (10.152.252.57) by PU1APC01FT043.mail.protection.outlook.com (10.152.253.6) 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 05:55:33 +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 05:55:34 +0000 From: Wentao Tang To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] libavformat/rtmppkt.c ff_rtmp_packet_write write RTMP_PS_ONEBYTE chunks based on hypothesis than channel_id < 64. Thread-Index: AQHSdTyHFx2Kg5xaUkiifjcxJCp1dg== Date: Mon, 23 Jan 2017 05:55:33 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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:F7BA67F946E66EA1D02DC3F9E1A863E78B0103C039032FD09991F154E400ADFA; UpperCasedChecksum:F42779765A91B997C79E24F59337BDCE37238F117887D3F2BA8BAC1A5888DA61; SizeAsReceived:7678; Count:37 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [1iuNSpKMYgNq3SQqdQvd1yPr/+fzicyKtPZSz5/dKi0=] x-incomingheadercount: 37 x-eopattributedmessage: 0 x-microsoft-exchange-diagnostics: 1; PU1APC01HT106; 7:V5f7pMn+vzmzZcbdliyeZISBUFqJhmSAIrjnPNUrOYz1IqBOzXXYzzqJMNMFZapZUQtQrcQXw2w1M+E/M/mJAYzqN4M8qgm/iVvaZw1f0AShj9ZK9keC8kTd8/zFQv3UtkGYd3rqRDGcvH1wamnsu8jv4QH0UHBjGhd4tgBk6dkvaxhJl2AVaK/CCnkGSCFW9W6qWrMgldeZD+GK4zsS0Fda93IpXPh1WGwaaH8GvIGhyMAGEY56Tn1ikOuhF1rNab1oJgnjpwRIxwzcg5ZjddIgKf8P/4Tz7cSJPiy+DxMFhurkYnw7fijKhdCc34x77HF2619hlM21+zyITcJwdOUkI36Y1KaxN8lSnlcsmQslFINWy6uY55BzpZCFsx/jfsPgPEn+G1uB8rPC+dag1U8FXM8neGK+jY2RHcZ+eCXavATzFz2l0UmWOtyuqsu7SsC63FHyc+bo19lf93fXJA== x-forefront-antispam-report: EFV:NLI; SFV:NSPM; SFS:(10019020)(98900005); DIR:OUT; SFP:1102; SCL:1; SRVR:PU1APC01HT106; H:HK2PR0401MB1316.apcprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; x-ms-office365-filtering-correlation-id: b6d363a5-6c92-4643-3ea0-08d443547254 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(1601124038)(5061506344)(5061507293)(1603103113)(1603101340)(1601125047)(1701031023); SRVR:PU1APC01HT106; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(444111334)(444112120)(432015012)(82015046); SRVR:PU1APC01HT106; BCL:0; PCL:0; RULEID:; SRVR:PU1APC01HT106; 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 05:55:33.9331 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: PU1APC01HT106 X-OriginalArrivalTime: 23 Jan 2017 05:55:36.0673 (UTC) FILETIME=[516D2D10:01D2753D] X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: [FFmpeg-devel] [PATCH] libavformat/rtmppkt.c ff_rtmp_packet_write write RTMP_PS_ONEBYTE chunks based on hypothesis than channel_id < 64. 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 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? here is the patch(already tested by changing RTMP_VIDEO_CHANNEL >64 even >256): 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);