Forward error correction (FEC) is a mechanism for providing reliability to data being sent over a communications link. With conventional FEC techniques, there may be less reliance on retransmission protocols to ensure reliability of data communications, as the data communications themselves may include redundant, encoded information suitable for recovering missing or otherwise inaccessible portions (or packets) of the communications. FEC frameworks for arbitrary streaming protocols exist, such as defined by the Internet Engineering Task Force's FEC Framework (referred to as “FEC FRAME”). In particular, FEC FRAME is capable of providing some FEC functionalities for use with sequenced protocols, such as Real-Time Protocol (RTP) that utilizes a sequence number (i.e., packet identifier (“ID”)) for each packet of an RTP stream. Such FEC for streaming may utilize various standardized FEC codes, such as Reed-Solomon, Raptor, RaptorQ, and low-density parity-check code (LDPC).
Various embodiments include methods and computing devices for extending Forward Error Correction (FEC) to protect a plurality of Real-Time Protocol (RTP) streams using a single FEC RTP stream. Various embodiments may include exchanging, via a processor of a sending computing device, session initialization data with a receiving computing device, generating, via the processor, source RTP stream data for the plurality of source RTP streams, generating, via the processor, FEC RTP stream data for an FEC RTP stream corresponding to the plurality of source RTP streams, and transmitting the plurality of source RTP streams and the FEC RTP stream to the receiving computing device. Some embodiments may further include adjusting, via the processor, a header extension of each of the plurality of source RTP streams to include a source FEC payload identifier (ID). Some embodiments may further include adjusting, via the processor, the FEC RTP stream to include a repair FEC payload identifier (ID).
Some embodiments may further include constructing, via the processor, a repair block of the FEC RTP stream for the plurality of source RTP streams, wherein the repair block includes at least a flow identifier, a length indicator, and s values for each of the source RTP streams, and registering, via the processor, a payload format of the FEC RTP stream as a bundled media type.
In some embodiments, each of the plurality of source RTP streams is one of an audio stream and a video stream. In some embodiments, the session initialization data comprises Session Description Protocol (SDP) data.
Various embodiments may include receiving, via a processor of a receiving computing device, a plurality of source RTP streams and a FEC RTP stream from a sending computing device, determining, via the processor, whether any source block data is missing from any of the plurality of source RTP streams, retrieving, via the processor, missing source block data from repair blocks of the FEC RTP stream in response to determining that there is missing source block data, and using, via the processor, the data of the plurality of source RTP streams. In some embodiments, each of the plurality of source RTP streams is one of an audio stream and a video stream.
Further embodiments include a sending computing device including a transceiver and a processor configured with processor-executable instruction to perform operations of the methods for generating and transmitting a plurality of source RTP streams and the FEC RTP stream to a receiving computing device summarized above.
Further embodiments include a receiving computing device including a transceiver and a processor configured with processor-executable instruction to perform operations of the methods of receiving and processing a plurality of source RTP streams and the FEC RTP stream from a transmitting computing device summarized above.
The accompanying drawings, which are incorporated herein and constitute part of this specification, illustrate various embodiments of the claims, and together with the general description given above and the detailed description given below, serve to explain the features of the claims.
The various embodiments will be described in detail with reference to the accompanying drawings. Wherever possible, the same reference numbers will be used throughout the drawings to refer to the same or like parts. References made to particular examples and implementations are for illustrative purposes, and are not intended to limit the scope of the claims.
The term “computing device” is used herein to refer to an electronic device equipped with at least a processor. Examples of computing devices may include mobile devices (e.g., cellular telephones, wearable devices, smart-phones, web-pads, tablet computers, Internet enabled cellular telephones, Wi-Fi® enabled electronic devices, personal data assistants (PDA's), laptop computers, etc.), personal computers, and server computing devices. In various embodiments, computing devices may be configured with memory or storage as well as networking capabilities, such as network transceiver(s) and antenna(s) configured to establish a wide area network (WAN) connection (e.g., a cellular network connection, etc.) and/or a local area network (LAN) connection (e.g., a wired/wireless connection to the Internet via a Wi-Fi® router, etc.). A mobile computing device suitable for use with the various embodiments is described below with reference to
The term “server” is used to refer to any computing device capable of functioning as a server, such as a master exchange server, web server, mail server, document server, and a personal or mobile computing device configured with software to execute server functions (e.g., a “light server”). A server may be a dedicated computing device or a computing device including a server module (e.g., running an application that may cause the computing device to operate as a server). A server module (or server application) may be a full function server module, or a light or secondary server module (e.g., light or secondary server application). A light server or secondary server may be a slimmed-down version of server type functionality that can be implemented on a personal or mobile computing device, such as a smart phone, thereby enabling it to function as an Internet server (e.g., an enterprise e-mail server) to a limited extent, such as necessary to provide the functionality described herein. A server suitable for use with the various embodiments is described below with reference to
The terms “source stream” or “source RTP stream” or “source flow” are used interchangeably herein to refer to data streams comprised of various source blocks of data. Examples of source streams may include audio and video data streams that may be used to provide streaming media services (e.g., streaming movies, radio, etc.) and/or telephony communications (e.g., Internet protocol (IP) audio/video chat) transmitted between computing devices over a networking connection (e.g., Internet, P2P, etc.). The terms “repair stream” or “FEC RTP stream” or “repair flow” or “FEC flow” are used interchangeably herein to refer to data streams comprised of redundant data corresponding to source streams. For example, FEC streams may include various repair blocks that may be used by receiver devices to repair, replace, or otherwise compensate for missing, lost, and/or corrupt data of source streams.
The embodiment techniques of this application address novel improvements to Forward Error Correction (FEC) with relation to Real-Time Protocol (RTP) data streams, and thus improve upon various conventional or standard FEC and/or RTP concepts. Accordingly, in the following descriptions, references may be made to various concepts (e.g., specifications, formats, standards) that are described in or related to the following documents: Internet Engineering Task Force (IETF) Request For Comments (RFC) document 4288, entitled “Media Type Specifications and Registration Procedures”, dated December 2005 (“RFC4288”); Internet Engineering Task Force (IETF) Request For Comments (RFC) document 4855, entitled “Media Type Registration of RTP Payload Formats”, dated February 2007 (“RFC4855”); Internet Engineering Task Force (IETF) Request For Comments (RFC) document 5053, entitled “Raptor Forward Error Correction Scheme for Object Delivery”, dated October 2007 (“RFC5053”); Internet Engineering Task Force (IETF) Request For Comments (RFC) document 5285, entitled “A General Mechanism for RTP Header Extensions”, dated July 2008 (“RFC5285”); Internet Engineering Task Force (IETF) Request For Comments (RFC) document 6330, entitled “RaptorQ Forward Error Correction Scheme for Object Delivery”, dated August 2011 (“RFC6330”); Internet Engineering Task Force (IETF) Request For Comments (RFC) document 6363, entitled “Forward Error Correction (FEC) Framework”, dated October 2011 (“RFC6363”); Internet Engineering Task Force (IETF) Request For Comments (RFC) document 6364, entitled “Session Description Protocol Elements for the Forward Error Correction (FEC) Framework”, dated October 2011 (“RFC6364”); Internet Engineering Task Force (IETF) Request For Comments (RFC) document 6681, entitled “Raptor Forward Error Correction (FEC) Schemes for FECFRAME”, dated August 2012 (“RFC6681”); and Internet Engineering Task Force (IETF) Request For Comments (RFC) document 6682, entitled “RTP Payload Format for Raptor Forward Error Correction (FEC)”, dated August 2012 (“RFC6682”).
In general, to protect against packet loss in RTP streams, a computing device implementing conventional FEC techniques can partition a source stream into source blocks of data, which can be done on-the-fly as the source stream becomes available. The computing device may generate an encoding block that includes data of the source block and FEC repair information based on the source block data to provide protection against packet loss. The encoding block may be transmitted in a repair stream corresponding to the source stream so that a receiver device can potentially recover the source block when there is some packet loss in the source stream. Typically, FEC streaming techniques utilizing smaller source blocks may result in better end-to-end latency as smaller source blocks reduce the amount of data to encode for encoding blocks. However, the error recovery potential with smaller source blocks is limited. With larger source blocks, FEC streaming techniques may have better recovery performance but require more bandwidth. In general, multiple RTP streams may not be favored, as too many RTP streams may be blocked by firewalls, require significant bandwidth, or otherwise be prohibited by broadband networks.
FEC FRAME provides specific code options that allow for support of sequenced data flows, such as RTP streams (i.e., source RTP streams). In such cases, a sending computing device may send a source RTP stream without modification, and may also send a separate repair FEC RTP stream associated with the source RTP stream that includes data (i.e., a “repair FEC payload ID”) that enables the FEC RTP stream to refer back to the source RTP stream. In particular the repair FEC payload ID may identify the sequence number of initial RTP packets of the source RTP stream that were used in creation of each repair packet of the FEC RTP stream. Such conventional implementations typically provide for redundancy in a 1-to-1 manner (i.e., one repair flow for one source flow).
In some scenarios, source content is combined or mixed in order to reduce the number of streams transmitted and enable use of a single FEC RTP stream. In particular, RFC6681 describes conventional techniques that allow for protection of a single source RTP stream composed of multiple sources, in which each of the multiple sources may be identifiable by a Coordinating Source (CSRC) RTP header.
To address the limitations of conventional FEC techniques described above, various embodiments provide methods, devices, systems, and non-transitory process-readable storage media for “bundled FEC protection,” in which a single repair flow may be used to provide recovery protection for a plurality of individual source RTP streams. As such bundled FEC protection of a plurality of source RTP streams is not precisely defined for RTP by current standards (e.g., those defined in RFC6681), embodiments may employ protocol extensions to FEC FRAME for supporting FEC protection for multiple RTP source streams. In other words, the embodiment techniques may utilize novel FEC source payload and repair payload definitions that enable a single repair flow to be defined for multiple RTP flows. For example, as FEC FRAME Raptor code options do not currently address the case of bundled protection of multiple media types over multiple real-time transport protocol (RTP) synchronization sources (SSRC's), RTP stream header extensions may be utilized to allow a single FEC RTP stream to be configured to provide redundancy for a plurality of source RTP streams, regardless of their content type (e.g., audio or video). Based on such extensions, the embodiment techniques allow for protection of multiple source RTP streams that each has a unique sequence number space.
In some embodiments, bundled FEC protection may be accomplished using explicit source FEC payload ID's within RTP header extensions of source RTP streams (i.e., the “explicit source identification” technique). Such RTP header extensions may identify the source payload ID (written in the header extension) so that receiving computing devices of source RTP streams and their associated FEC RTP stream may match repair payloads to source payloads based on the source payload ID. This explicit source identification technique may require modification to source RTP streams.
In some embodiments, bundled FEC protection may be accomplished by configuring FEC RTP streams to include adequate references to source RTP streams so that RTP header extensions do not have to be used as in other embodiments (i.e., the “implicit source identification” technique). Such an implementation may not modify source RTP streams (or their header structures), but instead may define and utilize a different type of FEC repair ID that may identify all source RTP streams involved in making a repair payload of an FEC RTP stream. This implicit source identification technique may not require modification to source RTP streams.
The embodiment techniques may be beneficial by enabling a single FEC stream to simultaneously provide protection for different types of media (e.g., audio and video). The embodiment techniques may be further beneficial by utilizing larger payloads, making the recovery potential greater as FEC codes typically work better with larger payloads/streams. For example, if an FEC stream is provided to support a single audio source RTP stream, the repair payloads corresponding to the source payloads may be rather small, causing payloads to be broken up in small chunks, thus resulting in decreased FEC benefit. However, if an FEC stream addressed both audio and video streams, which typically have much larger source payload sizes, FEC operations may be more effective. Further, bundled FEC protection as enabled by the various embodiments may keep total RTP stream counts lower, and thus improve bandwidth use as there would be no need for 1-to-1 relationships between individual source streams and repair streams.
Arbitrary multi-sequenced source streams may be protected if the source is identified explicitly using a source FEC payload ID (e.g., send source FEC payload ID along with the source payload as defined in Section 6 of RFC6681). However, source stream header information may be modified to include such source information that may be used in combination with data within a single FEC stream to recover missing packets. In particular, the source FEC payload ID may be sent in a header extension of a source RTP stream transmitted from a sending computing device to a receiving computing device.
The processor of the sending computing device 102 may exchange offer/answers with the receiver computing device 120 in block 301 of the method 300, and similarly the processor of the receiving computing device 120 may exchange offer/answers with the sending computing device 102 in block 331 of the method 330. The operations of blocks 301 and 331 may be considered session initialization (or session startup) operations in which both devices may use a protocol, such as Session Description Protocol (SDP), to exchange session initialization data and determine whether bundled FEC protection for a plurality of source RTP streams may be implemented via an FEC RTP stream.
Returning to method 300, the sending computing device 102 may generate source RTP streams (or stream data) in block 302, such as audio stream data, video stream data, etc. In block 304, the sending computing device 102 may select a next source RTP stream of a plurality of source RTP streams to send to the receiving computing device 120 (i.e., N-count streams). For example, for the first iteration of the operational loop of the method 300, the sending computing device 102 may select the first source RTP stream in a list of source RTP streams. In block 306, the sending computing device 102 may adjust a header extension of the selected source RTP stream (or source data within the selected source RTP stream) to include source FEC payload ID data. Data for an example header extension may be defined in SDP data received at the sending computing device, such as with the SDP line “a=extmap:1 urn:ietf:params:stp-hdrext:FEC-FR:SourceID”. The source FEC payload ID may be used in an RTP header extension for each source RTP source stream packet.
In some embodiments, the source FEC payload ID may be 32 bits long (i.e., 4 bytes), such that the 1-byte header extension solution (as defined in Section 4.2 of RFC5285) may be sufficient for identifying the source FEC payload ID. In some embodiments, a 2-byte header extension may be used as provided in Section 4.3 of RFC5285, for example when there is a need for an 8-bit extension ID encoding. In some embodiments, the source FEC payload ID may be defined in Section 6.2.2 of RFC6681.
In determination block 308, the sending computing device 102 may determine whether there are more source RTP streams to process. In response to determining there are more source RTP streams to process (i.e., determination block 308=“Yes”), the sending computing device 102 may continue to select another source RTP stream with the operations in block 304.
In response to determining there are no more source RTP streams to process (i.e., determination block 308=“No”), the sending computing device 102 may establish/generate the FEC RTP stream (or FEC RTP stream data) for the adjusted source RTP streams in block 310. In block 312, the sending computing device 102 may adjust the FEC RTP stream (or FEC RTP stream data) to include a repair FEC payload ID, such as by adding the repair FEC payload ID to a header extension of the FEC RTP stream. For example, the sending computing device 102 may adjust the FEC RTP stream to include a repair FEC payload ID as provided to the sending computing device 102 during the session initialization (e.g., via SDP data received via an out-of-band signal).
In some embodiments, the repair FEC payload ID may be defined in Section 6.2.3 of RFC6681, and may be sent along with the associated repair payload in the FEC RTP stream. In some embodiments, the repair FEC payload ID may also be sent as a RTP header extension, although it may be included in the RTP payload of the FEC RTP stream. As with the source FEC payload ID, a 1-byte header extension or a 2-byte header extension may be used in some embodiments for the repair FEC payload ID.
In block 314, the sending computing device 102 may transmit the source RTP streams and the FEC RTP stream data to the receiving computing device, such as via a wide area network (WAN). The sending computing device 102 may continue with the operations in block 302 for generating new source RTP stream data (e.g., source blocks).
Returning to method 330, the sending computing device 102 may receive the data of the source RTP streams and the FEC RTP stream from the sending computing device 102 in block 332. In determination block 334, the receiving computing device 120 may determine whether there is any missing data (e.g., missing source blocks) with any of the source RTP streams. In response to determining there is missing data (i.e., determination block 334=“Yes”), the receiving computing device 120 may retrieve the missing data (or missing source block data) from the FEC RTP stream (e.g., from FEC or repair blocks) using the adjusted header extensions in block 336. In response to determining there is no missing data (i.e., determination block 334=“No”) or in response to performing the operations of block 336, the receiving computing device 120 may use the source FEC streams in block 338, such as by rendering audio and/or video as part of an IP telephony call or other streaming media (e.g., streaming movies, etc.). The receiving computing device 120 may continue receiving subsequent RTP streams in block 332.
In some embodiments, the source FEC payload ID and/or the repair FEC payload ID may utilize new RTP Header Extension uniform resource identifiers (URIs) defined in the RTP Compact Header Extensions subregistry of the Real-Time Transport Protocol (RTP) Parameters registry. For example, the source FEC payload ID may utilize an extension URI such as “urn:ietf:params:rtp-hdrext:FEC-FR:SourceID” and the repair FEC payload ID may utilize an extension URI such as “urn:ietf:params:rtp-hdrext:FEC-FR:RepairID”.
The following is an illustration of SDP data. In general, an ‘a=group:’ line may be included within SDP data and may address all MID's of a group, wherein the MID's may be identifiers associated with m-lines of the SDP data that describe the streams to be sent, such as audio or video streams. Other lines of the SDP data may provide “extmap:” parameters for the associated m-lines, wherein the “extmap:” parameters may be specific to the type of RTP extension header being used for each associated stream. In particular, the SDP data may include a line 351 (e.g., an “a=group:” attribute line) that indicates an order of the RTP streams of a group (e.g., S1, S2, R1). Lines 352, 362, 372 may be considered m-lines identified by the first line 351. The SDP data may include a first line 352 indicating that a first source RTP stream (e.g., a video stream) is to be transmitted. A second line 354 may include “extmap:” parameters that indicate that the first source RTP stream may utilize header extensions for FEC purposes (e.g., may include a source payload ID). The SDP data may include a third line 362 indicating that a second source RTP stream (e.g., an audio stream) is to be transmitted. A third line 364 may include “extmap:” parameters that indicate that the second source RTP stream may utilize header extensions for FEC purposes (e.g., may include a source payload ID). The SDP data may include a fifth line 372 that may indicate that an FEC RTP stream is to be transmitted. A sixth line 374 may include “extmap:” parameters that indicate that the FEC RTP stream may utilize header extensions (e.g., may include the repair payload ID).
The operations of the method 400 may be performed by a processor of a sending computing device 102 and the operations of the method 430 may be performed by a processor of a receiving computing device 120. In various scenarios, any computing device may be configured to either send or receive accord to the methods 400, 430. Although Section 8 of RFC6681 describes procedures for single-sequenced flows, the various embodiments extend this single-sequenced flow method for multi-sequenced flows, in particular multiple RTP flows corresponding to different synchronization sources (i.e., SSRC's). In various embodiments, implicit source identification techniques may be used for various FEC codes, such as FEC Scheme ID 5 and 6. In various embodiments, the methods 400, 430 may utilize a FEC RTP stream that includes repair payload IDs that utilize syntax/formatting as described within RFC6681, and source RTP streams that include source payload IDs that also utilize the syntax/formatting as described within RFC6681.
The operations of blocks 301, 302, 314 of the method 400 and the operations of blocks 331, 332, 334, 338 of the method 430 may be similar to the operations of like numbered blocks described above with reference to
In block 404, the sending computing device 102 may construct a repair block for the FEC RTP stream that includes at least a flow identifier for each of the source RTP streams, length indicators and s values (i.e., a smallest integer values as defined within RFC6681, Section 5). In some embodiments, only one format for the repair FEC payloads may be provided with necessary extensions for multi-sequenced flows. In some embodiments, the number of flows in a repair packet and the order in which the flows appear in the repair packet may be determined using out-of-band signaling (e.g., via SDP data as illustrated below in
In some embodiments, source symbol construction may be performed by the sending computing device 102 during the operations of block 404. In particular, the sending computing device 102 may utilize the FEC Scheme 5 and FEC Scheme 6 procedures as defined in Section 5 of RFC6681 to construct a set of source symbols to which the FEC code can be applied. For example, during the construction of the source block, the sending computing device 102 may determine a flow identifier (i.e., f[i]) for each source RTP stream (or flow) included in the source packet information, a length indication (i.e., l[i]) included in the source packet information for each packet and dependent on the protocol carried within the transport payload, and a value of s (i.e., s[i]) in the construction of the source packet information for each packet that may be identified as the smallest integer such that s[i]*T>=(l[i]+3), in which T may be a source symbol size in octets, and i may be the source RTP stream index.
In some embodiments, derivations of source FEC packet identification information may be utilized by the sending computing device. For example, the source FEC Packet identification information for a source packet may be derived from the flows in each packet, sequence number of each individual flow of the packet, and information received in any repair FEC packet belonging to this source block. The application data units (ADU's) that constitute the source block may be identified by the associated flow identifier and sequence number of the first source packet in the block. This information may be signaled in all repair FEC packets associated with the source block in the Initial Sequence Number field.
In some embodiments, the length of the source packet information (in octets) for source packets within a source block may be equal to the length of the payload containing encoding symbols of the repair packets (i.e., not including the repair FEC payload ID) for that block, which may be the same for all repair packets. The Application Data Unit Information Length (ADUIL) in symbols may be equal to this length divided by the encoding symbol size (which may be signaled in the FEC framework configuration information). The set of source packets included in the source block may be determined by the Initial Sequence Number (ISN) and Source Sub-Block Length (SSBL) as follows: Let f be the index of the flow (i.e., if f refers to the first flow in the source block then f=1), I(f) be the Initial Sequence Number of the source sub-block from flow f, LP(f) be the Source Sub-Block Information Length in symbols for flow f, LB(f) be the Source Sub-Block Length in symbols for flow f. Then, source packets with sequence numbers from I(f) to I(f)+(LB(f)/LP(f))−1 for flow f inclusive may be included in the source block. The Source Sub-Block Length (SSBL), LB(f), may be chosen such that it is at least as large as the largest Source Packet Information Length LP(f).
In some embodiments, for FEC Scheme 1, the encoding symbol ID (ESI) value placed into a repair packet may be calculated as specified in Section 5.3.2 of RFC5053. In some embodiments, for FEC Scheme 2, the ESI value placed into a repair packet may be calculated as specified in Section 4.4.2 of RFC6330. However, in either FEC Scheme 1 or Scheme 2, K (i.e., a number of source symbols of a certain size T octets that source blocks may be divided into, such as defined in RFC6330, Section 4.4.1) may be identical to the sum of all the SSBL's indicated in the repair packet.
In some embodiments, for RTP source packet flows, the RTP Sequence Number field may be used as the sequence number in the procedures described above. The length indication included in the Application Data Unit Information may be the sum over all flows of the RTP payload length plus the length of the contributing sources (CSRCs), if any, the RTP Header Extension, if present, and the RTP padding octets, if any. This length may be typically equal to the user datagram protocol (UDP) payload length of the packet minus 12.
In block 406, the sending computing device 102 may register a payload format of the FEC RTP stream as a bundled media type, and may transmit the source RTP streams and FEC RTP stream data to the receiving computing device 120 in block 314. In some embodiments, the RTP payload format may be registered using the ‘bundled/raptorfec’ media type that may be registered in accordance with RFC4855 and that uses the template of RFC4288. Such a media type definition may be identical to ‘video/raptorfec’ that can be found in Section 6.2.1 of RFC6682.
In block 332 of method 430, the receiving computing device 120 may receive the source RTP streams and FEC RTP stream data. Unlike the source RTP streams discussed in
In determination block 334 the receiving computing device 120 may determine whether there is missing data in one of the source RTP streams as described above with reference to
As an illustration, the SDP data may include a line 451 (e.g., an “a=group:” attribute line) indicating the order of appearance of the RTP streams (i.e., S1, S2, R1). The SDP data 450 may include a first line 452 (e.g., an m-line) indicating that a first source RTP stream (e.g., a video stream) is to be transmitted. A second line 462 (e.g., an m-line) may indicate that a second source RTP stream (e.g., an audio stream) is to be transmitted. A third line 472 (e.g., an m-line) may indicate that an FEC RTP stream is to be transmitted. A fourth line 474 may indicate bundled configuration information for the FEC RTP stream.
In some embodiments, sending and receiving computing devices may be configured to utilize explicit source identification techniques, implicit source identification techniques, and/or other techniques for providing FEC protection of source RTP streams.
In determination block 504, the sending computing device may determine whether to use the explicit source identification bundled FEC protection (i.e., an RTP header extension technique that uses modified source RTP streams). Such a determination may be based on SDP data received during the operations of block 301 and as illustrated in
In response to determining that the RTP header extension should not be used (i.e., determination block 504=“No”), the sending computing device may determine whether to use the implicit source identification technique (i.e., no modification to source streams/no source RTP header extension) for providing bundled FEC protection in determination block 506. In response to determining that the implicit source identification technique should be used (i.e., determination block 506=“Yes”), the sending computing device may perform the sending operations of blocks 314, 402-406 as described above with reference to
In response to determining that the implicit source identification technique should not be used (i.e., determination block 506=“No”), bundled FEC protection over multiple RTP source flows may not be possible, and the sending computing device may be required to utilize a technique similar to as described in RFC6681 but that uses CSRC's to distinguish different source streams. For example, the sending computing device may use CSRCs to separate sources as may be normally used in mixing gateways (e.g., multiparty voice/video-conferencing bridges). In other words, the sending computing device may operate as a mixer for multiple sources. In block 508, the sending computing device may mix together source RTP streams, generate the FEC RTP stream for the mixed source RTP stream using CSRCs in block 510, and transmit the mixed source RTP stream and FEC RTP stream to the receiving computing device in block 512.
In determination block 504, the receiving computing device may determine whether to use the explicit source identification bundled FEC protection (i.e., an RTP header extension technique that modified source streams). Such a determination may be based on SDP data received during the operations of block 331 and as illustrated in
In response to determining that the RTP header extension should not be used (i.e., determination block 504=“No”), the receiving computing device may determine whether to use the implicit source identification technique for providing bundled FEC protection in determination block 506 (i.e., no modification to source streams, no source RTP header extension). In response to determining that the implicit source identification technique should be used (i.e., determination block 506=“Yes”), the receiving computing device may perform the receiving and processing operations of blocks 332, 334, 338, 436 as described above with reference to
In response to determining that the implicit source identification technique should not be used (i.e., determination block 506=“No”), the receiving computing device may resort to utilizing a mixed-source RTP stream. The operations of blocks 552-558 may be similar to the operations of blocks 332-338 or blocks 332, 334, 436, 338 of
Further details of the various embodiments described above may be found in the document entitled “FEC FRAME Raptor Extensions for Multiple RTP Synchronization Sources,” which is attached to this application and incorporated in this specification in its entirely as if presented here.
Various forms of computing devices, including personal computers and laptop computers, may be used to implement the various embodiments. Such computing devices typically include the components of the mobile device 120 illustrated in
Various forms of computing devices, including personal computers, mobile computing devices (e.g., smartphones, etc.), servers, laptop computers, etc., may be used to implement the various embodiments. Such computing devices may typically include, at least, the components illustrated in
The various processors described herein may be any programmable microprocessor, microcomputer or multiple processor chip or chips that can be configured by software instructions (applications) to perform a variety of functions, including the functions of the various embodiments described herein. In the various devices, multiple processors may be provided, such as one processor dedicated to wireless communication functions and one processor dedicated to running other applications. Typically, software applications may be stored in internal memory before they are accessed and loaded into the processors. The processors may include internal memory sufficient to store the application software instructions. In many devices, the internal memory may be a volatile or nonvolatile memory, such as flash memory, or a mixture of both. For the purposes of this description, a general reference to memory refers to memory accessible by the processors including internal memory or removable memory plugged into the various devices and memory within the processors.
The foregoing method descriptions and the process flow diagrams are provided merely as illustrative examples and are not intended to require or imply that the steps of the various embodiments must be performed in the order presented. As will be appreciated by one of skill in the art the order of steps in the foregoing embodiments may be performed in any order. Words such as “thereafter,” “then,” “next,” etc. are not intended to limit the order of the steps; these words are simply used to guide the reader through the description of the methods. Further, any reference to claim elements in the singular, for example, using the articles “a,” “an” or “the” is not to be construed as limiting the element to the singular.
The various illustrative logical blocks, modules, circuits, and algorithm steps described in connection with the embodiments disclosed herein may be implemented as electronic hardware, computer software, or combinations of both. To clearly illustrate this interchangeability of hardware and software, various illustrative components, blocks, modules, circuits, and steps have been described above generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the claims.
The hardware used to implement the various illustrative logics, logical blocks, modules, and circuits described in connection with the embodiments disclosed herein may be implemented or performed with a general purpose processor, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general-purpose processor may be a microprocessor, but, in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration. Alternatively, some steps or methods may be performed by circuitry that is specific to a given function.
In one or more embodiments, the functions described may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, the functions may be stored on or transmitted over as one or more instructions or code on a non-transitory processor-readable, computer-readable, or server-readable medium or a non-transitory processor-readable storage medium. The steps of a method or algorithm disclosed herein may be embodied in a processor-executable software module or processor-executable software instructions, which may reside on a non-transitory computer-readable storage medium, a non-transitory server-readable storage medium, and/or a non-transitory processor-readable storage medium. In various embodiments, such instructions may be stored processor-executable instructions or stored processor-executable software instructions. Tangible, non-transitory computer-readable storage media may be any available media that may be accessed by a computer. By way of example, and not limitation, such non-transitory computer-readable media may comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium that may be used to store desired program code in the form of instructions or data structures and that may be accessed by a computer. Disk and disc, as used herein, includes compact disc (CD), laser disc, optical disc, DVD, floppy disk, and blu-ray disc where disks usually reproduce data magnetically, while discs reproduce data optically with lasers. Combinations of the above should also be included within the scope of non-transitory computer-readable media. Additionally, the operations of a method or algorithm may reside as one or any combination or set of codes and/or instructions on a tangible, non-transitory processor-readable storage medium and/or computer-readable medium, which may be incorporated into a computer program product.
The preceding description of the disclosed embodiments is provided to enable any person skilled in the art to make or use the claims. Various modifications to these embodiments will be readily apparent to those skilled in the art, and the generic principles defined herein may be applied to other embodiments without departing from the scope of the claims. Thus, the present disclosure is not intended to be limited to the embodiments shown herein but is to be accorded the widest scope consistent with the following claims and the principles and novel features disclosed herein.
This application claims the benefit of priority to U.S. Provisional Application No. 62/155,639 entitled “Bundled Forward Flow Error Correction (FEC) for Multiple Sequenced Flows” filed May 1, 2015, the entire contents of which are hereby incorporated by reference.
Number | Date | Country | |
---|---|---|---|
62155639 | May 2015 | US |