首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gstreamer多通道大于8通道

gstreamer多通道大于8通道
EN

Stack Overflow用户
提问于 2020-05-11 19:10:46
回答 2查看 768关注 0票数 0

下午好,到目前为止,我一直在使用gstreamer来流式传输8声道的音频,没有任何问题。我在audacity中生成了8个单声道,并导出了一个wav文件。

我最近被要求支持16个频道,我惊讶地发现16个频道(或8个以上的任何频道)不被支持。用于流式传输wav文件的命令行gstreamer命令如下所示:

代码语言:javascript
复制
GST_DEBUG=3 gst-launch-1.0 filesrc location=~/Desktop/8ch_16_test_diagwav.wav ! decodebin ! audioconvert ! audioresample ! audioconvert ! audio/x-raw,format=S16BE,rate=48000,channels=16 ! filesink location=/tmp/filesink0

当使用16通道文件运行时,我得到以下错误:

代码语言:javascript
复制
Setting pipeline to PAUSED ...
0:00:00.041995106  3534 0x55b0024a4e10 WARN                 basesrc gstbasesrc.c:3583:gst_base_src_start_complete:<filesrc0> pad not activated yet
Pipeline is PREROLLING ...
0:00:00.046842761  3534 0x7f833806ec00 FIXME                default gstutils.c:3981:gst_pad_create_stream_id_internal:<wavparse0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:00.091236225  3534 0x7f833806ec00 WARN         audio-resampler audio-resampler.c:274:convert_taps_gint16_c: can't find exact taps
0:00:00.091319797  3534 0x7f833806ec00 WARN            audioconvert gstaudioconvert.c:654:gst_audio_convert_fixate_channels:<audioconvert1> invalid or unexpected channel-positions
0:00:00.091329274  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:668:gst_audio_convert_fixate_channels:<audioconvert1> Have no default layout for 16 channels
0:00:00.091339971  3534 0x7f833806ec00 ERROR             audio-info audio-info.c:304:gst_audio_info_from_caps: no channel-mask property given
0:00:00.091344101  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:778:gst_audio_convert_set_caps:<audioconvert1> invalid output caps
0:00:00.091356433  3534 0x7f833806ec00 WARN           basetransform gstbasetransform.c:1362:gst_base_transform_setcaps:<audioconvert1> FAILED to configure incaps audio/x-raw, format=(string)S16LE, layout=(string)interleaved, channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f, rate=(int)48000 and outcaps audio/x-raw, layout=(string)interleaved, rate=(int)48000, format=(string)S16BE, channels=(int)16
0:00:00.091398546  3534 0x7f833806ec00 WARN            audioconvert gstaudioconvert.c:654:gst_audio_convert_fixate_channels:<audioconvert1> invalid or unexpected channel-positions
0:00:00.091404430  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:668:gst_audio_convert_fixate_channels:<audioconvert1> Have no default layout for 16 channels
0:00:00.091411526  3534 0x7f833806ec00 ERROR             audio-info audio-info.c:304:gst_audio_info_from_caps: no channel-mask property given
0:00:00.091415084  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:778:gst_audio_convert_set_caps:<audioconvert1> invalid output caps
0:00:00.091423006  3534 0x7f833806ec00 WARN           basetransform gstbasetransform.c:1362:gst_base_transform_setcaps:<audioconvert1> FAILED to configure incaps audio/x-raw, format=(string)S16LE, layout=(string)interleaved, channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f, rate=(int)48000 and outcaps audio/x-raw, layout=(string)interleaved, rate=(int)48000, format=(string)S16BE, channels=(int)16
0:00:00.091461862  3534 0x7f833806ec00 WARN            audioconvert gstaudioconvert.c:654:gst_audio_convert_fixate_channels:<audioconvert1> invalid or unexpected channel-positions
0:00:00.091467389  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:668:gst_audio_convert_fixate_channels:<audioconvert1> Have no default layout for 16 channels
0:00:00.091473940  3534 0x7f833806ec00 ERROR             audio-info audio-info.c:304:gst_audio_info_from_caps: no channel-mask property given
0:00:00.091477330  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:778:gst_audio_convert_set_caps:<audioconvert1> invalid output caps
0:00:00.091484711  3534 0x7f833806ec00 WARN           basetransform gstbasetransform.c:1362:gst_base_transform_setcaps:<audioconvert1> FAILED to configure incaps audio/x-raw, format=(string)S16LE, layout=(string)interleaved, channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f, rate=(int)48000 and outcaps audio/x-raw, layout=(string)interleaved, rate=(int)48000, format=(string)S16BE, channels=(int)16
0:00:00.091521324  3534 0x7f833806ec00 WARN            audioconvert gstaudioconvert.c:654:gst_audio_convert_fixate_channels:<audioconvert1> invalid or unexpected channel-positions
0:00:00.091526722  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:668:gst_audio_convert_fixate_channels:<audioconvert1> Have no default layout for 16 channels
0:00:00.091533191  3534 0x7f833806ec00 ERROR             audio-info audio-info.c:304:gst_audio_info_from_caps: no channel-mask property given
0:00:00.091536562  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:778:gst_audio_convert_set_caps:<audioconvert1> invalid output caps
0:00:00.091543448  3534 0x7f833806ec00 WARN           basetransform gstbasetransform.c:1362:gst_base_transform_setcaps:<audioconvert1> FAILED to configure incaps audio/x-raw, format=(string)S16LE, layout=(string)interleaved, channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f, rate=(int)48000 and outcaps audio/x-raw, layout=(string)interleaved, rate=(int)48000, format=(string)S16BE, channels=(int)16
0:00:00.091554349  3534 0x7f833806ec00 WARN                wavparse gstwavparse.c:2293:gst_wavparse_loop:<wavparse0> error: Internal data stream error.
0:00:00.091558663  3534 0x7f833806ec00 WARN                wavparse gstwavparse.c:2293:gst_wavparse_loop:<wavparse0> error: streaming stopped, reason not-negotiated (-4)
ERROR: from element /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstWavParse:wavparse0: Internal data stream error.
Additional debug info:
gstwavparse.c(2293): gst_wavparse_loop (): /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstWavParse:wavparse0:
streaming stopped, reason not-negotiated (-4)
0:00:00.091614021  3534 0x7f833806ec00 WARN            audioconvert gstaudioconvert.c:654:gst_audio_convert_fixate_channels:<audioconvert1> invalid or unexpected channel-positions
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
0:00:00.091619464  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:668:gst_audio_convert_fixate_channels:<audioconvert1> Have no default layout for 16 channels
0:00:00.091662384  3534 0x7f833806ec00 ERROR             audio-info audio-info.c:304:gst_audio_info_from_caps: no channel-mask property given
0:00:00.091681343  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:778:gst_audio_convert_set_caps:<audioconvert1> invalid output caps
0:00:00.091701845  3534 0x7f833806ec00 WARN           basetransform gstbasetransform.c:1362:gst_base_transform_setcaps:<audioconvert1> FAILED to configure incaps audio/x-raw, format=(string)S16LE, layout=(string)interleaved, channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f, rate=(int)48000 and outcaps audio/x-raw, layout=(string)interleaved, rate=(int)48000, format=(string)S16BE, channels=(int)16
0:00:00.091767321  3534 0x7f833806ec00 WARN            audioconvert gstaudioconvert.c:654:gst_audio_convert_fixate_channels:<audioconvert1> invalid or unexpected channel-positions
0:00:00.091773142  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:668:gst_audio_convert_fixate_channels:<audioconvert1> Have no default layout for 16 channels
0:00:00.091779617  3534 0x7f833806ec00 ERROR             audio-info audio-info.c:304:gst_audio_info_from_caps: no channel-mask property given
0:00:00.091797568  3534 0x7f833806ec00 ERROR           audioconvert gstaudioconvert.c:778:gst_audio_convert_set_caps:<audioconvert1> invalid output caps
0:00:00.091805352  3534 0x7f833806ec00 WARN           basetransform gstbasetransform.c:1362:gst_base_transform_setcaps:<audioconvert1> FAILED to configure incaps audio/x-raw, format=(string)S16LE, layout=(string)interleaved, channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f, rate=(int)48000 and outcaps audio/x-raw, layout=(string)interleaved, rate=(int)48000, format=(string)S16BE, channels=(int)16
Freeing pipeline ...

当将8channel文件和channel =8与从同一audacity项目生成的wav文件一起使用时,一切正常。

目前,使用

代码语言:javascript
复制
linux
gst-launch-1.0 version 1.14.4
GStreamer 1.14.4

是不是根本不可能在命令行中使用gstreamer流式传输一个16通道的wav文件?我试着查看各种标志,如交错,通道位置等,但没有足够的经验,不知道可能需要什么。

任何帮助或链接都将受到欢迎。

EN

回答 2

Stack Overflow用户

发布于 2020-05-12 04:23:22

也许在Audacity方面出了什么问题?

下面的代码为我创建了一个16通道.wav文件:

代码语言:javascript
复制
gst-launch-1.0 audiotestsrc is-live=true ! \
  audio/x-raw,format=S16BE,rate=48000,channels=16 ! \
  audioresample ! audioconvert ! wavenc ! filesink location=x.wav

ffprobe:

代码语言:javascript
复制
Input #0, wav, from 'x.wav':
  Duration: 00:23:18.06, bitrate: 24 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 16 channels, s16, 12288 kb/s

该文件也可以在gst-play-1.0 x.wav上正常播放。这些都在GStreamer 1.16.2上。

票数 0
EN

Stack Overflow用户

发布于 2020-05-13 15:54:31

经过相当多的搜索和实验,我终于找到了一个可行的解决方案。

代码语言:javascript
复制
gst-launch-1.0 filesrc location=16ch_16bit_10s.wav ! decodebin ! capssetter caps="audio/x-raw,channels=16,rate=48000,channel-mask=(bitmask)0xffff" ! audioconvert ! audioresample ! "audio/x-raw,rate=48000,format=S16BE" ! queue ! capssetter caps="audio/x-raw,channels=16,rate=48000,channel-mask=(bitmask)0xffff" ! audioconvert ! audioresample ! filesink location=audiosink

其中位掩码值=(2^通道)-1,采用十六进制字符串格式。

这主要是通过跟踪和错误发现的,使用以下内容作为参考:interleaving 4 channels of audio into vorbisenc or opusenc in gstreamer

不幸的是,我没有足够的经验(或足够聪明)来完全理解为什么这样做是可行的。capsetter实际上是做什么的,为什么上游和下游之间需要一个"audio/x-raw,rate=48000,format=S16BE",这是任何人都不知道的。如果有人能编辑/评论一个更好的解释可能会更好?

有了这个解决方案,我可以在16-24位和1,2,4,8,16通道之间切换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61728296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档