【发布时间】:2016-07-10 11:28:11
【问题描述】:
几天来,我一直在尝试将 GStreamer 用于“仅音频”,但在 1.0 和 0.10 之间有不同的指令,而且大多数指令都与视频有关,我很难理解它是如何实现的全部组合在一起并通过网络(相同的子网范围)进行通信。大多数示例似乎还想将音频发送到目的地,而不是等待连接到它,我认为这不是我需要的。
基本上,我使用的是与 IP 摄像机对话的 BlueIris 摄像机录制系统。不幸的是,我的相机没有麦克风,所以我想使用带有 USB 麦克风的备用 RaspberryPI 来提供音频,BlueIris 将连接到它以获取音频。显然我可以使用 rtsp 或其他流媒体源指定备用音频源。
摄像头运行良好,因此 gstreamer 将只是我的音频源。
到目前为止我的进展:
我已经弄清楚如何使用以下方法将音频从 USB 麦克风播放到扬声器:
gst-launch-1.0 alsasrc device=hw:1 ! audioconvert ! autoaudiosink
这很好用。
然后我尝试设置一个 TCP Sever 会话来等待连接到它:
gst-launch-1.0 alsasrc device=hw:1 ! audioconvert ! audioresample ! speexenc ! rtpspeexpay ! tcpserversink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstAudioSrcClock
Redistribute latency...
Redistribute latency...
(服务器似乎启动没有问题。)
然后让客户端连接:
gst-launch-1.0 tcpclientsrc ! speexdec ! autoaudiosink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstTCPClientSrc:tcpclientsrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2948): gst_base_src_loop (): /GstPipeline:pipeline0/GstTCPClientSrc:tcpclientsrc0:
streaming task paused, reason error (-5)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
...这是一个很大的 NOPE!
所以我希望进行测试,我可以转到我的 Windows 机器并启动 VLC 并尝试使用 rtsp://192.168.0.123 之类的东西连接到 Raspberry PI,但这就是一切变得模糊的地方,尤其是当我什至无法让 gstreamer 在同一个盒子上连接到自身时。
有人可以帮忙吗?
【问题讨论】:
-
+1 很高兴看到有人在提出问题之前真正尝试过 :) 现在.. 不要担心你已经非常接近你的解决方案了.. 首先要给你一些知识:使用
GST_DEBUG=4 gst-launch-1.0 ...来调试正在发生的事情..现在您使用 rtp 对流进行了有效负载,因此在接收器上您需要使用 rtp 元素解除负载.. 它在服务器和客户端上始终是对称的(当然在客户端上它的方向与服务器上的方向相反),尝试在 speexdec 之前添加rtpspeexdepay。如果您有一些进展,请给我留言 -
非常感谢@otopolsky 的回复。从那以后我一直在尝试很多事情(以及一些 RPI 问题),我终于找到了一些可行的方法。这是我的最后一个命令行:
gst-launch-1.0 alsasrc device=hw:1,0 ! mulawenc ! rtppcmupay ! udpsink host=224.1.1.1 auto-multicast=true port=5000如您所见,我选择了多播方法。无论如何,我在一个小型专用网络上。这样我就可以让我的相机录制应用程序录制音频,我什至可以在我的 Windows PC 上加载 VLC 并通过转到rtp://224.1.1.1:5000直接收听,它可以工作! -
完美,您可以添加自己的答案并接受它作为正确的答案 - 它会帮助其他人,很高兴听到您经过所有努力解决了它:)
标签: raspberry-pi gstreamer audio-streaming