[gst-devel] multichannel vorbis

Tristan Matthews tristan at sat.qc.ca
Mon Sep 21 14:54:13 CEST 2009


Are you copying the caps from udpsink's sink pad directly from the 
sender pipeline? Vorbis caps (i.e. the codebook) will change for 
different configurations.

-T

Dirk Griffioen wrote:
> 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
>>>>   
>>>>     
>>>>       
>>>   
>>>     
>>
>>
>>   
>
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> 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