Comments (4)
If I understand correctly, you're using FFmpeg to demux your audio and then passing the packets to Symphonia for decoding. If so, the issue is that the example is trying to do both demuxing and decoding with Symphonia.
When you have a WAVE file that contains uncompressed PCM audio, the audio packets are just the raw PCM samples. So when Symphonia tries to determine what audio format it is to select a demuxer (aka a FormatReader
), it just happens to land on a MP3 demuxer because the raw PCM audio data just so happened to look like a MP3 file.
Essentially, you want to skip the demuxing step with Symphonia entirely. To do this you can instantiate a PcmDecoder
manually and convert the FFmpeg packets to Symphonia Packet
s.
I didn't quite understand why you need FFmpeg to do the demuxing, though. Take a look at the the symphonia-check
utility. It spawns a ffmpeg
process and pipes the output WAVE to Symphonia. This works fine because Symphonia does the demuxing. Perhaps that utility can give you some ideas?
As for why AAC works: your ffmpeg
command line for AAC creates an AAC file using the ADTS format. It looks like FFmpeg passes the ADTS packets straight through to the decoder without removing the ADTS headers. Therefore, since Symphonia has an ADTS demuxer, it is able to select the ADTS demuxer and everything works as intended.
from symphonia.
If I understand correctly, you're using FFmpeg to demux your audio and then passing the packets to Symphonia for decoding. If so, the issue is that the example is trying to do both demuxing and decoding with Symphonia.
When you have a WAVE file that contains uncompressed PCM audio, the audio packets are just the raw PCM samples. So when Symphonia tries to determine what audio format it is to select a demuxer (aka a
FormatReader
), it just happens to land on a MP3 demuxer because the raw PCM audio data just so happened to look like a MP3 file.Essentially, you want to skip the demuxing step with Symphonia entirely. To do this you can instantiate a
PcmDecoder
manually and convert the FFmpeg packets to SymphoniaPacket
s.I didn't quite understand why you need FFmpeg to do the demuxing, though. Take a look at the the
symphonia-check
utility. It spawns affmpeg
process and pipes the output WAVE to Symphonia. This works fine because Symphonia does the demuxing. Perhaps that utility can give you some ideas?As for why AAC works: your
ffmpeg
command line for AAC creates an AAC file using the ADTS format. It looks like FFmpeg passes the ADTS packets straight through to the decoder without removing the ADTS headers. Therefore, since Symphonia has an ADTS demuxer, it is able to select the ADTS demuxer and everything works as intended.
Thank you A LOT. Now it works :).
I have one question left.
There's the function to create a packet from a slice:
pub fn new_from_slice(track_id: u32, ts: u64, dur: u64, buf: &[u8])
If i fill everything except for the buffer with 0s it works fine and everything is alright. However, i'm curious whether it could affect anything or not in my case since i'm manually decoding each and every packet?
I didn't quite understand why you need FFmpeg to do the demuxing, though. Take a look at the the symphonia-check utility. It spawns a ffmpeg process and pipes the output WAVE to Symphonia. This works fine because Symphonia does the demuxing. Perhaps that utility can give you some ideas?
I'm demuxing a .wav file here for the sake of simplicity. In a real life scenario i'm demuxing an mpeg-ts stream, transcode the AAC elementary stream to pcm_s16le, then decode it to f32
samples using Symphonia
then feed it to whisper-gcc
In real time. Btw, this is the prototype and maybe it will be useful for someone in a future:
prototype
from symphonia.
If i fill everything except for the buffer with 0s it works fine and everything is alright. However, i'm curious whether it could affect anything or not in my case since i'm manually decoding each and every packet?
This is fine for PcmDecoder
. However, some other decoders (generally for the lossy codecs) use the duration to trim the decoded audio buffer for gapless playback.
I'm demuxing a .wav file here for the sake of simplicity. In a real life scenario i'm demuxing an mpeg-ts stream, transcode the AAC elementary stream to pcm_s16le, then decode it to f32 samples using Symphonia then feed it to whisper-gcc In real time. Btw, this is the prototype and maybe it will be useful for someone in a future:
Ah, I see. So you want to use ffmpeg
because Symphonia doesn't have a MPEG-TS demuxer?
from symphonia.
Ah, I see. So you want to use ffmpeg because Symphonia doesn't have a MPEG-TS demuxer?
Yeah, exactly.
This is fine for PcmDecoder. However, some other decoders (generally for the lossy codecs) use the duration to trim the decoded audio buffer for gapless playback.
Thanks for the answer!
from symphonia.
Related Issues (20)
- PCM decoder "pcm: maximum frames per packet is required"
- verify_timebase test failing on i386 architecture HOT 3
- License clarification (for the SUN Microsystems part) HOT 3
- [Feature request] make it easier to detect what a track / codec type is HOT 2
- style: `symphonia_format_mkv::ebml` prints a lot of `element with tag: A3` HOT 1
- `seek(SeekMode::Accurate, x)` can jump onto a position that is after the requested seek position HOT 14
- [Feature request] Proivde a way to transfer whole buffer from the SampleBuf HOT 2
- README claims support of AAC profiles other than AAC-LC using non-existent feature flags HOT 2
- [Doc request] Multi-value tags in metadata HOT 2
- Update benchmarks following v0.5.4 HOT 1
- Issue parsing AIFF files: "invalid chunk-id, expected 'FORM'" and "FourCC contains invalid characters: 02 87 04 06" HOT 3
- isomp4: `CodecType` and `extra_data` missing from `avc1` track HOT 1
- Log flood HOT 3
- [mkv] How to obtain `InfoElement::title` (mkv segment title)? HOT 5
- mp3 Seeking has warnings in logs HOT 1
- Probe result fails for FLAC files above 96kHz
- Mkv/Webm seeking error HOT 5
- How to decode an async stream? HOT 2
- Mono MP3 audio is sped up when using symphonia-play
- Question about Converting Audio Samples to WAV Format and Retrieving Bits-Per-Sample HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from symphonia.