我使用gst-launch成功通过GStreamer流式传输了我的摄像头图像:
服务器
./gst-launch-1.0 -v -m autovideosrc ! video/x-raw,format=BGRA ! videoconvert ! queue ! x264enc pass=qual quantizer=20 tune=zerolatency ! rtph264pay ! udpsink host=XXX.XXX.XXX.XXX port=7480
客户
./gst-launch-1.0 udpsrc port=7480 ! "application/x-rtp, payload=127" ! rtph264depay ! decodebin ! glimagesink
现在,我尝试使用此管道在应用程序中重现客户端(我不发布代码,因为我在管道和元素周围进行了Objective-C包装):
带大写字母的
"application/x-rtp,media=video,payload=127,encoding-name=H264"
即使管道的状态消息看起来很“正常”,它也无法工作。控制台中有关于
SecTaskLoadEntitlements failed error=22
的消息,但是在使用命令行时也有这些消息。我在问自己,我在GST发射中缺少什么。我在基于udpsrc的管道上找不到任何示例。
我的问题是:
编辑
这是我的管道的图像。如您所见,GstDecodeBin元素不会创建src填充,因为它没有接收或处理任何东西(我将udpsrc元素的'timeout'属性设置为10秒,这会抛出)。 可能是OSX沙箱问题吗?
现在我的管道如下所示:
经过this问题中的方法测试,该应用实际上确实在该端口上收到了一些东西。
最佳答案
找到为什么它什么都没收到: GstUdpSrc元素必须位于 GST_STATE_NULL
中,才能为其分配端口以侦听,否则它将无声地侦听默认端口(5004)。
现在一切正常。
将环境变量GST_DEBUG设置为udpsrc:5有助于获得更多信息。