{"action":"created","issue":{"url":"https://api.github.com/repos/roc-project/roc/issues/48","labels_url":"https://api.github.com/repos/roc-project/roc/issues/48/labels{/name}","comments_url":"https://api.github.com/repos/roc-project/roc/issues/48/comments","events_url":"https://api.github.com/repos/roc-project/roc/issues/48/events","html_url":"https://github.com/roc-project/roc/issues/48","id":125111851,"number":48,"title":"Replace ad-hoc FEC packets with something standard-compliant","user":{"login":"gavv","id":8436629,"avatar_url":"https://avatars.githubusercontent.com/u/8436629?v=3","gravatar_id":"","url":"https://api.github.com/users/gavv","html_url":"https://github.com/gavv","followers_url":"https://api.github.com/users/gavv/followers","following_url":"https://api.github.com/users/gavv/following{/other_user}","gists_url":"https://api.github.com/users/gavv/gists{/gist_id}","starred_url":"https://api.github.com/users/gavv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gavv/subscriptions","organizations_url":"https://api.github.com/users/gavv/orgs","repos_url":"https://api.github.com/users/gavv/repos","events_url":"https://api.github.com/users/gavv/events{/privacy}","received_events_url":"https://api.github.com/users/gavv/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/roc-project/roc/labels/enhancement","name":"enhancement","color":"bfdadc"}],"state":"open","locked":false,"assignee":{"login":"gavv","id":8436629,"avatar_url":"https://avatars.githubusercontent.com/u/8436629?v=3","gravatar_id":"","url":"https://api.github.com/users/gavv","html_url":"https://github.com/gavv","followers_url":"https://api.github.com/users/gavv/followers","following_url":"https://api.github.com/users/gavv/following{/other_user}","gists_url":"https://api.github.com/users/gavv/gists{/gist_id}","starred_url":"https://api.github.com/users/gavv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gavv/subscriptions","organizations_url":"https://api.github.com/users/gavv/orgs","repos_url":"https://api.github.com/users/gavv/repos","events_url":"https://api.github.com/users/gavv/events{/privacy}","received_events_url":"https://api.github.com/users/gavv/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/roc-project/roc/milestones/1","html_url":"https://github.com/roc-project/roc/milestones/0.1","labels_url":"https://api.github.com/repos/roc-project/roc/milestones/1/labels","id":1474687,"number":1,"title":"0.1","description":"","creator":{"login":"gavv","id":8436629,"avatar_url":"https://avatars.githubusercontent.com/u/8436629?v=3","gravatar_id":"","url":"https://api.github.com/users/gavv","html_url":"https://github.com/gavv","followers_url":"https://api.github.com/users/gavv/followers","following_url":"https://api.github.com/users/gavv/following{/other_user}","gists_url":"https://api.github.com/users/gavv/gists{/gist_id}","starred_url":"https://api.github.com/users/gavv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gavv/subscriptions","organizations_url":"https://api.github.com/users/gavv/orgs","repos_url":"https://api.github.com/users/gavv/repos","events_url":"https://api.github.com/users/gavv/events{/privacy}","received_events_url":"https://api.github.com/users/gavv/received_events","type":"User","site_admin":false},"open_issues":19,"closed_issues":24,"state":"open","created_at":"2015-12-26T15:05:36Z","updated_at":"2016-01-15T18:15:03Z","due_on":null,"closed_at":null},"comments":9,"created_at":"2016-01-06T05:18:20Z","updated_at":"2016-01-16T00:45:01Z","closed_at":null,"body":"See also #6 and #13.\r\n\r\nI've found two alternative groups of RFCs:\r\n\r\n1. **FEC Framework (FECFRAME)**\r\n\r\n * [RFC 6363: FEC Framework](https://tools.ietf.org/html/rfc6363)\r\n\r\n   Supports RTP and externally defined FEC schemes.\r\n\r\n * [RFC 6816: LDPC FEC Scheme for FEC Framework](https://tools.ietf.org/html/rfc6816)\r\n\r\n   LDPC-Staircase from OpenFEC [implements](http://openfec.org/publication_activities.html) this scheme.\r\n\r\n * [RFC 5170: LDPC FEC](https://tools.ietf.org/html/rfc5170)\r\n\r\n   RFC 6816 inherits [Section 6: FEC Scheme Specification](https://tools.ietf.org/html/rfc5170#section-6) and [Section 5.7: PRNG](https://tools.ietf.org/html/rfc6816#section-5.7) from this RFC.\r\n\r\n * [RFC 6364: SDP support for FEC Framework](https://tools.ietf.org/html/rfc6364)\r\n\r\n There is also Raptor(Q) support for FEC Framework:\r\n\r\n    * [RFC 6681: Raptor FEC Scheme for FEC Framework](https://tools.ietf.org/html/rfc6681)\r\n    * [RFC 6682: RTP payload format for Raptor FEC Scheme for FEC Framework](https://tools.ietf.org/html/rfc6682)\r\n\r\n2. **Generic FEC**\r\n\r\n * [RFC 5109: Generic Forward Error Correction for RTP](https://tools.ietf.org/html/rfc5109)\r\n * [RFC 2198: Redundant Audio Data](https://tools.ietf.org/html/rfc2198) (one of backends for Generic FEC)\r\n * [RFC 6354: Forward-Shifted Redundancy](https://tools.ietf.org/html/rfc6354) (optional extension)\r\n\r\nFinally, these RFCs are mentioned by both FEC Framework and Generic FEC:\r\n\r\n  * [RFC 5725: Post-Repair Loss Reports](https://tools.ietf.org/html/rfc5725)\r\n  * [RFC 4585: RTP/AVPF, extended profile for RTCP Feedback](https://tools.ietf.org/html/rfc4585)\r\n  * [RFC 4588: Retransmission](https://tools.ietf.org/html/rfc4588) (uses AVPF)"},"comment":{"url":"https://api.github.com/repos/roc-project/roc/issues/comments/172137518","html_url":"https://github.com/roc-project/roc/issues/48#issuecomment-172137518","issue_url":"https://api.github.com/repos/roc-project/roc/issues/48","id":172137518,"user":{"login":"gavv","id":8436629,"avatar_url":"https://avatars.githubusercontent.com/u/8436629?v=3","gravatar_id":"","url":"https://api.github.com/users/gavv","html_url":"https://github.com/gavv","followers_url":"https://api.github.com/users/gavv/followers","following_url":"https://api.github.com/users/gavv/following{/other_user}","gists_url":"https://api.github.com/users/gavv/gists{/gist_id}","starred_url":"https://api.github.com/users/gavv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gavv/subscriptions","organizations_url":"https://api.github.com/users/gavv/orgs","repos_url":"https://api.github.com/users/gavv/repos","events_url":"https://api.github.com/users/gavv/events{/privacy}","received_events_url":"https://api.github.com/users/gavv/received_events","type":"User","site_admin":false},"created_at":"2016-01-16T00:45:01Z","updated_at":"2016-01-16T00:45:01Z","body":"### What we need to do\r\n\r\nFor standard-compliant LDPC FEC Scheme support, we'll start with the following.\r\n\r\n**Covered by #6:**\r\n\r\n- [ ] Allow to configure FSSI parameters at runtime\r\n- [ ] Allow to configure packet size at runtime (we'll start with *strict flag = 1* support, see [RFC 6816](https://tools.ietf.org/html/rfc6816))\r\n- [ ] Allow dynamic block size received within Source/Repair FEC Payload ID\r\n\r\n**Packet formats:**\r\n\r\n- [ ] Add `LDPC_SourcePacket`, which includes payload and Source FEC Payload ID footer\r\n- [ ] Add `LDPC_RepairPacket`, which includes payload and Repair FEC Payload ID header\r\n\r\n`LDPC_SourcePacket` payload will contain original RTP packet. `LDPC_RepairPacket` payload will contain raw encoding symbols, without RTP header.\r\n\r\nAlternatively, we can invent our non-standard encapsulation of LDPC repair packets inside RTP. At first glance, it would consists of the following:\r\n* introduce non-standard media type (when we'll add SDP support);\r\n* introduce rules for filling the timestamp field of repair packets;\r\n* introduce rules for filling the SSRC field of repair packets and mapping source and repair streams using SDP;\r\n\r\nWe can use [RFC 6682](https://tools.ietf.org/html/rfc6682) as an example.\r\n\r\n**Changes in encoder and decoder:**\r\n\r\n- [ ] Use LDPC packets in `fec::Encoder`\r\n- [ ] Use LDPC packets in `fec::Decoder`\r\n\r\n**Changes in `roc_pipeline`:**\r\n\r\n(in case of sending repair packet directly over UDP w/o RTP encapsulation)\r\n\r\n- [ ] Receive repair packets on separate UDP port, because they become incompatible with RTP packets\r\n- [ ] Adopt `Server` for non-rtp repair packets"}}