decklinkaudiosrc pitches an error when extracting 8 channels of audio

bishop-00median at icloud.com bishop-00median at icloud.com
Tue Mar 29 19:24:04 UTC 2022


Here is a pipeline that eliminates the ‘decklinkaudiosrc’. The following pipeline fails as well. 

gst-launch-1.0 -v webrtcbin name=sendonly bundle-policy=3  stun-server=stun://stun.l.google.com:19302  videotestsrc pattern=snow  ! 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. audiotestsrc wave=7 freq=200 is-live=true ! audio/x-raw,channels=8  ! queue ! opusenc ! rtpopuspay pt=111 ssrc=1 ! queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload=111 ! sendonly.

If change audiotestsrc caps to channels = 2, then it works. This is the same behavior as the ‘decklinkaudiosrc’. Am I wring to think the error is in the caps?

Patrick


> On Mar 28, 2022, at 3:39 PM, Patrick Cusack <patrickcusack at mac.com> wrote:
> 
> 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