Skip to main content

RaptorQ (RFC6330)

Project description

raptorq

Build Status Crates Documentation PyPI

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.4.2.tar.gz (81.8 kB view details)

Uploaded Source

Built Distributions

raptorq-1.4.2-cp38-cp38-manylinux1_x86_64.whl (305.5 kB view details)

Uploaded CPython 3.8

raptorq-1.4.2-cp37-cp37m-manylinux1_x86_64.whl (305.5 kB view details)

Uploaded CPython 3.7m

raptorq-1.4.2-cp36-cp36m-manylinux1_x86_64.whl (305.6 kB view details)

Uploaded CPython 3.6m

raptorq-1.4.2-cp35-cp35m-manylinux1_x86_64.whl (305.5 kB view details)

Uploaded CPython 3.5m

File details

Details for the file raptorq-1.4.2.tar.gz.

File metadata

  • Download URL: raptorq-1.4.2.tar.gz
  • Upload date:
  • Size: 81.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.8.1

File hashes

Hashes for raptorq-1.4.2.tar.gz
Algorithm Hash digest
SHA256 2a82b5682351dab5404567ac9cf4eb256da2d7506b5936c3ac051e555640acc6
MD5 db89da1cedb9aaef6a89f28b262c90fc
BLAKE2b-256 b3130479cdec3e12d8b9b868af8015c198f103962d41342bf9d0b87e5ded61e2

See more details on using hashes here.

File details

Details for the file raptorq-1.4.2-cp38-cp38-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for raptorq-1.4.2-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 acef6c529cefe9a7accff799b376d75177f6ed590c08aac13d9f2afe38025c64
MD5 6f405320c1b67f4abe94b4e5f855552a
BLAKE2b-256 a5c328b35effc1fe832dfcd007a2c934798c722ea42f27804460adcd49556eeb

See more details on using hashes here.

File details

Details for the file raptorq-1.4.2-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for raptorq-1.4.2-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4f710390f5ec13f6152a886c151613cc585f9648e11c9e39f306b5fd38ff8d78
MD5 db34e48a68f85974b647669b503e2dd5
BLAKE2b-256 6aca311cf2263508405e671948eb69a257a774e28e74156f3d7f6fe945b5fe2e

See more details on using hashes here.

File details

Details for the file raptorq-1.4.2-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for raptorq-1.4.2-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 7b0c3ebf412f20ab71a357ac1b56ee61446c8aea18d7096688d325bf665c711b
MD5 00442f41055787b28c4851e5acf5846c
BLAKE2b-256 dcf7c989657f0f94a7ab4939afe609a3bc8807c7f1b60ef2b60f47148f0be737

See more details on using hashes here.

File details

Details for the file raptorq-1.4.2-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for raptorq-1.4.2-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3a029121b83bbc87f8346ba4a1c15ef624ec851b12926d578523876874feaa25
MD5 cdd716a2da6ab1d4f9ca60275332dba0
BLAKE2b-256 39c7722bbeff012d1a1fb58fe8cd27dd9d73fb89ce5ec42fa7c3ef3ff60ca04f

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