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

Uploaded Source

Built Distributions

raptorq-1.4.0-cp38-cp38-manylinux1_x86_64.whl (296.4 kB view details)

Uploaded CPython 3.8

raptorq-1.4.0-cp37-cp37m-manylinux1_x86_64.whl (296.4 kB view details)

Uploaded CPython 3.7m

raptorq-1.4.0-cp36-cp36m-manylinux1_x86_64.whl (296.6 kB view details)

Uploaded CPython 3.6m

raptorq-1.4.0-cp35-cp35m-manylinux1_x86_64.whl (296.6 kB view details)

Uploaded CPython 3.5m

File details

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

File metadata

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

File hashes

Hashes for raptorq-1.4.0.tar.gz
Algorithm Hash digest
SHA256 1a1ddbba2a04e6418a6260e3c539edd44974f9c2cb12e5d6dfbe08e965281a67
MD5 220a9b9ecce7282e2bc89e9f1d232e43
BLAKE2b-256 64a79431916a698b764f5a0335e07e67e63c701273c1071dafe6e713aeee911b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for raptorq-1.4.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 c886b368d2e965655de0dfea4d35ddd12284245625175309e973a15502c42aca
MD5 7153811c66d9354c3ab3b5f82306b887
BLAKE2b-256 52cbbe69b6f84449e16e396243d8b08d5110aa8bf2a57f8e06428712976c3862

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for raptorq-1.4.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3d809c4bb14f9962740c064fedaa07ae5abd489863b1ca0dab305e74d38c0948
MD5 69aa2f32bea900cb94e65cf4ec912719
BLAKE2b-256 43b8570de85678ef9e6e5de2db1ef9d9332218adbcc7fa62c5f27e2a030f9bcc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for raptorq-1.4.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 846bbf795bdb8a39d1937949e40fb07851d05b6d1c5f40c476dbca7c62823908
MD5 faa97989a2039f8c59b08a80a51f9ad2
BLAKE2b-256 a20d2c42d6a7fb2847e7b58a8a5e8263836d5adcb7498284d4dc14a07c73004b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for raptorq-1.4.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 7125eb5136cda309b3af11ec2ae100041adb99981dfd2e49f9bb392b53116cfd
MD5 3dddd3ceb2f25ad1f37aa03ab1b8d0cf
BLAKE2b-256 80280f2a1dcb137c7c61313a0d7c66c9baacf945d4cbd75c22b89f527da8e1a1

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