GStreamer udpsrc 适用于 gst-launch 但不适用于应用程序 (OSX)

GStreamer udpsrc works with gst-launch but not in app (OSX)

我以这种方式使用 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

现在我尝试使用此管道在我的应用程序中重现客户端(我没有 post 代码,因为我在我的管道和元素周围制作了一个 Objective-C 包装器):

  1. udpsrc 大写:"application/x-rtp,media=video,payload=127,encoding-name=H264"

  2. rtph264depay

  3. 解码箱
  4. glimagesink(用于测试)或将图像转换为 CVPixelBufferRef 的自定义 appsink(拉模式)(已测试:它适用于 videotestsrc / uridecodebin 等)

它不起作用,即使管道的状态消息看起来相当 'normal'。我在控制台中有关于 SecTaskLoadEntitlements failed error=22 的消息,但在使用命令行时我也有。
我问自己 gst-launch 下我错过了什么。我在网上找不到任何关于基于 udpsrc 的管道的例子。

我的问题是:


编辑


这是我的管道图片。如您所见,GstDecodeBin 元素不会创建 src pad,因为它没有接收或处理任何东西(我在 udpsrc 元素上将 'timeout' 属性 设置为 10 秒,这是抛出的) . 会不会是 OSX 沙盒问题?

现在我的管道看起来像这样:

  1. udpsrc
  2. 队列
  3. h264 延迟
  4. 解码bin
  5. 视频转换器
  6. 大写过滤器
  7. appsink / glimagesink

使用 this 问题中的方法进行测试,该应用确实在该端口上收到了一些东西。

找到它没有收到任何东西的原因:GstUdpSrc 元素必须在 GST_STATE_NULL 中才能分配一个端口来监听, 否则它将静默监听默认端口 (5004)。

现在一切正常。

将环境变量 GST_DEBUG 设置为 udpsrc:5 很有帮助,仅供参考。