Skip to main content

RaptorQ (RFC6330)

Project description

raptorq

Build Status Crates Documentation PyPI 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

This crate requires Rust 1.46 or newer.

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.465secs, throughput: 2202.0Mbit/s
symbol count = 100, encoded 127 MB in 0.483secs, throughput: 2118.9Mbit/s
symbol count = 250, encoded 127 MB in 0.474secs, throughput: 2158.1Mbit/s
symbol count = 500, encoded 127 MB in 0.460secs, throughput: 2218.5Mbit/s
symbol count = 1000, encoded 126 MB in 0.490secs, throughput: 2072.7Mbit/s
symbol count = 2000, encoded 126 MB in 0.562secs, throughput: 1807.2Mbit/s
symbol count = 5000, encoded 122 MB in 0.578secs, throughput: 1689.6Mbit/s
symbol count = 10000, encoded 122 MB in 0.687secs, throughput: 1421.5Mbit/s
symbol count = 20000, encoded 122 MB in 1.019secs, throughput: 958.4Mbit/s
symbol count = 50000, encoded 122 MB in 1.432secs, throughput: 682.0Mbit/s

Symbol size: 1280 bytes (with pre-built plan)
symbol count = 10, encoded 127 MB in 0.220secs, throughput: 4654.2Mbit/s
symbol count = 100, encoded 127 MB in 0.149secs, throughput: 6868.7Mbit/s
symbol count = 250, encoded 127 MB in 0.167secs, throughput: 6125.4Mbit/s
symbol count = 500, encoded 127 MB in 0.163secs, throughput: 6260.8Mbit/s
symbol count = 1000, encoded 126 MB in 0.173secs, throughput: 5870.7Mbit/s
symbol count = 2000, encoded 126 MB in 0.199secs, throughput: 5103.6Mbit/s
symbol count = 5000, encoded 122 MB in 0.257secs, throughput: 3799.9Mbit/s
symbol count = 10000, encoded 122 MB in 0.341secs, throughput: 2863.8Mbit/s
symbol count = 20000, encoded 122 MB in 0.427secs, throughput: 2287.0Mbit/s
symbol count = 50000, encoded 122 MB in 0.540secs, throughput: 1808.4Mbit/s

Symbol size: 1280 bytes
symbol count = 10, decoded 127 MB in 0.679secs using 0.0% overhead, throughput: 1508.0Mbit/s
symbol count = 100, decoded 127 MB in 0.583secs using 0.0% overhead, throughput: 1755.5Mbit/s
symbol count = 250, decoded 127 MB in 0.564secs using 0.0% overhead, throughput: 1813.7Mbit/s
symbol count = 500, decoded 127 MB in 0.539secs using 0.0% overhead, throughput: 1893.3Mbit/s
symbol count = 1000, decoded 126 MB in 0.571secs using 0.0% overhead, throughput: 1778.7Mbit/s
symbol count = 2000, decoded 126 MB in 0.708secs using 0.0% overhead, throughput: 1434.5Mbit/s
symbol count = 5000, decoded 122 MB in 0.769secs using 0.0% overhead, throughput: 1269.9Mbit/s
symbol count = 10000, decoded 122 MB in 0.902secs using 0.0% overhead, throughput: 1082.7Mbit/s
symbol count = 20000, decoded 122 MB in 1.135secs using 0.0% overhead, throughput: 860.4Mbit/s
symbol count = 50000, decoded 122 MB in 1.929secs using 0.0% overhead, throughput: 506.3Mbit/s

symbol count = 10, decoded 127 MB in 0.669secs using 5.0% overhead, throughput: 1530.5Mbit/s
symbol count = 100, decoded 127 MB in 0.582secs using 5.0% overhead, throughput: 1758.5Mbit/s
symbol count = 250, decoded 127 MB in 0.550secs using 5.0% overhead, throughput: 1859.9Mbit/s
symbol count = 500, decoded 127 MB in 0.520secs using 5.0% overhead, throughput: 1962.5Mbit/s
symbol count = 1000, decoded 126 MB in 0.548secs using 5.0% overhead, throughput: 1853.3Mbit/s
symbol count = 2000, decoded 126 MB in 0.582secs using 5.0% overhead, throughput: 1745.1Mbit/s
symbol count = 5000, decoded 122 MB in 0.658secs using 5.0% overhead, throughput: 1484.1Mbit/s
symbol count = 10000, decoded 122 MB in 0.835secs using 5.0% overhead, throughput: 1169.5Mbit/s
symbol count = 20000, decoded 122 MB in 1.105secs using 5.0% overhead, throughput: 883.8Mbit/s
symbol count = 50000, decoded 122 MB in 1.784secs using 5.0% overhead, throughput: 547.4Mbit/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.

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

Uploaded Source

Built Distributions

raptorq-1.6.1-cp39-cp39-manylinux1_x86_64.whl (314.5 kB view details)

Uploaded CPython 3.9

raptorq-1.6.1-cp38-cp38-manylinux1_x86_64.whl (314.5 kB view details)

Uploaded CPython 3.8

raptorq-1.6.1-cp37-cp37m-manylinux1_x86_64.whl (314.5 kB view details)

Uploaded CPython 3.7m

raptorq-1.6.1-cp36-cp36m-manylinux1_x86_64.whl (314.9 kB view details)

Uploaded CPython 3.6m

raptorq-1.6.1-cp35-cp35m-manylinux1_x86_64.whl (314.5 kB view details)

Uploaded CPython 3.5m

File details

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

File metadata

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

File hashes

Hashes for raptorq-1.6.1.tar.gz
Algorithm Hash digest
SHA256 4b4cb991b1bc685b7c7dfdebc3682ff978b63ed8d471878d2654fdcc244eb5b3
MD5 ee01e4e844760140ea17071185e7f4a0
BLAKE2b-256 5085b3f1e2396f1f7fbe0cad7d0119c4adfd413f6f967f9dd2743925cab7fdc5

See more details on using hashes here.

File details

Details for the file raptorq-1.6.1-cp39-cp39-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for raptorq-1.6.1-cp39-cp39-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 bc50e9615602291975ceef9701df8bb17ec849fb5a421aea16d056ce69e94756
MD5 bd626f9f6cff7625bdb71a3a1fe29901
BLAKE2b-256 f57c096688785c4bd6dafdeaf381f2848ff5bad5f057cbe8b5c8542c56115052

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for raptorq-1.6.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 bd952fd74359354480a03ff4577e7f3b8acb1f2596d4e4537158d63e601da6f5
MD5 20618a7842016f0b8ca759740574b402
BLAKE2b-256 2d2f99e83a0969f91dff057541b9c78c3f036e96d6f3fbd2c9608e1590ebdd18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for raptorq-1.6.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4c72b3e6e0a58d019606183ac8b0dbd1f768867b498edbcd450ac3edddfe04eb
MD5 45de9ab295fc877fe58c0c58f6aed6de
BLAKE2b-256 982fa510ca1e8ba408c9276dcfad8fce1db67bbcc0e4d32491722aa0e0c28677

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for raptorq-1.6.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3584e1ffbacfc74991e4a37e701e3f9a8ad4bbc076bb9a578d2c18fd493c4d52
MD5 aab2c7ef42df5be194f7c78d2c9fd5cc
BLAKE2b-256 c0720a9c7e061112a52084b0084de09d35791f9fd53d23173360e3bdd54c81e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for raptorq-1.6.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 799a6abf6132360f4c621e83ae87c478a3c32c2b229135d02d9dc4151cc1620d
MD5 b38b636842ee9c6ab27d3186d3b8ac9c
BLAKE2b-256 3d38a56529f94ceb65ec3bcf4d30ba442cb097419fd1a85daf4bd9ac4a1e8f3f

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