decklinkaudiosrc pitches an error when extracting 8 channels of audio

bishop-00median at icloud.com bishop-00median at icloud.com
Mon Mar 28 22:39:46 UTC 2022


Thanks. decklinaudiosrc only accepts 2,8 our zero channels. No matter, I looked at the audiomixmatrix and I think that will work.

As I understand 1.16 doesn’t support multiopus which was added on 1.20. I built 1.20 on Ubuntu 20.04 (as I didn’t see any repos) using Cerbero.

Here is my is pipeline with the following error:

gst-launch-1.0 -v webrtcbin name=sendonly bundle-policy=3 \
	stun-server=stun://stun.l.google.com:19302  \
	decklinkvideosrc device-number=0 mode=1080p2398 connection=sdi \
	! videoconvert \
	! vp9enc target-bitrate=4000000 keyframe-max-dist=24 deadline=1 end-usage=1 cpu-used=8 lag-in-frames=0 \
	! rtpvp9pay pt=100 ssrc=2 \
	! queue \
	! application/x-rtp,media=video,encoding-name=VP9,payload=100 \
	! sendonly. \
	decklinkaudiosrc device-number=0 connection=embedded channels=8 \
	! audioconvert \
	! audiomixmatrix in-channels=8 out-channels=6 channel-mask=-1 matrix="<<1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0>, <0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0>, <0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0>, <0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0>, <0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0>, <0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0>>"  \
	! audio/x-raw,channels=6  \
	! audioresample \
	! queue \
	! opusenc \
	! rtpopuspay pt=111 ssrc=1 \
	! queue \
	! application/x-rtp,media=audio,encoding-name=OPUS,payload=111 \
	! sendonly.

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
/GstPipeline:pipeline0/GstDecklinkVideoSrc:decklinkvideosrc0: hw-serial-number = 
/GstPipeline:pipeline0/GstDecklinkAudioSrc:decklinkaudiosrc0: hw-serial-number = 
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstDecklinkAudioSrc:decklinkaudiosrc0.GstPad:src: caps = audio/x-raw, format=(string)S32LE, layout=(string)interleaved, rate=(int)48000, channels=(int)8, channel-mask=(bitmask)0x0000000000000000
/GstPipeline:pipeline0/GstDecklinkVideoSrc:decklinkvideosrc0: signal = true
/GstPipeline:pipeline0/GstDecklinkVideoSrc:decklinkvideosrc0.GstPad:src: caps = video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps = video/x-raw, width=(int)1920, height=(int)1080, framerate=(fraction)24000/1001, pixel-aspect-ratio=(fraction)1/1, format=(string)Y444, interlace-mode=(string)progressive, colorimetry=(string)bt709
ERROR: from element /GstPipeline:pipeline0/GstDecklinkAudioSrc:decklinkaudiosrc0: Internal data stream error.
Additional debug info:
../subprojects/gstreamer/libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPipeline:pipeline0/GstDecklinkAudioSrc:decklinkaudiosrc0:
streaming stopped, reason not-negotiated (-4)
Execution ended after 0:00:00.093813522
Setting pipeline to NULL ...
Freeing pipeline ...


Now I know that the deckling works as I can pass and record audio to a file.
decklinkaudiosrc channels=8 ! audioconvert ! wavenc ! filesink location=recording.wav

The original test example you sent me does work.
gst-launch-1.0 -v audiotestsrc ! audio/x-raw,channels=8 ! opusenc ! rtpopuspay ! fakesink

But when I do something similar in my script, I get an error.

gst-launch-1.0 webrtcbin name=sendonly bundle-policy=3  stun-server=stun://stun.l.google.com:19302 decklinkvideosrc device-number=0 mode=1080p2398 connection=sdi ! videoconvert ! vp9enc target-bitrate=4000000 keyframe-max-dist=24 deadline=1 end-usage=1 cpu-used=8 lag-in-frames=0 ! rtpvp9pay pt=100 ssrc=2 ! queue ! application/x-rtp,media=video,encoding-name=VP9,payload=100 ! sendonly. decklinkaudiosrc channels=8 ! opusenc ! rtpopuspay ! fakesink

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
ERROR: from element /GstPipeline:pipeline0/GstDecklinkAudioSrc:decklinkaudiosrc0: Internal data stream error.
Additional debug info:
../subprojects/gstreamer/libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPipeline:pipeline0/GstDecklinkAudioSrc:decklinkaudiosrc0:
streaming stopped, reason not-negotiated (-4)
Execution ended after 0:00:00.072949718
Setting pipeline to NULL ...
Freeing pipeline ...


What was the source your team used for testing multiopus?  

Thanks,

Patrick

> On Mar 27, 2022, at 9:13 AM, Nirbheek Chauhan via gstreamer-devel <gstreamer-devel_at_lists_freedesktop_org_59mnm7srbr1196_2a6d20b7 at icloud.com> wrote:
> 
> On Sat, Mar 26, 2022 at 5:23 AM Patrick Cusack <patrickcusack at mac.com> wrote:
>> That failed as well. I am using 1.16.2 (which I understand is not compatible with multiopus). I am going to build a Fedora or Debian image and try that using 1.20. Once I get the 8 channels working, is there a way to specify just 6 of the 8 channels into the opusenc? Would that be audio/x-raw,channels=6 ?
>> 
> 
> If you want to capture 6 channels, you should configure
> decklinkaudiosrc to output 6 channels.
> 
> If you want to convert 8 channels to 6 channels, you can use elements
> like audioconvert or audiomixmatri to do that.
> 
> Cheers,
> Nirbheek



More information about the gstreamer-devel mailing list