www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - GStreamer issues.

reply Johnson <Johnson Johnson.com> writes:
I can't get the example to work(although slightly modified).

The installed version of GStreamer is 1.12.2
The file is: D:\temp\test.ogg
Loading
Setting to PLAYING.
Running.
XError: Could not demultiplex stream. dbug: gstoggdemux.c(4418): 
gst_ogg_demux_find_chains (): 
/GstPipeline:audio-player/GstOggDemux:ogg-parser:
can't get first chain Actually I was getting a much worse error before ;/ I can't remember it now. The installed version of GStreamer is 1.12.2 The file is: D:\temp\test2.wav Loading Setting to PLAYING. Running.
XError: Internal data stream error. dbug: gstwavparse.c(2249): 
gst_wavparse_loop (): 
/GstPipeline:audio-player/GstWavParse:wav-parser:
streaming stopped, reason not-linked (-1) Basically all I did was change the sink: sink = ElementFactory.make("autoaudiosink", "auto-output"); So it I could get past the error about alsa. I think the last name doesn't matter? I downloaded the gstreamer binaries from their site, had some issues with a few of the dll's complaining about gxx errors, I removed them(h264, soundtouch, tag). For the wav I changed //parser = ElementFactory.make("oggdemux", "ogg-parser"); //decoder = ElementFactory.make("vorbisdec", "vorbis-decoder"); parser = ElementFactory.make("wavparse", "wav-parser"); decoder = ElementFactory.make("audioconvert", "wav-decoder"); which, is all i could find on line, I don't know if it's right at all. Ultimately I want to be able to read somewhat arbitrary audio formats(most common at least), get the raw channel data(samples for each channel), play/pause/stop with good accuracy(no latency or low latency(<20ms), possibly do some pitch shifting and basic mixing(EQ, limiting, panning, etc), and eventually play some videos. Is GstreamerD going to be useful for this or so I look in to using ffmpeg directly and do some of the stuff(e.g., eq) myself? Thanks.
Aug 21 2017
parent reply Mike Wey <mike-wey example.com> writes:
On 22-08-17 02:13, Johnson wrote:
 I can't get the example to work(although slightly modified).
 
 The installed version of GStreamer is 1.12.2
 The file is: D:\temp\test.ogg
 Loading
 Setting to PLAYING.
 Running.
 XError: Could not demultiplex stream. dbug: gstoggdemux.c(4418): 
 gst_ogg_demux_find_chains (): 
 /GstPipeline:audio-player/GstOggDemux:ogg-parser:
can't get first chain Actually I was getting a much worse error before ;/ I can't remember it now. The installed version of GStreamer is 1.12.2 The file is: D:\temp\test2.wav Loading Setting to PLAYING. Running.
 XError: Internal data stream error. dbug: gstwavparse.c(2249): 
 gst_wavparse_loop (): /GstPipeline:audio-player/GstWavParse:wav-parser:
streaming stopped, reason not-linked (-1) Basically all I did was change the sink: sink = ElementFactory.make("autoaudiosink", "auto-output"); So it I could get past the error about alsa. I think the last name doesn't matter? I downloaded the gstreamer binaries from their site, had some issues with a few of the dll's complaining about gxx errors, I removed them(h264, soundtouch, tag). For the wav I changed //parser = ElementFactory.make("oggdemux", "ogg-parser"); //decoder = ElementFactory.make("vorbisdec", "vorbis-decoder"); parser = ElementFactory.make("wavparse", "wav-parser"); decoder = ElementFactory.make("audioconvert", "wav-decoder"); which, is all i could find on line, I don't know if it's right at all. Ultimately I want to be able to read somewhat arbitrary audio formats(most common at least), get the raw channel data(samples for each channel), play/pause/stop with good accuracy(no latency or low latency(<20ms), possibly do some pitch shifting and basic mixing(EQ, limiting, panning, etc), and eventually play some videos. Is GstreamerD going to be useful for this or so I look in to using ffmpeg directly and do some of the stuff(e.g., eq) myself? Thanks.
The Gstreamer demo should use an `playbin` instead of explicitly setting the pipeline, Like this: https://github.com/gtkd-developers/GtkD/blob/master/demos/gstreamer/helloworld/gstreamer_helloworld.d This way gstreamer will detect the file type, i don't know if it helps with the errors. -- Mike Wey
Aug 22 2017
parent reply Johnson <Johnson Johnson.com> writes:
On Tuesday, 22 August 2017 at 15:15:41 UTC, Mike Wey wrote:
 On 22-08-17 02:13, Johnson wrote:
 I can't get the example to work(although slightly modified).
 
 The installed version of GStreamer is 1.12.2
 The file is: D:\temp\test.ogg
 Loading
 Setting to PLAYING.
 Running.
 XError: Could not demultiplex stream. dbug: 
 gstoggdemux.c(4418): gst_ogg_demux_find_chains (): 
 /GstPipeline:audio-player/GstOggDemux:ogg-parser:
can't get first chain Actually I was getting a much worse error before ;/ I can't remember it now. The installed version of GStreamer is 1.12.2 The file is: D:\temp\test2.wav Loading Setting to PLAYING. Running.
 XError: Internal data stream error. dbug: 
 gstwavparse.c(2249): gst_wavparse_loop (): 
 /GstPipeline:audio-player/GstWavParse:wav-parser:
streaming stopped, reason not-linked (-1) Basically all I did was change the sink: sink = ElementFactory.make("autoaudiosink", "auto-output"); So it I could get past the error about alsa. I think the last name doesn't matter? I downloaded the gstreamer binaries from their site, had some issues with a few of the dll's complaining about gxx errors, I removed them(h264, soundtouch, tag). For the wav I changed //parser = ElementFactory.make("oggdemux", "ogg-parser"); //decoder = ElementFactory.make("vorbisdec", "vorbis-decoder"); parser = ElementFactory.make("wavparse", "wav-parser"); decoder = ElementFactory.make("audioconvert", "wav-decoder"); which, is all i could find on line, I don't know if it's right at all. Ultimately I want to be able to read somewhat arbitrary audio formats(most common at least), get the raw channel data(samples for each channel), play/pause/stop with good accuracy(no latency or low latency(<20ms), possibly do some pitch shifting and basic mixing(EQ, limiting, panning, etc), and eventually play some videos. Is GstreamerD going to be useful for this or so I look in to using ffmpeg directly and do some of the stuff(e.g., eq) myself? Thanks.
The Gstreamer demo should use an `playbin` instead of explicitly setting the pipeline, Like this: https://github.com/gtkd-developers/GtkD/blob/master/demos/gstreamer/helloworld/gstreamer_helloworld.d This way gstreamer will detect the file type, i don't know if it helps with the errors.
Thanks, that works! Could you address some of my concerns: 1. I need to be able to get the raw data, is this easily possible with gstreamer? 2. It's quite a big package 600mb+ total and about 150 for the bin and 150 for the lib. Eventually I want to support android, this seems quite excessive for it. I'm not familiar with Gstreamer though and maybe most of that space is "junk". It seems people use it already on android so I'm not too worried, I imagine it can be customized? 3. Does Gstreamer/D provide any type of EQ, pitch shifting, stretching, etc? 4. Do you have any idea why the original code would work? I ask because maybe in the future I'll need to use it for other purposes and don't wanna hit a brick wall. Note that I'm completely new to gstreamer and only learned of it through gtkD... so some of these might be basic questions. I'm just trying to find something simple to use but is robust so I don't waste time learning an api that isn't going to really do what I need. I was plan on using portaudio and ffmpeg, but ffmpegD doesn't really seem to work(old bindings I guess). I also had trouble with portaudio not playing any sound, but haven't spent much time with it to why. Gstreamer, with your updated example, works though. Just not sure how far of a leap I'll have to make to get it working the way I need in my app.
Aug 22 2017
parent Mike Wey <mike-wey example.com> writes:
On 22-08-17 21:28, Johnson wrote:
 
 Thanks, that works!
 
 Could you address some of my concerns:
 
 1. I need to be able to get the raw data, is this easily possible with 
 gstreamer?
 
 2. It's quite a big package 600mb+ total and about 150 for the bin and 
 150 for the lib. Eventually I want to support android, this seems quite 
 excessive for it. I'm not familiar with Gstreamer though and maybe most 
 of that space is "junk". It seems people use it already on android so 
 I'm not too worried, I imagine it can be customized?
 
 3. Does Gstreamer/D provide any type of EQ, pitch shifting, stretching, 
 etc?
 
 4. Do you have any idea why the original code would work? I ask because 
 maybe in the future I'll need to use it for other purposes and don't 
 wanna hit a brick wall.
 
 Note that I'm completely new to gstreamer and only learned of it through 
 gtkD... so some of these might be basic questions. I'm just trying to 
 find something simple to use but is robust so I don't waste time 
 learning an api that isn't going to really do what I need. I was plan on 
 using portaudio and ffmpeg, but ffmpegD doesn't really seem to work(old 
 bindings I guess). I also had trouble with portaudio not playing any 
 sound, but haven't spent much time with it to why.
 
 Gstreamer, with your updated example, works though. Just not sure how 
 far of a leap I'll have to make to get it working the way I need in my app.
 
I'm not all to familiar with GStreamer, i'll answer as best as i can. 1. Probably. 2. ~700MB of static libraries for android, i don't know how much of that would be linked into you executable, but personally i would find that a bit excessive space wise for an android app. 3. Maybe. 4. In the original demo the pipeline was set up manually, this gives you full control over the pipeline, but you do need to know what you are doing. It wont work when using the wrong Elements, source, or destination. -- Mike Wey
Aug 23 2017