Thread overview
GStreamer issues.
Aug 22, 2017
Johnson
Aug 22, 2017
Mike Wey
Aug 22, 2017
Johnson
Aug 23, 2017
Mike Wey
August 22, 2017
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.
August 22, 2017
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
August 22, 2017
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.



August 23, 2017
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