我一直在试图找出GStreamer为“仅音频”几天现在,但1.0和0.10之间的不同指令,并且大多数说明都是关于视频,我很难理解它是如何实现的通过网络(相同的子网范围)融合在一起并通话。大多数例子似乎也想将音频发送到目的地,而不是等待某些东西连接到它,我不认为这是我需要的。GStreamer音频操作方法?
基本上,我使用BlueIris相机录制系统与IP摄像机进行对话。不幸的是,我的相机没有麦克风,所以我想用一个带有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' ..如果您有任何进展,请写信给我评论 – nayana
非常感谢@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'进行监听,并且它可以工作! –
完美的,你可以添加你自己的答案,并接受它为正确的 - 它会帮助别人,很高兴听到你解决它后,所有的斗争:) – nayana