Rust port of NewPipeExtractor (YT-only). Plugs into Straw via UniFFI.
Four allocation/latency wins in the hot extraction paths. Behavior preserved — all 120 in-crate tests green, clippy clean. - stream_extractor: borrow streamingData out of the owned android + ios player responses instead of deep-cloning the largest subtree of each response. A shared Value::Null static backs the absent case. - stream_extractor: merge_formats returns borrowed &Value format objects rather than cloning each one (~20-40 per video) — they are only read (.get()) downstream. - channel: fetch the Home and Videos tabs concurrently via thread::scope so a channel open costs one round-trip of latency, not two. Home stays mandatory; the Videos tab stays best-effort (now also resilient to a panicked worker thread). - downloader: build the response body with String::from_utf8 (in-place on the valid-UTF-8 common case) instead of from_utf8_lossy, which always copies; the lossy fallback for invalid bytes is preserved. |
||
|---|---|---|
| .forgejo/workflows | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
strawcore
Rust port of NewPipeExtractor (v0.26.2), YouTube-only. Plugs into Straw via UniFFI.
rustypipe regex-parses YouTube's player.js and reimplements the signature deobfuscator in Rust — every YT player rotation breaks it. NPE embeds a JS engine and executes the function live, which survives rotations. strawcore mirrors that architecture on QuickJS via rquickjs.
Build + test
cargo build
cargo test --lib # offline unit tests
cargo test --features online-tests # full smoke incl. live httpbin.org
License
GPL-3.0-or-later. NPE is GPL-3.0; this port inherits.