[gst-devel] multichannel vorbis

Tristan Matthews tristan at sat.qc.ca
Fri Sep 18 19:29:27 CEST 2009


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.

-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
>>   
>>     
>
>
>   


-- 
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