| < draft-bichot-msync-03.txt | draft-bichot-msync-04.txt > | |||
|---|---|---|---|---|
| Internet-Draft S. Bale | Internet-Draft S. Bale | |||
| Intended Status: Informational R. Brebion | Intended Status: Informational R. Brebion | |||
| Expires: October 6, 2022 G. Bichot | Expires: November 3, 2022 G. Bichot | |||
| Broadpeak | Broadpeak | |||
| April 4, 2022 | May 2, 2022 | |||
| MSYNC | MSYNC | |||
| draft-bichot-msync-03 | draft-bichot-msync-04 | |||
| Abstract | Abstract | |||
| This document describes the Multicast Synchronization (MSYNC) | This document describes the Multicast Synchronization (MSYNC) | |||
| Protocol that aims at transferring video media objects over IP | Protocol that aims at transferring video media objects over IP | |||
| multicast operating preferably RTP. Although generic, MSYNC has been | multicast operating preferably RTP. Although generic, MSYNC has been | |||
| primarily designed for transporting HTTP adaptive streaming (HAS) | primarily designed for transporting HTTP adaptive streaming (HAS) | |||
| objects including manifest/playlists and media segments (e.g. MP4, | objects including manifest/playlists and media segments (e.g. MP4, | |||
| CMAF) according to an HAS protocol such as Apple HLS or MPEG DASH | CMAF) according to an HAS protocol such as Apple HLS or MPEG DASH | |||
| between a multicast server and a multicast gateway. | between a multicast server and a multicast gateway. | |||
| skipping to change at page 2, line 20 ¶ | skipping to change at page 2, line 20 ¶ | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1 Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1 Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.2 Definitions . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2 Definitions . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. MSYNC Protocol . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. MSYNC Protocol . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.1. MSYNC packet format . . . . . . . . . . . . . . . . . . . . 6 | 3.1. MSYNC Packet Format . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.2. Object info packet . . . . . . . . . . . . . . . . . . . . 7 | 3.2. Object Info Packet . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.3. Object data packet . . . . . . . . . . . . . . . . . . . . 8 | 3.3. Object Data Packet . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.4. Object HTTP header packet . . . . . . . . . . . . . . . . . 9 | 3.4. Object HTTP Header Packet . . . . . . . . . . . . . . . . . 9 | |||
| 3.5. Object data-part packet . . . . . . . . . . . . . . . . . . 10 | 3.5. Object Data-part Packet . . . . . . . . . . . . . . . . . . 10 | |||
| 3.6. Maximum size of a MSYNC packet . . . . . . . . . . . . . . 11 | 3.6. Maximum Size Of A MSYNC Packet . . . . . . . . . . . . . . 11 | |||
| 3.7. Sending MSYNC objects over IP/transport multicast | 3.7. Sending MSYNC Objects Over IP/Transport Multicast | |||
| sessions . . . . . . . . . . . . . . . . . . . . . . . . . 11 | Sessions . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.9. HAS protocol dependency . . . . . . . . . . . . . . . . . . 13 | 3.8. HAS Protocol Dependency . . . . . . . . . . . . . . . . . . 13 | |||
| 3.9.1. Object info packet . . . . . . . . . . . . . . . . . . 13 | 3.8.1. Object Info Packet . . . . . . . . . . . . . . . . . . 13 | |||
| 3.9.1.1. media sequence . . . . . . . . . . . . . . . . . . 13 | 3.8.1.1. Media Sequence . . . . . . . . . . . . . . . . . . 13 | |||
| 3.9.1.2. object URI . . . . . . . . . . . . . . . . . . . . 13 | 3.8.1.2. Object URI . . . . . . . . . . . . . . . . . . . . 14 | |||
| 3.9.2. Sending rules . . . . . . . . . . . . . . . . . . . . . 14 | 3.8.2. Sending Rules . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 3.10. RTP as the transport multicast session protocol . . . . . 14 | 3.9. RTP As The Transport Multicast Session Protocol . . . . . . 15 | |||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | |||
| 5. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 5. References . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.1. Normative References . . . . . . . . . . . . . . . . . . . 16 | 5.1. Normative References . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.2. Informative References . . . . . . . . . . . . . . . . . . 17 | 5.2. Informative References . . . . . . . . . . . . . . . . . . 18 | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 17 | 7. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
| 1 Introduction | 1 Introduction | |||
| MSYNC relies preferably on RTP that makes it particularly suited for | MSYNC relies preferably on RTP that makes it particularly suited for | |||
| transitioning IPTV legacy(MPEG2 TS/RTP) to the HAS ecosystem. MSYNC | transitioning IPTV legacy (MPEG2 TS/RTP) to the HAS ecosystem. MSYNC | |||
| is simple (no flow control, no forward error correction) although | is simple (no flow control, no forward error correction) although | |||
| reliable, flexible and extensible; it has been experimented and | reliable, flexible and extensible; it has been experimented and | |||
| deployed over IPTV infrastructure (xDSL, cable, fiber) and | deployed over IPTV infrastructure (xDSL, cable, fiber) and | |||
| satellite. | satellite. | |||
| 1.1 Terminology | 1.1 Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| 1.2 Definitions | 1.2 Definitions | |||
| manifest: A file gathering the configuration for conducting a | manifest: A file gathering the configuration for conducting a | |||
| streaming session; corresponds to a play list as defined by HLS | streaming session; corresponds to a play list as defined by HLS | |||
| [RFC8216]. During a HAS streaming session, a manifest or | [RFC8216]. During a HAS streaming session, a manifest or | |||
| playlist can be modified. | playlist can be modified. | |||
| media chunk: A piece of a media segment of a fixed duration as | media chunk: A piece of a media segment of a fixed duration as | |||
| specified in [MPEGCMAF]. | specified in [MPEGCMAF]. | |||
| skipping to change at page 6, line 13 ¶ | skipping to change at page 6, line 13 ¶ | |||
| Note that nothing precludes the multicast gateway to be co-located | Note that nothing precludes the multicast gateway to be co-located | |||
| with the media player and therefore embedded in the end-user | with the media player and therefore embedded in the end-user | |||
| terminal. | terminal. | |||
| Note that nothing precludes application dependent features in the | Note that nothing precludes application dependent features in the | |||
| multicast server and/or the multicast gateway that may adapt/modify | multicast server and/or the multicast gateway that may adapt/modify | |||
| the content delivered to the end-user player. | the content delivered to the end-user player. | |||
| 3. MSYNC Protocol | 3. MSYNC Protocol | |||
| 3.1. MSYNC packet format | 3.1. MSYNC Packet Format | |||
| The MSYNC packet has the following format. | The MSYNC packet has the following format. | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | version | packet type | object identifier | | | version | packet type | object identifier | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | sub-header | | | sub-header | | |||
| | .... | | | .... | | |||
| skipping to change at page 7, line 12 ¶ | skipping to change at page 7, line 12 ¶ | |||
| sub-header: series of N x 32 bits | sub-header: series of N x 32 bits | |||
| The packet sub-header is linked to the packet type. The details of | The packet sub-header is linked to the packet type. The details of | |||
| each packet type is given in the next sections. | each packet type is given in the next sections. | |||
| data: series of D x 8 bits | data: series of D x 8 bits | |||
| This field is optional and is present depending on the packet | This field is optional and is present depending on the packet | |||
| type. D is bounded by the maximum size of a transport multicast | type. D is bounded by the maximum size of a transport multicast | |||
| session protocol packet size and the MTU (Maximum Transfer Unit) | session protocol packet size and the MTU (Maximum Transfer Unit) | |||
| otherwise as depicted in 3.6. | otherwise as depicted in 3.6. | |||
| 3.2. Object info packet | 3.2. Object Info Packet | |||
| The Object info packet is used to transport the meta-data | The Object info packet is used to transport the meta-data | |||
| associated with an object. It permits to characterize the object | associated with an object. It permits to characterize the object | |||
| in term of e.g. size and type. The object information is carried | in term of e.g. size and type. The object information is carried | |||
| over one object info packet only. The object info packet is | over one object info packet only. The object info packet is | |||
| typically sent along with the object data it describes. | typically sent along with the object data it describes. | |||
| The object identifier corresponds to the object identifier of the | The object identifier corresponds to the object identifier of the | |||
| object data packets or the object data-part packets the object | object data packets or the object data-part packets the object | |||
| info packet relates to. | info packet relates to. | |||
| skipping to change at page 7, line 47 ¶ | skipping to change at page 7, line 47 ¶ | |||
| | media sequence | | | media sequence | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | object URI | | | object URI | | |||
| : : | : : | |||
| : : | : : | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| object size: 32 bits | object size: 32 bits | |||
| The number of bytes that compose the transported object. | The number of bytes that compose the object payload transported | |||
| with a MSYNC object data packet (Section 3.3) or MSYNC object | ||||
| data-part packet (Section 3.5). The size may be 0 indicating that | ||||
| there is no corresponding object's payload transmission foreseen | ||||
| (i.e. no expected MSYNC data or MSYNC data-part packets) . In case | ||||
| of a super object transmission (Section 3.5), If the object URI of | ||||
| an object info with an object size set to 0 matches the super | ||||
| object URI then it MUST be interpreted as the end of the super | ||||
| object transmission (Section 3.8.1.2). | ||||
| number of MSYNC packets: 32 bits | number of MSYNC packets: 32 bits | |||
| Number of MSYNC packets that compose the transported object. | Number of MSYNC packets that compose the transported object. If | |||
| the object size is null (set to 0) then the number of MSYNC | ||||
| packets MUST be null (set to 0). | ||||
| object CRC: 32 bits | object CRC: 32 bits | |||
| A CRC applied to the object data payload for corruption detection. | A CRC applied to the object data payload for corruption detection. | |||
| mtype: 4 bits | mtype: 4 bits | |||
| The manifest (playlist) type, the MSYNC INFO is compatible with. | The manifest (playlist) type, the MSYNC INFO is compatible with. | |||
| The field can take the following values. | The field can take the following values. | |||
| 0x00: Not Applicable | 0x00: Not Applicable | |||
| 0x01: MPEG Dash as specified in [MPEGDASH]. | 0x01: MPEG Dash as specified in [MPEGDASH]. | |||
| 0x02: HLS as specified in [RFC8216]. | 0x02: HLS as specified in [RFC8216]. | |||
| 0x03-0xF: Reserved | 0x03-0xF: Reserved | |||
| object URI size: 12bits | object URI size: 12bits | |||
| The size in bytes of the object URI field. The value must | The size in bytes of the object URI field. The value MUST | |||
| guarantee that the MSYNC info packet size is not greater than the | guarantee that the MSYNC info packet size is not greater than the | |||
| network MTU. | network MTU. | |||
| object type : 8 bits | object type : 8 bits | |||
| Defines the type of MSYNC data object associated with this MSYNC | Defines the type of MSYNC data object associated with this MSYNC | |||
| info packet | info packet | |||
| 0x00: Reserved | 0x00: Reserved | |||
| 0x01: media manifest (playlist) | 0x01: media manifest (playlist) | |||
| 0x02: Reserved | 0x02: Reserved | |||
| 0x03: media data or data-part: Transport stream (MPEG2-TS) | 0x03: media data or data-part: Transport stream (MPEG2-TS) | |||
| 0x04: media data or data-part: MPEG4 (CMAF) | 0x04: media data or data-part: MPEG4 (CMAF) | |||
| 0x05: control: control plane information (e.g. multicast gateway | 0x05: control: control plane information (e.g. multicast gateway | |||
| configuration) | configuration) | |||
| 0x06-0xFF: Reserved | 0x06-0xFF: Reserved | |||
| media sequence: 32 bits | media sequence: 32 bits | |||
| It is a sequence number associated with the MSYNC object data | It is a sequence number associated with the MSYNC object data | |||
| (segment or manifest). It is dependent on the mtype value. It is | (segment or manifest). It is dependent on the mtype value. It is | |||
| used to synchronize unicast and multicast receptions in the | used to synchronize unicast and multicast receptions in the | |||
| multicast gateway. The values and rules are detailed in the | multicast gateway. The values and rules are detailed in the | |||
| section 3.9 dedicated to the HAS protocol dependencies. The | section 3.8 dedicated to the HAS protocol dependencies. The | |||
| default value is 0x00. | default value is 0x00. | |||
| object URI: Quotient(object URI size/32) bits | object URI: Quotient(object URI size/32) bits | |||
| This the path name associated with the object. It may corresponds | This the path name associated with the object. It MAY corresponds | |||
| to the storage path in the multicast gateway. There MUST be a | to a storage/Cache path. There SHOULD be a direct relationship | |||
| direct relationship between this URI and the URL associated with | between this URI and the URL associated with the addressable | |||
| an addressable HAS object (segment or CMAF chunk) and/or a | object (e.g. HAS segment or CMAF chunk and/or a manifest). The | |||
| manifest request received by the multicast gateway from the | rules are detailed in the section 3.8 dedicated to the HAS | |||
| terminal/media player. The rules are detailed in the section 3.9 | protocol dependencies. | |||
| dedicated to the HAS protocol dependencies. | ||||
| 3.3. Object data packet | 3.3. Object Data Packet | |||
| This MSYNC packet carries part or all of the the object's data | This MSYNC packet carries part or all of the the object's data | |||
| payload. The type of data and the way to process the object's data | payload. The type of data and the way to process the object's data | |||
| packets is function of the associated object's info packet. Object | packets is function of the associated object's info packet. Object | |||
| payload is transported through a series of object data packets. | payload is transported through a series of object data packets. | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | version | 0x3 | object identifier | | | version | 0x3 | object identifier | | |||
| skipping to change at page 9, line 28 ¶ | skipping to change at page 9, line 37 ¶ | |||
| object offset: 32 bits | object offset: 32 bits | |||
| The index from which the MSYNC object data packet payload is to be | The index from which the MSYNC object data packet payload is to be | |||
| written in order to compose the object data at the receiver side | written in order to compose the object data at the receiver side | |||
| (i.e. the multicast gateway). The first data packet of an object | (i.e. the multicast gateway). The first data packet of an object | |||
| has an offset equal to 0. | has an offset equal to 0. | |||
| data: N x 8bits | data: N x 8bits | |||
| The size N is not declared; it is bounded by the maximum size of | The size N is not declared; it is bounded by the maximum size of | |||
| the under-laying transport multicast session packet (e.g. RTP) as | the under-laying transport multicast session packet (e.g. RTP) as | |||
| depicted in the section 3.6. The total size (number of bytes) of | depicted in Section 3.6. The total size (number of bytes) of the | |||
| the object data is indicated in the associated object info (field | object data is indicated in the associated object info (field | |||
| object size). | object size). | |||
| 3.4. Object HTTP header packet The HTTP header packet carries part or | 3.4. Object HTTP Header Packet | |||
| all of an HTTP header related to the object (data) to be sent. | ||||
| There is at most one HTTP header per object that can be repeated. | The HTTP header packet carries part or all of an HTTP header | |||
| related to the object (data) to be sent. There is at most one HTTP | ||||
| header per object that can be repeated. | ||||
| The object identifier is the same than the one present in the | The object identifier is the same than the one present in the | |||
| object data packets or object data-part packets it relates to. | object data packets or object data-part packets it relates to. | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | version | 0x5 | object identifier | | | version | 0x5 | object identifier | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | header size | header offset | | | header size | header offset | | |||
| skipping to change at page 10, line 20 ¶ | skipping to change at page 10, line 31 ¶ | |||
| header offset: 16 bits | header offset: 16 bits | |||
| The index from which this HTTP header MSYNC packet payload data is | The index from which this HTTP header MSYNC packet payload data is | |||
| to be written in order to complement the HTTP header at the | to be written in order to complement the HTTP header at the | |||
| receiver side (i.e the multicast gateway). The first packet of the | receiver side (i.e the multicast gateway). The first packet of the | |||
| HTTP header has an offset equal to 0. | HTTP header has an offset equal to 0. | |||
| data: N x 8bits | data: N x 8bits | |||
| The size N is not declared; it is bounded by either the header | The size N is not declared; it is bounded by either the header | |||
| size field value or by the maximum size of the under-laying | size field value or by the maximum size of the under-laying | |||
| transport packet(e.g. RTP)as depicted in the section 3.6. | transport packet(e.g. RTP)as depicted in Section 3.6. | |||
| 3.5. Object data-part packet | 3.5. Object Data-part Packet | |||
| This MSYNC packet carries part or all of the object data-part | This MSYNC packet carries part or all of the media data-part | |||
| payload. The type of data and the way to process the object's | object payload. The type of data and the way to process the | |||
| data-part packets is function of the associated info packet. | object's data-part packets is function of the associated info | |||
| Object payload is transported through a series of object data-part | packet. Object payload is transported through a series of object | |||
| packets. The data-part is used when the object corresponds to a | data-part packets. The data-part is used when the object | |||
| "part" (a chunk) of a super object for which the size is unknown | corresponds to a "part" (a block) of a super object for which the | |||
| (a super object may correspond to a stream or a media segment not | size is unknown (a super object may correspond to a stream or a | |||
| yet complete and for which the size is therefore unknown). | media segment not yet complete and for which the size is therefore | |||
| unknown). | ||||
| All data-part packets belonging to the same data part object has | All data-part packets belonging to the same data part object have | |||
| the same object identifier which is the same one present in the | the same object identifier that is the same one present in the | |||
| object info packet and HTTP header (if any) packets the data-part | object info packet and HTTP header (if any) packets the data-part | |||
| object relates too. | object relates too. | |||
| All data-part objects composing a super object have a different | ||||
| object identifier. The way to link data-part objects with a super | ||||
| object is thanks to the object info packet (object URI) as | ||||
| explained in Section 3.8.1.2. | ||||
| The end of super-object transmission is signaled with an object | ||||
| info packet having both the object size and the number of MSYNC | ||||
| packets set to 0 and having the object URI matching the object URI | ||||
| of the already received parts according to Section 3.8.1.2. | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | version | 0x6 | object identifier | | | version | 0x6 | object identifier | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | object offset | | | object offset | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | super object offset | | | super object offset | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | data | | | data | | |||
| skipping to change at page 11, line 15 ¶ | skipping to change at page 11, line 36 ¶ | |||
| in order to compose the object data-part at the receiver side | in order to compose the object data-part at the receiver side | |||
| (i.e. the multicast gateway). The first packet of the data-part | (i.e. the multicast gateway). The first packet of the data-part | |||
| has an offset equal to 0. | has an offset equal to 0. | |||
| super object offset: 32 bits | super object offset: 32 bits | |||
| The index from which the object part-data packet payload is to be | The index from which the object part-data packet payload is to be | |||
| written in order to compose the super object data at the receiver | written in order to compose the super object data at the receiver | |||
| side (i.e. the multicast gateway). The first data-part object | side (i.e. the multicast gateway). The first data-part object | |||
| composing a super object has the super object offset equal to 0. | composing a super object has the super object offset equal to 0. | |||
| The super object offset is the same for all object data-part | The super object offset is the same for all object data-part | |||
| packets composing the same object data-part. Having this field | packets composing the same object data-part. | |||
| present in the object data-part header (and not in the associated | ||||
| object info header) permits to possibly recompose a super object | ||||
| without the corresponding object info packet. | ||||
| data: N x 8bits | data: N x 8bits | |||
| The size N is not declared; it is bounded by the maximum size of | The size N is not declared; it is bounded by the maximum size of | |||
| the under-laying transport packet (e.g. RTP) as depicted in the | the under-laying transport packet (e.g. RTP) as depicted in the | |||
| section 3.6. The total size (number of bytes) of the object data | section 3.6. The total size (number of bytes) of the object data | |||
| is indicated in the associated object info (field object size). | is indicated in the associated object info (field object size). | |||
| 3.6. Maximum size of a MSYNC packet | 3.6. Maximum Size Of A MSYNC Packet | |||
| An MSYNC packet is composed with a header part and a data part for | An MSYNC packet is composed with a header part and a data part for | |||
| which the size is bounded by the transport multicast session | which the size is bounded by the transport multicast session | |||
| packet. In case there is no particular restriction as with RTP | packet. In case there is no particular restriction as with RTP | |||
| and/or UDP (which authorize up to 65235 bytes), then the maximum | and/or UDP (which authorize up to 65235 bytes), then the maximum | |||
| size is linked to the path MTU (Maximum Transfer Unit) as the | size is linked to the path MTU (Maximum Transfer Unit) as the | |||
| largest transfer unit supported between the source (the multicast | largest transfer unit supported between the source (the multicast | |||
| server) and the destination (the multicast gateway) without | server) and the destination (the multicast gateway) without | |||
| fragmentation. An MSYNC packet must fit within a link layer | fragmentation. An MSYNC packet MUST fit within a link layer | |||
| packet. | packet. | |||
| For Ethernet, as an example, the MTU is typically 1500 bytes, | For Ethernet, as an example, the MTU is typically 1500 bytes, | |||
| assuming a 20 bytes IPv4 header, a 8 bytes UDP header and the 8 | assuming a 20 bytes IPv4 header, a 8 bytes UDP header and the 8 | |||
| bytes MSYNC object data packet header, it gives an MTU of 1464 | bytes MSYNC object data packet header, it gives an MTU of 1464 | |||
| bytes for the MSYNC object data packet. Operating RTP, the MSYNC | bytes for the MSYNC object data packet. Operating RTP, the MSYNC | |||
| object data MTU is decreased by 12 bytes (= 1452 bytes). | object data MTU is decreased by 12 bytes (= 1452 bytes). | |||
| 3.7. Sending MSYNC objects over IP/transport multicast sessions | 3.7. Sending MSYNC Objects Over IP/Transport Multicast Sessions | |||
| The following considerations are linked to the multicast server | The following considerations are linked to the multicast server | |||
| configuration. | configuration. | |||
| Per MSYNC channel, the way to map MSYNC objects related to a media | Per MSYNC channel, the way to map MSYNC objects related to a media | |||
| stream with an IP or transport multicast session is not | stream with an IP or transport multicast session is not | |||
| constrained. The arrangement is chosen function of the network | constrained. The arrangement is chosen function of the network | |||
| architecture and capacity. For example, in xDSL, the capacity | architecture and capacity. For example, in xDSL, the capacity | |||
| dedicated to multicast is limited which may drive to an | dedicated to multicast is limited which may drive to an | |||
| arrangement where each sub-stream/representation of a HAS | arrangement where each sub-stream/representation of a HAS | |||
| session/MSYNC channel matches with one dedicated IP multicast | session/MSYNC channel matches with one dedicated IP multicast | |||
| session. The MSYNC receiver switches to the IP transport session | session. The MSYNC receiver switches to the IP transport session | |||
| corresponding to the sub-stream/representation it must serve to | corresponding to the sub-stream/representation it should serve to | |||
| the user terminal/player. Alternatively, one would like to have | the user terminal/player. Alternatively, one would like to have | |||
| one IP multicast session (with possibly multiple transport | one IP multicast session (with possibly multiple transport | |||
| multicast sessions, each having a different destination port | multicast sessions, each having a different destination port | |||
| number) for the entire HAS session/MSYNC channel that is an | number) for the entire HAS session/MSYNC channel that is an | |||
| arrangement a la "IPTV", less bandwidth efficient but where only | arrangement a la "IPTV", less bandwidth efficient but where only | |||
| one multicast IP address is allocated per HAS session/MSYNC | one multicast IP address is allocated per HAS session/MSYNC | |||
| channel. | channel. | |||
| Considering a satellite network, as all transport multicast | Considering a satellite network, as all transport multicast | |||
| sessions are carried simultaneously, all arrangements may make | sessions are carried simultaneously, all arrangements may make | |||
| skipping to change at page 12, line 40 ¶ | skipping to change at page 13, line 11 ¶ | |||
| - One IP multicast session per media (audio or video or | - One IP multicast session per media (audio or video or | |||
| subtitle) sub-stream (representation); each transport multicast | subtitle) sub-stream (representation); each transport multicast | |||
| session having a different destination multicast IP address. | session having a different destination multicast IP address. | |||
| - One transport multicast session for the MSYNC control channel. | - One transport multicast session for the MSYNC control channel. | |||
| - It is perfectly possible to send all the MSYNC packets in only | - It is perfectly possible to send all the MSYNC packets in only | |||
| one transport multicast session. | one transport multicast session. | |||
| For each MSYNC object to be sent, the sender MUST send one object | For each MSYNC object (see object type in 3.2) to be sent, the | |||
| info packet, 0 or more object info redundant packets, zero or more | sender MUST send the following MSYNC packets in the specified | |||
| HTTP header packets and one or more object data packets or object | order: one object info packet, zero or more object info redundant | |||
| data-part packets. | packets, zero or more HTTP header packets and one or more object | |||
| data packets or object data-part packets. | ||||
| The sender MUST send the object's HTTP header along with the | ||||
| corresponding object's data to be sent through using the MSYNC | ||||
| object data packet(s). The sender MUST send the object's HTTP | ||||
| header along with the corresponding first object's data-part to be | ||||
| sent through using the MSYNC object data-part packet(s) | ||||
| Whenever a manifest (playlist) has to be sent, the manifest | When the MSYNC object is a media data-part object of size null | |||
| (playlist) object MUST be sent along with (duplicated in) all the | (used to signal the end of the transmission of a super object) | |||
| transport multicast sessions related to the transmission of the | then only one object info packet MUST be sent. | |||
| video segment objects the manifest/playlist refers to. | ||||
| 3.9. HAS protocol dependency | 3.8. HAS Protocol Dependency | |||
| A certain number of MSYNC packet header fields have a dependency | A certain number of MSYNC packet header fields have a dependency | |||
| on the HAS protocol and therefore on the manifest type. Similarly | on the HAS protocol and therefore on the manifest type. Similarly | |||
| the sending rules may also depend from the HAS protocol. | the sending rules may also depend from the HAS protocol. | |||
| 3.9.1. Object info packet | 3.8.1. Object Info Packet | |||
| 3.9.1.1. media sequence | 3.8.1.1. Media Sequence | |||
| The media sequence is used by the multicast gateway to synchronize | The media sequence is used by the multicast gateway to synchronize | |||
| the MSYNC (i.e. multicast) reception with unicast reception. The | the MSYNC (i.e. multicast) reception with unicast reception. The | |||
| multicast gateway may operate jointly MSYNC and unicast retrieval | multicast gateway may operate jointly MSYNC and unicast retrieval | |||
| of HAS objects. This is useful in some occasions like processing a | of HAS objects. This is useful in some occasions like processing a | |||
| new streaming session request (i.e. a manifest request after a | new streaming session request (i.e. a manifest request after a | |||
| channel switch) or in the case of segment repair. The multicast | channel switch) or in the case of segment repair. The multicast | |||
| gateway may attempt to retrieve a manifest object or segment(s) | gateway may attempt to retrieve a manifest object or segment(s) | |||
| through a unicast mean (e.g. a CDN server or a repair server) in | through a unicast mean (e.g. a CDN server or a repair server) in | |||
| order to speed up the start of the session or to repair damaged | order to speed up the start of the session or to repair damaged | |||
| skipping to change at page 13, line 50 ¶ | skipping to change at page 14, line 15 ¶ | |||
| HLS segment: MUST contain the value of EXT-X-MEDIA-SEQUENCE added | HLS segment: MUST contain the value of EXT-X-MEDIA-SEQUENCE added | |||
| with the position of the segment in the playlist. | with the position of the segment in the playlist. | |||
| DASH manifest: MUST contain $time$/scale or $Number$ corresponding to | DASH manifest: MUST contain $time$/scale or $Number$ corresponding to | |||
| the last segment transmitted or under transmission (and possibly | the last segment transmitted or under transmission (and possibly | |||
| received partially) and declared by the manifest. | received partially) and declared by the manifest. | |||
| DASH segment: MUST contain the $time$/scale or $Number$ value | DASH segment: MUST contain the $time$/scale or $Number$ value | |||
| 3.9.1.2. object URI | 3.8.1.2. Object URI | |||
| In the context of HTTP adaptive streaming, if the object is a HAS | ||||
| addressable entity (e.g. a segment or a CMAF chunk), the path name | ||||
| MUST match the absolute path present in the incoming segment | ||||
| request. | ||||
| The segment S_2: tvChannel1/Q1/S_2. | In the context of HTTP adaptive streaming, The object URI is a URI | |||
| The CMAF chunk C_3 of the segment S_2: tvChannel11/Q1/S_2/C_3. | reference. | |||
| if the object is a non-addressable HAS entity (e.g. a HTTP 1.1 CTE | if the object is a HAS addressable entity (e.g. a segment or a | |||
| block), the URI MUST hierarchically match with the related | CMAF chunk), the object URI MUST match (be a sub-string) with the | |||
| incoming segment request. | URL announced in the corresponding manifest/playlist. | |||
| The HTTP CTE 3rd chunk of the segment S_2: | ||||
| tvChannel11/Q1/S_2/3; | ||||
| 3.9.2. Sending rules | Examples: | |||
| When a manifest/play-list is sent, it must reference addressable | - The object URI: /tvChannel1/Q1/S_2 matches with the segment's | |||
| objects (segment or CMAF chunk) that have already been sent or for | URL that is computed from the associated manifest/playlist: | |||
| which the transmission has started. | ".../tvChannel1/Q1/S_2.mp4" | |||
| 3.10. RTP as the transport multicast session protocol | - The object URI /tvChannel11/Q1/S_2_3 matches with the CMAF | |||
| chunk URL that is computed from the associated | ||||
| manifest/playlist: ".../tvChannel11/Q1/S_2_3.mp4". | ||||
| RTP [RFC3550] can be used as part of the transport multicast | If the object is a non-addressable HAS entity (e.g. a HTTP 1.1 CTE | |||
| session protocol. Depending on the deployment case (e.g. | block), the object URI is composed with a sub-string (that MUST | |||
| unidirectional) and the infrastructure in place, the companion | match with the URL announced in the corresponding manifest) and a | |||
| RTCP protocol MUST be operated according to the following. | suffix composed with the underscore character and the block | |||
| number). | ||||
| Example: | ||||
| - The object URI of the 3rd HTTP CTE block of the segment S_2: | ||||
| tvChannel11/Q1/S_2.m4s_2 matches with the segment's request URL | ||||
| that terminates with ".../tvChannel1/Q1/S_2.m4s" | ||||
| The block number of an object URI attached to a media data-part | ||||
| object MUST be incremented for each subsequent transmission. | ||||
| When all the MSYNC data-part packets for all the media data-part | ||||
| objects (e.g. CTE blocks) composing a super object (e.g. a media | ||||
| segment) have been sent, the MSYNC sender MUST signal the end of | ||||
| the MSYNC super object transmission through sending an MSYNC | ||||
| object info packet with the object size set to zero (0) . In | ||||
| addition, the object URI MUST contain the URI reference of the | ||||
| next block (never transmitted). see 3.2. | ||||
| Example: | ||||
| - The object URI of the object info packet associated with the | ||||
| 1st HTTP CTE block of the segment S_2: tvChannel11/Q1/S_2.m4s_0 | ||||
| - The object URI of the object info packet associated with the | ||||
| 2nd HTTP CTE block of the segment S_2: tvChannel11/Q1/S_2.m4s_1 | ||||
| - The object URI of the object info packet associated with the | ||||
| 3rd HTTP CTE block of the segment S_2: tvChannel11/Q1/S_2.m4s_2 | ||||
| - The object URI of the object info packet associated with the | ||||
| 4st HTTP CTE block of the segment S_2: tvChannel11/Q1/S_2.m4s_3 | ||||
| - The object URI of the object info packet associated with the | ||||
| 5st HTTP CTE block (of size null) signaling the end of the super | ||||
| object (i.e. segment) transmission: tvChannel11/Q1/S_2.m4s_4 | ||||
| 3.8.2. Sending Rules | ||||
| Whenever a manifest (playlist) has to be sent: | ||||
| - The manifest (playlist) object MUST be sent within (duplicated | ||||
| in) all the transport multicast sessions related to the | ||||
| transmission of the video segment objects the manifest/playlist | ||||
| refers to. | ||||
| - It MUST reference addressable objects (segment or CMAF chunk) | ||||
| that have already been sent or for which the transmission has | ||||
| started. | ||||
| 3.9. RTP As The Transport Multicast Session Protocol | ||||
| RTP [RFC3550] can be used as part of the transport multicast | ||||
| session protocol. Depending on the deployment case (e.g. | ||||
| unidirectional) and the infrastructure in place, the companion | ||||
| RTCP protocol MUST be operated according to the following. | ||||
| - RTCP usage SHALL conform to [RFC5506] | - RTCP usage SHALL conform to [RFC5506] | |||
| - RTCP sender report MAY be switched off | - RTCP sender report MAY be switched off | |||
| - RTCP receiver report MAY be switched off | - RTCP receiver report MAY be switched off | |||
| - RCTP destination port number must be configurable but it must | - RCTP destination port number is configurable but it MUST be | |||
| be different than the associated RTP destination port number, | different than the associated RTP destination port number, i.e. | |||
| i.e. the RTCP destination port number is not necessarily the RTP | the RTCP destination port number is not necessarily the RTP | |||
| destination port number + 1 as recommended in [RFC3550]. | destination port number + 1 as recommended in [RFC3550]. | |||
| - RTCP MAY be used for packet loss recovery (aka "RTP Repair"). | - RTCP MAY be used for packet loss recovery (aka "RTP Repair"). | |||
| If packet loss recovery through RTCP is activated then the RTP | If packet loss recovery through RTCP is activated then the RTP | |||
| Repair client and server MUST be compliant with [RFC4585] and | Repair client and server MUST be compliant with [RFC4585] and | |||
| [RFC5506]. The RTP Repair client that submit the feedback (FB) | [RFC5506]. The RTP Repair client that submit the feedback (FB) | |||
| messages (according to [RFC5506] and [RFC4585] is the MSYNC | messages (according to [RFC5506] and [RFC4585] is the MSYNC | |||
| receiver (i.e. the multicast gateway). The RTP Repair server | receiver (i.e. the multicast gateway). The RTP Repair server | |||
| that receives, processes and responds to the feedback messages | that receives, processes and responds to the feedback messages | |||
| (FB) MAY be the MSYNC sender (i.e. the multicast server) or it | (FB) MAY be the MSYNC sender (i.e. the multicast server) or it | |||
| skipping to change at page 15, line 4 ¶ | skipping to change at page 16, line 21 ¶ | |||
| - RTCP MAY be used for packet loss recovery (aka "RTP Repair"). | - RTCP MAY be used for packet loss recovery (aka "RTP Repair"). | |||
| If packet loss recovery through RTCP is activated then the RTP | If packet loss recovery through RTCP is activated then the RTP | |||
| Repair client and server MUST be compliant with [RFC4585] and | Repair client and server MUST be compliant with [RFC4585] and | |||
| [RFC5506]. The RTP Repair client that submit the feedback (FB) | [RFC5506]. The RTP Repair client that submit the feedback (FB) | |||
| messages (according to [RFC5506] and [RFC4585] is the MSYNC | messages (according to [RFC5506] and [RFC4585] is the MSYNC | |||
| receiver (i.e. the multicast gateway). The RTP Repair server | receiver (i.e. the multicast gateway). The RTP Repair server | |||
| that receives, processes and responds to the feedback messages | that receives, processes and responds to the feedback messages | |||
| (FB) MAY be the MSYNC sender (i.e. the multicast server) or it | (FB) MAY be the MSYNC sender (i.e. the multicast server) or it | |||
| MAY be any intermediate entity acting as a multicast RTP | MAY be any intermediate entity acting as a multicast RTP | |||
| receiver (i.e. capable of receiving the multicast RTP packets). | receiver (i.e. capable of receiving the multicast RTP packets). | |||
| In any case, the RTP Repair server and the RTP Repair client | In any case, the RTP Repair server and the RTP Repair client | |||
| MUST operate a unicast interface. | MUST operate a unicast interface. | |||
| Note that instead of relying on "RTP repair", an MSYNC receiver | Note that instead of relying on "RTP repair", an MSYNC receiver | |||
| (i.e. the multicast gateway) could attempt to recover HAS | (i.e. the multicast gateway) could attempt to recover HAS | |||
| elements (segments, manifest) through HTTP (aka "HTTP repair"). | elements (segments, manifest) through HTTP (aka "HTTP repair"). | |||
| However the latter method requires a CDN and is less reactive | However the latter method requires a CDN and is less reactive | |||
| than operating RTCP. | than operating RTCP. | |||
| In addition, each RTP multicast session must operate a different | In addition, each RTP multicast session MUST operate a different | |||
| [RFC3550] SSRC number. This guaranties a reparation on the RTP | [RFC3550] SSRC number. This guaranties a reparation on the RTP | |||
| transport multicast session basis. | transport multicast session basis. | |||
| -RTCP MAY be used for Fast Channel change according to | -RTCP MAY be used for Fast Channel change according to | |||
| [RFC6585]. The way to operate [RFC6585] is out of scope of this | [RFC6585]. The way to operate [RFC6585] is out of scope of this | |||
| document. | document. | |||
| 4. IANA Considerations | 4. IANA Considerations | |||
| This document has no actions for IANA. | This document has no actions for IANA. | |||
| 5. Security Considerations | 5. Security Considerations | |||
| The multicast communication between the MSYNC sender (multicast | The multicast communication between the MSYNC sender (multicast | |||
| server) and the MSYNC receiver (the multicast gateway) should be | server) and the MSYNC receiver (the multicast gateway) SHOULD be | |||
| protected for confidentiality, message corruption and replay | protected for confidentiality, message corruption and replay | |||
| attacks. The MSYNC protocol does not gather any security | attacks. The MSYNC protocol does not specify any security | |||
| mechanism. MSYNC relies on possibly content protection (Digital | mechanism. MSYNC relies on possibly content protection (Digital | |||
| Right Management) and on the underlying transport layer and | Right Management) and on the underlying transport layer and | |||
| security extensions for providing message | security extensions for providing message | |||
| integrity/authentication and replay. Secure RTP (SRTP) [RFC3711] | integrity/authentication and replay. Secure RTP (SRTP) [RFC3711] | |||
| and IPSec applied to multicast [RFC5374] are potential | and IPSec applied to multicast [RFC5374] are potential | |||
| candidates for providing such extensions. | candidates for providing such extensions. | |||
| 5. References | 5. References | |||
| 5.1. Normative References | 5.1. Normative References | |||
| skipping to change at page 17, line 32 ¶ | skipping to change at page 18, line 32 ¶ | |||
| [RFC6585] Unicast-Based Rapid Acquisition of Multicast RTP Sessions. | [RFC6585] Unicast-Based Rapid Acquisition of Multicast RTP Sessions. | |||
| B. VerSteeg, A. Begen, T. Van Caenegem, Z. Vax. June 2011. | B. VerSteeg, A. Begen, T. Van Caenegem, Z. Vax. June 2011. | |||
| (Format: TXT, HTML) (Status: PROPOSED STANDARD) (DOI: | (Format: TXT, HTML) (Status: PROPOSED STANDARD) (DOI: | |||
| 10.17487/RFC6285) | 10.17487/RFC6285) | |||
| [RFC8216] HTTP Live Streaming. R. Pantos, Ed., W. May. August 2017. | [RFC8216] HTTP Live Streaming. R. Pantos, Ed., W. May. August 2017. | |||
| (Format:TXT, HTML) (Status: INFORMATIONAL) (DOI: | (Format:TXT, HTML) (Status: INFORMATIONAL) (DOI: | |||
| 10.17487/RFC8216) | 10.17487/RFC8216) | |||
| Acknowledgments | 6. Acknowledgments | |||
| The authors will be ever grateful to their late colleague Arnaud | The authors will be ever grateful to their late colleague Arnaud | |||
| Leclerc who has been the initiator of that work. | Leclerc who has been the initiator of that work. | |||
| The authors would like to thank the following people for their | The authors would like to thank the following people for their | |||
| feedback: Yann Barateau (Eutelsat). | feedback: Yann Barateau (Eutelsat). | |||
| 7. Change Log | ||||
| - 04: Added detection of super object transmission (Section 3.2 | ||||
| and Section 3.8.1.2); several adjustments regarding RFC style; | ||||
| Section numbering correction.(Sections 3.9 and 3.10 are now | ||||
| section 3.8 and 3.9 respectively). | ||||
| Authors' Addresses | Authors' Addresses | |||
| Sophie Bale | Sophie Bale | |||
| Broadpeak | Broadpeak | |||
| 15 rue Claude Chappe | 15 rue Claude Chappe | |||
| Zone des Champs Blancs | Zone des Champs Blancs | |||
| 35510 Cesson-Sevigne | 35510 Cesson-Sevigne | |||
| France | France | |||
| Email: sophie.bale@broadpeak.tv | Email: sophie.bale@broadpeak.tv | |||
| End of changes. 46 change blocks. | ||||
| 112 lines changed or deleted | 183 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||