[gst-devel] multichannel vorbis

Tristan Matthews tristan at sat.qc.ca
Fri Sep 18 19:20:02 CEST 2009


As far as I know this should be fine in python, though I haven't tried 
it. Our app (https://svn.sat.qc.ca/trac/miville) does this for up to 8 
channels of vorbis or raw audio (with rtpL16pay/depay) and gstrtpbin. We 
haven't tried (yet) to implement support for more than 8 channels. Here 
we don't set the channel positions and it works, but I do get that same 
"warning could not decode stream" even though the sound if fine.
The element to set the number of channels is a caps filter element, so 
the equivalent in C would be:

GstElement *capsfilter;
gst_element_factory_make(capsfilter, NULL);
g_object_set(capsfilter, "caps", "audio/x-raw-float, channels=8", NULL);

and then link it in between jackaudiosrc and vorbisenc.

-Tristan

Dirk Griffioen wrote:
> Hi Tristan,
>> You probably have to set the "channel-positions" property on the 
>> interleave element, which you can't do with gst-launch as I recall (i.e. 
>> you need to write c or python app for it) as it is an array. However for 
>> more than 8 channels the positions might have to all be set to  
>> GST_AUDIO_CHANNEL_POSITION_NONE
>>
>>   
> Yes I read about that 
> (http://tristanswork.blogspot.com/2008/08/multichannel-audio-with-gstreamer.html), 
> and can I do this in python as well? (I dont mind C, but python will 
> be quicker).
>
>> Are you just trying to do something like this?
>>
>> gst-launch -v jackaudiosrc connect=none ! audio/x-raw-float, channels=24 
>> ! vorbisenc ! vorbisdec ! jackaudiosink connect=none
>>
>>   
> Well, almost :)
>
> I am trying to put rtp in between the vorbisencoder and decoder so I 
> can stream n channels from A to B over a single rtp session
>
> I get the following on the receiving end (after copying the new config 
> string from A to B):
>
> GstPipeline:pipeline0/GstVorbisDec:vorbisdec0.GstPad:sink: caps = 
> audio/x-vorbis
> WARNING: from element /GstPipeline:pipeline0/GstVorbisDec:vorbisdec0: 
> Could not decode stream.
> Additional debug info:
> vorbisdec.c(670): vorbis_handle_identification_packet (): 
> /GstPipeline:pipeline0/GstVorbisDec:vorbisdec0:
> Using NONE channel layout for more than 8 channels
>
> Which is weird because it knows this:
>
> /GstPipeline:pipeline0/GstVorbisDec:vorbisdec0.GstPad:src: caps = 
> audio/x-raw-float, rate=(int)48000, channels=(int)24, 
> endianness=(int)1234, width=(int)32, 
> channel-positions=(GstAudioChannelPosition)< 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE, 
> GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE >
>
> Do you have any tips? (Maybe the NONE layout is not in the vorbis 
> config string ...)
>
> Regards, Dirk
>
> PS - how do you call the 'audio/x-raw-float, channels=24' element?
>
>> (note that the bottleneck here will probably be your soundcard).
>>
>> -Tristan
>>
>> Dirk Griffioen wrote:
>>   
>>> Thanks for the answer!
>>>   
>>>     
>>>> I think you need to interleave several mono channels from audiotestsrc
>>>> into a stereo stream and then shove them into the vorbis encoder. You
>>>> need an audio mixer, or something like that.
>>>>   
>>>>     
>>>>       
>>> I would like to encode separate channels.
>>>
>>> For example, this runs
>>>
>>> gst-launch-0.10 -v interleave name=i ! queue ! \
>>> vorbisenc ! vorbisdec ! \
>>> jackaudiosink connect=none \
>>> jackaudiosrc ! audioconvert ! queue ! i. \
>>> jackaudiosrc ! audioconvert ! queue ! i.
>>>
>>> but this does not:
>>>
>>> gst-launch-0.10 -v interleave name=i ! queue ! \
>>> vorbisenc ! vorbisdec ! \
>>> jackaudiosink connect=none \
>>> jackaudiosrc ! audioconvert ! queue ! i. \
>>> jackaudiosrc ! audioconvert ! queue ! i. \
>>> jackaudiosrc ! audioconvert ! queue ! i. \
>>> jackaudiosrc ! audioconvert ! queue ! i.
>>>
>>> Do you know why? The vorbis spec allows for 255 channels and I simply 
>>> would like to run n channels through the vorbis encoder ...
>>>
>>> I really could use some help.
>>>
>>> Thanks in advance, Dirk
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Come build with us! The BlackBerry&reg; Developer Conference in SF, CA
>>> is the only developer event you need to attend this year. Jumpstart your
>>> developing skills, take BlackBerry mobile applications to market and stay 
>>> ahead of the curve. Join us from November 9&#45;12, 2009. Register now&#33;
>>> http://p.sf.net/sfu/devconf
>>> _______________________________________________
>>> gstreamer-devel mailing list
>>> gstreamer-devel at lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>
>>>   
>>>     
>>
>>
>>   
>
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Come build with us! The BlackBerry&reg; Developer Conference in SF, CA
> is the only developer event you need to attend this year. Jumpstart your
> developing skills, take BlackBerry mobile applications to market and stay 
> ahead of the curve. Join us from November 9&#45;12, 2009. Register now&#33;
> http://p.sf.net/sfu/devconf
> ------------------------------------------------------------------------
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>   


-- 
Tristan Matthews
Société des arts technologiques [SAT]
email: tristan at sat.qc.ca
web: http://www.music.mcgill.ca/~tmatthews





More information about the gstreamer-devel mailing list