Re: [Fecframe] Comments aboutdraft-galanos-fecframe-rtp-reedsolomon-00
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Fecframe] Comments aboutdraft-galanos-fecframe-rtp-reedsolomon-00



Me again.

* Section 6.2.2: Back to the idea of removing the constraint on
consecutive
source packets, I'm wondering if the following FEC header format
wouldn't be
okay:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Base SN              |           Max SN              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Source Block Length (k)    |   Enc. Symbol ID (16 bits)    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Thanks to this FEC header:
- We know that all SN values in {Base SN..Max SN} are included in this
  source block.
- We know their actual number (k) even if some of RTP SN are missing.
- We know the ESI of the FEC repair packet (in {K, N-1}), no matter the
GF m parameter since it's 16-bit long.
- And we know in which order incoming source RTP packets should be
  stored in the block, even if there are gaps in the SN.
At a receiver, the actual SN value in the RTP header of an erased
source packet is anyway recovered along with the rest of the
header/payload
so there's no problem either.
[Einat] This is interesting. Do you mean that all RTP packets in the
range [Base SN...Max SN] will be included in this block?
If not then the receiver will know for sure if he can recover a lost
packet only after making the decoding operation on the relevant block.
This could lead to unnecessary decoding calls.
See my comment above regarding the need for signaling N-K for each FEC
block.
=> VR: my above proposal is not sufficient! It won't help identifying the position of source
packets inside the source block.

However, I think there's a solution to the case where there's a limited number of erasures prior to FECFRAME. Instead of carrying a bit mask that identifies which source packet of a SN range are actually considered or not, I suggest to replace erased source packets
by zero'ed symbols.
These symbols will be reconstructed by the receiving side FECFRAME, and a quick check will enable him to get rid of them immediately (there's no RTP header, it's all zero).

To answer your question: yes, all the packets in [Base SN; Max SN] are in the block, except that some of them are "fake" packets (zero'ed) which means they are easily
recognized.
[Einat] If I understand what you suggest then increasing the source
block size as you proposed will increase encoding/decoding complexity.
So there's a tradeoff to consider here.

=> VR: of course, there's a tradeoff since the block size increases and the
receiver needs to decode "fake" source packets... It takes time and CPU
cycles. But as I said, it can make sense if there are a limited number of
erasure. So let's clarify the possibilities:

- no erasure prior to FECFRAME => no waste if we follow the
 [Base SN; Max SN] scheme.
 NB: we can also use your scheme as proposed in the I-D, of course,
 but there's a "universal" solution so let's take advantage of it.

- a limited number of erasures => use "fake" source packets. The block size
can be large, there's no penalty in terms of transmission overhead, it's simple.
 On the downside, there's some extra processing required, hence the
 recommended limit to situations where there are few erasures. However
 it will also work on other situations ;-)

- a high number of erasures, or situations where CPU is the limit rather
 than the transmission overhead => use mask techniques to deal with gaps
 in the RTP sequence numbering (i.e. source packets erased before reaching
 FECFRAME).

Does it make sense? Did I miss something?
Cheers,

  Vincent

Note: Messages sent to this list are the opinions of the senders and do not imply endorsement by the IETF.