[gst-devel] multichannel vorbis

Dirk Griffioen dirk.griffioen at barcelonamedia.org
Mon Sep 21 12:03:51 CEST 2009


Hi Tristan,

Thanks for the replies. They are really helpfull! (And I will have a 
further look at 'miville' - it looks really nice).
> This example might help:
> sender
>
> gst-launch -v jackaudiosrc connect=none ! audio/x-raw-float, channels=10 
> ! vorbisenc ! rtpvorbispay ! udpsink port=10000
>
> receiver
>
> gst-launch -v udpsrc caps="$CAPS" port=10000 ! rtpvorbisdepay ! 
> vorbisdec ! queue max-size-buffers=3 ! jackaudiosink connect=none
>
> where $CAPS are the caps of the udpsink from the first pipeline.
>
>   
This does not work for me, jackaudiosink does not pop up in qjackctl ... 
I tried some other configurations, but nothing.

However, somehow my first pipeline with rtp decided to work, with 24 
channels and from gst-launch. Still, I get:

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

Maybe this can interpreted as 'cannot read layout from stream, 
defaulting to NONE' - as the audio streams fine.
> -Tristan
>
> Tristan Matthews wrote:
>   
>> 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
>>>   
>>>     
>>>       
>>   
>>     
>
>
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20090921/2f87a480/attachment.htm>


More information about the gstreamer-devel mailing list