在 GStreamer 中通过 RTSP 发送 L16 音频

问题描述 投票:0回答:1

我正在尝试通过 RTSP 发送 L16 格式的原始音频。我分别为服务器和客户端使用以下管道。我最终也计划将视频添加到这些管道中。

服务器:

./test-launch.out "filesrc location=L16.raw ! audioconvert ! audio/x-raw,format=S16BE,channels=2,rate=44100 ! rtpL16pay pt=96 name=pay0"

客户:

gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/test latency=150 ! queue ! rtpL16depay ! autoaudiosink

当我尝试使用这些管道时遇到以下错误。

错误:来自元素 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0:未处理的错误
附加调试信息:
../gst/rtsp/gstrtspsrc.c(6795): gst_rtspsrc_send (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: 服务不可用 (503)
错误:管道不想预卷。
将管道设置为 NULL ...
释放管道...

这里有一个非常奇怪的地方:如果我将服务器更改为使用audiotestsrc而不是filesrc,如下所示,一切正常。

服务器:

./test-launch.out "audiotestsrc ! audioconvert ! audio/x-raw,format=S16BE,channels=2,rate=44100 ! rtpL16pay pt=96 name=pay0"

客户:
不变

我最初认为这可能是由于我正在读取的文件以某种方式损坏,但我已经验证事实并非如此。为什么从文件读取会破坏一切?

我真的很感激任何帮助。我是 GStreamer 的新手,不知道如何开始解决这个问题。任何帮助将不胜感激!

gstreamer audio-streaming rtsp
1个回答
0
投票

感谢 Florian Zwoch 富有洞察力的评论,我似乎已经找到了答案。我在服务器和客户端上缺少一个

rawaudioparse
元素。我更新的管道如下:

服务器

./test-launch.out "filesrc location=L16.raw ! rawaudioparse use-sink-caps=false format=pcm pcm-format=s16be sample-rate=44100 num-channels=2 ! audioconvert ! rtpL16pay pt=96 name=pay0"

客户

gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/test latency=150 ! queue ! rtpL16depay ! rawaudioparse use-sink-caps=false format=pcm pcm-format=s16be sample-rate=44100 num-channels=2 ! audioconvert ! audioresample ! autoaudiosink 

说实话,我不确定为什么 filesrc 需要这个,而 audiotestsrc 不需要,但它有效,所以我将停止质疑它。

© www.soinside.com 2019 - 2024. All rights reserved.