RustAudio / rodio

Rust audio playback library
Apache License 2.0
1.73k stars 223 forks source link

symphonia-flac panic #592

Closed Initsnow closed 2 months ago

Initsnow commented 2 months ago

I'm currently writing a third-party client for a streaming music platform. When I use rodio to play the highest quality audio, I get an error:

Details

``` thread 'main' panicked at src/lib.rs:154:61: called `Result::unwrap()` on an `Err` value: IoError("end of stream") stack backtrace: 0: std::panicking::begin_panic_handler at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library\std\src\panicking.rs:652 1: core::panicking::panic_fmt at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library\core\src\panicking.rs:72 2: core::result::unwrap_failed at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library\core\src\result.rs:1654 3: enum2$ >,enum2$ > >::unwrap at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\core\src\result.rs:1077 4: lib::play::Player::restart at .\src\lib.rs:154 5: mruwyy::components::playbar::handle_play_action_start::async_fn$0 at .\src\components\playbar.rs:742 6: mruwyy::components::playbar::PlayBar::closure$3::async_block$0 at .\src\components\playbar.rs:121 7: dioxus_core::runtime::Runtime::handle_task_wakeup at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\dioxus-core-0.5.1\src\tasks.rs:207 8: dioxus_core::virtual_dom::VirtualDom::render_immediate at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\dioxus-core-0.5.1\src\virtual_dom.rs:649 9: dioxus_desktop::app::App::handle_user_event_msg at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\dioxus-desktop-0.5.1\src\app.rs:319 10: dioxus_desktop::launch::launch_virtual_dom_blocking::closure$0 at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\dioxus-desktop-0.5.1\src\launch.rs:55 11: tao::platform_impl::platform::event_loop::impl$3::run_return::closure$0,dioxus_desktop::launch::launch_virtual_dom_blocking::closure_env$0> at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop.rs:237 12: alloc::boxed::impl$49::call_mut > >,ref_mut$ > >,dyn$ > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop\runner.rs:250 14: core::panic::unwind_safe::impl$25::call_once,tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0 > > at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\core\src\panic\unwind_safe.rs:272 15: std::panicking::try::do_call > >,tuple$<> > at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\std\src\panicking.rs:559 16: dioxus_desktop::query::_::impl$0::deserialize::impl$2::visit_map > 17: std::panicking::try,core::panic::unwind_safe::AssertUnwindSafe > > > at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\std\src\panicking.rs:523 18: std::panic::catch_unwind > >,tuple$<> > at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\std\src\panic.rs:149 19: tao::platform_impl::platform::event_loop::runner::EventLoopRunner >::catch_unwind,tuple$<>,tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handl at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop\runner.rs:156 20: tao::platform_impl::platform::event_loop::runner::EventLoopRunner >::call_event_handler > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop\runner.rs:242 21: tao::platform_impl::platform::event_loop::runner::EventLoopRunner >::send_event > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop\runner.rs:224 22: tao::platform_impl::platform::event_loop::ThreadMsgTargetSubclassInput >::send_event > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop.rs:125 23: tao::platform_impl::platform::event_loop::thread_event_target_callback::closure$0 > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop.rs:2296 24: core::ops::function::FnOnce::call_once >,tuple$<> > at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\core\src\ops\function.rs:250 25: core::panic::unwind_safe::impl$25::call_once > > at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\core\src\panic\unwind_safe.rs:272 26: std::panicking::try::do_call > >,windows::Win32::Foundation::LRESULT> at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\std\src\panicking.rs:559 27: dioxus_desktop::query::_::impl$0::deserialize::impl$2::visit_map > 28: std::panicking::try > > > at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\std\src\panicking.rs:523 29: std::panic::catch_unwind > >,windows::Win32::Foundation::LRESULT> at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\std\src\panic.rs:149 30: tao::platform_impl::platform::event_loop::runner::EventLoopRunner >::catch_unwind,windows::Win32::Foundation::LRESULT,tao::platform_impl::platform::event_loop::threa at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop\runner.rs:156 31: tao::platform_impl::platform::event_loop::thread_event_target_callback > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop.rs:2345 32: DefSubclassProc 33: DefSubclassProc 34: DispatchMessageW 35: DispatchMessageW 36: windows::Win32::UI::WindowsAndMessaging::DispatchMessageW at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\windows-0.54.0\src\Windows\Win32\UI\WindowsAndMessaging\mod.rs:764 37: tao::platform_impl::platform::event_loop::EventLoop >::run_return,dioxus_desktop::launch::launch_virtual_dom_blocking::closure_env$0> at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop.rs:259 38: tao::platform_impl::platform::event_loop::EventLoop >::run,dioxus_desktop::launch::launch_virtual_dom_blocking::closure_env$0> at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\platform_impl\windows\event_loop.rs:221 39: tao::event_loop::EventLoop >::run,dioxus_desktop::launch::launch_virtual_dom_blocking::closure_env$0> at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tao-0.26.2\src\event_loop.rs:211 40: dioxus_desktop::launch::launch_virtual_dom_blocking at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\dioxus-desktop-0.5.1\src\launch.rs:17 41: dioxus_desktop::launch::launch_virtual_dom::async_block$0 at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\dioxus-desktop-0.5.1\src\launch.rs:76 42: tokio::task::unconstrained::impl$0::poll::closure$0 > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\task\unconstrained.rs:25 43: tokio::runtime::coop::with_budget at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\coop.rs:107 44: tokio::runtime::coop::with_unconstrained at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\coop.rs:80 45: tokio::task::unconstrained::impl$0::poll > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\task\unconstrained.rs:25 46: tokio::runtime::park::impl$4::block_on::closure$0 > > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\park.rs:281 47: tokio::runtime::coop::with_budget at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\coop.rs:107 48: tokio::runtime::coop::budget at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\coop.rs:73 49: tokio::runtime::park::CachedParkThread::block_on > > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\park.rs:281 50: tokio::runtime::context::blocking::BlockingRegionGuard::block_on > > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\context\blocking.rs:66 51: tokio::runtime::scheduler::multi_thread::impl$0::block_on::closure$0 > > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\scheduler\multi_thread\mod.rs:87 52: tokio::runtime::context::runtime::enter_runtime > >,tuple$<> > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\context\runtime.rs:65 53: tokio::runtime::scheduler::multi_thread::MultiThread::block_on > > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\scheduler\multi_thread\mod.rs:86 54: tokio::runtime::runtime::Runtime::block_on > > at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\tokio-1.38.0\src\runtime\runtime.rs:349 55: dioxus_desktop::launch::launch_virtual_dom at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\dioxus-desktop-0.5.1\src\launch.rs:71 56: dioxus_desktop::launch::launch at E:\packages\.cargo\registry\src\mirrors.tuna.tsinghua.edu.cn-2eab394af869c8a2\dioxus-desktop-0.5.1\src\launch.rs:95 57: dioxus::launch::LaunchBuilder,assoc$,alloc::alloc::Global> > > > >::launch > at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\core\src\ops\function.rs:250 61: core::hint::black_box at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081\library\core\src\hint.rs:338 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. ```

code here: let source = Decoder::new(BufReader::new(file)).unwrap(); ffprobe result:

  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
Input #0, flac, from '2097486092.flac':
  Metadata:
    encoder         : Lavf58.45.100
  Duration: 00:04:26.41, start: 0.000000, bitrate: 5206 kb/s
  Stream #0:0: Audio: flac, 192000 Hz, stereo, s32 (24 bit)

audio file link

I used the symphonia-flac feature because I want to seek in flac files. But it can't play the 'highest' audio, but default decoder can work fine

dvdsk commented 2 months ago

It could be an issue in symphonia. Can you see if it plays using the symphonia play example and report back?

Initsnow commented 2 months ago

It could be an issue in symphonia. Can you see if it plays using the symphonia play example and report back?

It looks like this problem is caused by symphonia

.\symphonia-play.exe 'C:\Users\Initsnow\AppData\Local\mruwyy\2097486092.flac'
 ERROR symphonia_play > end of stream

Maybe I shoud submit a new issue in symphonia repository

dvdsk commented 2 months ago

Thanks for narrowing it down :+1:

Maybe I shoud submit a new issue in symphonia repository

Since the file plays fine in other software (like vlc/audacity etc) its a bug in Symphonia. Making an issue in the symphonia repository is there is the next thing to do.