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