Skip to main content

RaptorQ (RFC6330)

Project description

raptorq

Build Status Crates Documentation dependency status

Rust implementation of RaptorQ (RFC6330)

Recovery properties: Reconstruction probability after receiving K + h packets = 1 - 1/256^(h + 1). Where K is the number of packets in the original message, and h is the number of additional packets received. See "RaptorQ Technical Overview" by Qualcomm

Examples

See the examples/ directory for usage.

Benchmarks

The following were run on an Intel Core i5-6600K @ 3.50GHz

Symbol size: 1280 bytes (without pre-built plan)
symbol count = 10, encoded 127 MB in 0.532secs, throughput: 1924.7Mbit/s
symbol count = 100, encoded 127 MB in 0.590secs, throughput: 1734.6Mbit/s
symbol count = 250, encoded 127 MB in 0.572secs, throughput: 1788.4Mbit/s
symbol count = 500, encoded 127 MB in 0.549secs, throughput: 1858.8Mbit/s
symbol count = 1000, encoded 126 MB in 0.599secs, throughput: 1695.5Mbit/s
symbol count = 2000, encoded 126 MB in 0.673secs, throughput: 1509.1Mbit/s
symbol count = 5000, encoded 122 MB in 0.758secs, throughput: 1288.3Mbit/s
symbol count = 10000, encoded 122 MB in 0.953secs, throughput: 1024.7Mbit/s
symbol count = 20000, encoded 122 MB in 1.383secs, throughput: 706.1Mbit/s
symbol count = 50000, encoded 122 MB in 2.041secs, throughput: 478.5Mbit/s

Symbol size: 1280 bytes (with pre-built plan)
symbol count = 10, encoded 127 MB in 0.241secs, throughput: 4248.7Mbit/s
symbol count = 100, encoded 127 MB in 0.160secs, throughput: 6396.5Mbit/s
symbol count = 250, encoded 127 MB in 0.173secs, throughput: 5913.0Mbit/s
symbol count = 500, encoded 127 MB in 0.176secs, throughput: 5798.3Mbit/s
symbol count = 1000, encoded 126 MB in 0.200secs, throughput: 5078.1Mbit/s
symbol count = 2000, encoded 126 MB in 0.208secs, throughput: 4882.8Mbit/s
symbol count = 5000, encoded 122 MB in 0.280secs, throughput: 3487.7Mbit/s
symbol count = 10000, encoded 122 MB in 0.400secs, throughput: 2441.4Mbit/s
symbol count = 20000, encoded 122 MB in 0.494secs, throughput: 1976.8Mbit/s
symbol count = 50000, encoded 122 MB in 0.656secs, throughput: 1488.7Mbit/s

Symbol size: 1280 bytes
symbol count = 10, decoded 127 MB in 0.723secs using 0.0% overhead, throughput: 1416.2Mbit/s
symbol count = 100, decoded 127 MB in 0.701secs using 0.0% overhead, throughput: 1460.0Mbit/s
symbol count = 250, decoded 127 MB in 0.650secs using 0.0% overhead, throughput: 1573.8Mbit/s
symbol count = 500, decoded 127 MB in 0.638secs using 0.0% overhead, throughput: 1599.5Mbit/s
symbol count = 1000, decoded 126 MB in 0.676secs using 0.0% overhead, throughput: 1502.4Mbit/s
symbol count = 2000, decoded 126 MB in 0.764secs using 0.0% overhead, throughput: 1329.4Mbit/s
symbol count = 5000, decoded 122 MB in 0.896secs using 0.0% overhead, throughput: 1089.9Mbit/s
symbol count = 10000, decoded 122 MB in 1.176secs using 0.0% overhead, throughput: 830.4Mbit/s
symbol count = 20000, decoded 122 MB in 1.489secs using 0.0% overhead, throughput: 655.9Mbit/s
symbol count = 50000, decoded 122 MB in 2.633secs using 0.0% overhead, throughput: 370.9Mbit/s

symbol count = 10, decoded 127 MB in 0.713secs using 5.0% overhead, throughput: 1436.1Mbit/s
symbol count = 100, decoded 127 MB in 0.702secs using 5.0% overhead, throughput: 1457.9Mbit/s
symbol count = 250, decoded 127 MB in 0.637secs using 5.0% overhead, throughput: 1605.9Mbit/s
symbol count = 500, decoded 127 MB in 0.613secs using 5.0% overhead, throughput: 1664.8Mbit/s
symbol count = 1000, decoded 126 MB in 0.643secs using 5.0% overhead, throughput: 1579.5Mbit/s
symbol count = 2000, decoded 126 MB in 0.701secs using 5.0% overhead, throughput: 1448.8Mbit/s
symbol count = 5000, decoded 122 MB in 0.826secs using 5.0% overhead, throughput: 1182.3Mbit/s
symbol count = 10000, decoded 122 MB in 1.061secs using 5.0% overhead, throughput: 920.4Mbit/s
symbol count = 20000, decoded 122 MB in 1.380secs using 5.0% overhead, throughput: 707.7Mbit/s
symbol count = 50000, decoded 122 MB in 2.341secs using 5.0% overhead, throughput: 417.2Mbit/s

Public API

Note that the additional classes exported by the benchmarking feature flag are not considered part of this crate's public API. Breaking changes to those classes may occur without warning. The flag is only provided so that internal classes can be used in this crate's benchmarks.

Python bindings

The Python bindings are generated using pyo3. Rust 1.37.0-nightly or higher is required for building pyo3 projects.

$ rustup install nightly
$ rustup override set nightly

Some operating systems require additional packages to be installed.

$ sudo apt install python3-dev

maturin is recommended for building the Python bindings in this crate.

$ pip install maturin
$ maturin build --cargo-extra-args="--features python"

Alternatively, refer to the Building and Distribution section in the pyo3 user guide. Note, you must pass the --cargo-extra-args="--features python" argument to Maturin when building this crate to enable the Python binding features.

License

Licensed under

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be licensed as above, without any additional terms or conditions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

raptorq-1.3.1_post1.tar.gz (81.3 kB view details)

Uploaded Source

Built Distributions

raptorq-1.3.1_post1-cp38-cp38-manylinux1_x86_64.whl (288.9 kB view details)

Uploaded CPython 3.8

raptorq-1.3.1_post1-cp37-cp37m-manylinux1_x86_64.whl (288.9 kB view details)

Uploaded CPython 3.7m

raptorq-1.3.1_post1-cp36-cp36m-manylinux1_x86_64.whl (289.2 kB view details)

Uploaded CPython 3.6m

raptorq-1.3.1_post1-cp35-cp35m-manylinux1_x86_64.whl (289.1 kB view details)

Uploaded CPython 3.5m

File details

Details for the file raptorq-1.3.1_post1.tar.gz.

File metadata

  • Download URL: raptorq-1.3.1_post1.tar.gz
  • Upload date:
  • Size: 81.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.7.9

File hashes

Hashes for raptorq-1.3.1_post1.tar.gz
Algorithm Hash digest
SHA256 e74584df4cc45eb1ff37f4329e1edccf0c6ade7ec2b1a38cb64af8c045cf21da
MD5 1b02ab27cddb12502d7079ef491b8767
BLAKE2b-256 b36f1aead771558e33ecf7dd6f81ef89e1168939b9c55b906aa992b6a335a522

See more details on using hashes here.

File details

Details for the file raptorq-1.3.1_post1-cp38-cp38-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for raptorq-1.3.1_post1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3aabca0d0cdae452abc57ca5693a3cb2e0009e5a48f918c84a84f636b0b30232
MD5 afd01bbbf2f761154fb15eb5bdbd69eb
BLAKE2b-256 4c9838e76011e5190b49c4197efee5cd131325645fdc4cf48affd377629e1601

See more details on using hashes here.

File details

Details for the file raptorq-1.3.1_post1-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for raptorq-1.3.1_post1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f40137e34c955ffcb470d130767bd5abc5006678f77fa8ba88fc718a22a91e50
MD5 31bd7341495a3b37c5953f694bb7e4eb
BLAKE2b-256 725b5ec67131e56d66e9565bac14d206fc679c4f1cdc11122aea26db588c5363

See more details on using hashes here.

File details

Details for the file raptorq-1.3.1_post1-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for raptorq-1.3.1_post1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 8ddfe10808485824f149e0fe3698b350ac1cf640707810c93767508c584cdb5b
MD5 6fdec288f4751623d974bed742582e7d
BLAKE2b-256 75367bfe16f87f3de198683b9b9367ccf59ed09ee4ce97d06adb75996a30d81a

See more details on using hashes here.

File details

Details for the file raptorq-1.3.1_post1-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for raptorq-1.3.1_post1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 781172ed164f02ebbbdf50a91d8ce25f1960080224bf875604376c87bdf14a83
MD5 aa3314f0cebd3b31a3d785b3eb74da0c
BLAKE2b-256 ca0ba961644d915371f7e5c75f0944b21595f73868b8774206ecdace3599fa88

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page