v0.1.0-X (vc=12): revert to NewPipeExtractor for working playback
Phase U (rustypipe Rust extractor) rolled back. Symptom: black screen
on play, root cause: rustypipe 0.11.4's JS deobfuscator can't parse
current YouTube player.js (YT changed the obfuscation pattern, no
upstream rustypipe release since June 2025). Switching clients
(Web → TV → Android/Ios) didn't help — the deobfuscator init fires
universally.
Kept in place for the future:
- rust/strawcore/ Cargo workspace + UniFFI scaffolding
- crafting-table runtime install (rustup + 4 Android targets +
cargo-ndk + NDK r27c)
- The U-2..U-5 commits in history (re-runnable when rustypipe is
fixed or we fork it).
Restored from commit 9550b207a (v0.1.0-T):
- NewPipe.init() in StrawApp.onCreate
- libs.newpipe.extractor + libs.squareup.okhttp deps
- NewPipeDownloader.kt + Thumbnails.kt
- ViewModels (Search/VideoDetail/Player/Channel/SubscriptionFeed) on
NewPipeExtractor calls
- VideoDetailScreen Download dialog using NewPipe's StreamInfo
Future-direction memo: openclaw-workspace/memory/project_rustypipe_fork.md
— fork plan + revival path for the Rust extractor when we're ready
to maintain it.
Verified working in the Android emulator: dQw4w9WgXcQ plays, ExoPlayer
reports state=PLAYING(3), position advancing, video surface rendering.
This commit is contained in:
parent
5be7d4c276
commit
9ad3302f52
17 changed files with 356 additions and 304 deletions
|
|
@ -129,14 +129,18 @@ pub async fn stream_info(url: String) -> Result<StreamInfo, StrawcoreError> {
|
|||
log::info!("strawcore::stream_info id={}", id);
|
||||
let rp = RustyPipe::new();
|
||||
|
||||
// rustypipe's default `player()` uses the Web client first. Those URLs
|
||||
// come back signed against the Web fetch's session/UA — ExoPlayer can't
|
||||
// replay them (404/403/black screen). Force the TV embedded + iOS
|
||||
// clients, both of which return ungated direct-play URLs the way
|
||||
// NewPipe's resolver does.
|
||||
// rustypipe's default `player()` uses the Web client first, which
|
||||
// returns signed URLs that need JS deobfuscation. Even the TV (TVHTML5)
|
||||
// client signs URLs nowadays, so deobfuscation runs and currently
|
||||
// fails ("could not extract sig fn name") because YT changed the
|
||||
// obfuscation pattern after rustypipe 0.11.4's last cut.
|
||||
//
|
||||
// Android and iOS YT-app clients serve URLs UNSIGNED — no sig
|
||||
// decryption needed, ExoPlayer plays them directly. This is the same
|
||||
// path NewPipe uses for its mobile + iOS-embed strategies.
|
||||
let player = rp
|
||||
.query()
|
||||
.player_from_clients(&id, &[ClientType::Tv, ClientType::Ios])
|
||||
.player_from_clients(&id, &[ClientType::Android, ClientType::Ios])
|
||||
.await?;
|
||||
let details = &player.details;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue