0
votes

sender pipeline

pulsesrc name=audio_cap mute=0 ! queue ! audiorate ! queue ! audioconvert ! audioresample name=aud_resample ! audio/x-raw,rate=48000 ! queue silent=true max-size-buffers=100 flush-on-eos=true ! opusenc ! queue ! appsink sync=false async=false

Rx pipeline

appsrc caps="audio/x-opus" ! audio/x-opus,channel-mapping-family=0 ! queue ! opusdec ! audioconvert ! audioresample ! audio/x-raw,format=S16LE,rate=44100,channels=2 ! audiorate ! autoaudiosink

But if add oggmux and oggdemux it will start playing

Rx working pipeline

appsrc caps="audio/x-opus" ! audio/x-opus,channel-mapping-family=0 ! queue ! opusparse ! oggmux ! queue ! oggdemux ! opusdec ! audioconvert ! audioresample ! audio/x-raw,format=S16LE,rate=44100,channels=2 ! audiorate ! autoaudiosink

1
you havent stated what exactly happens for the first "Rx pipeline" .. does it fail on not-negotiated, or any other Gst error? fyi you probably dont need audiorate.. audioresample is dealing with sample rate resampling, audiorate is for "smoothing" the samplerate based on timestamps, also you probably do not need the last capsfilter if you dont use some exotic audiosinknayana
It doesn't fail neither gives Gstreamer error. On Windows and mac Pipeline is working. On Linux its not able play audioVirupaksha H
I'm using two different versions of Gstreamer. At sender 1.10.4 @Rx 1.14.4Virupaksha H
I am not able to help you with no information.. get some logs, check if the pipeline stalls or something else, check if at least local GStreamer playback works with similar pipeline, try playing some opus file with maintaining the S16LE capsnayana
In your working pipeline you also have opusparse. This can be the element which makes it work and not oggmux, oggdemux. This can simply mean that you need oggparse in your pipeline.Jos van Egmond

1 Answers

1
votes

This is by design. An Opus decoder needs to be fed full opus packets.

Unfortunately, if you just turn your RAW packets that come out of the encoder into a stream of bytes, there is no way to get back to the original packet boundaries.

So you need a container like ogg or mpegts so that the original packet can be recreated.

See also https://tools.ietf.org/html/rfc6716 section 3