[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® 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-12, 2009. Register now!
>>>> 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® 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-12, 2009. Register now!
>> 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