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

Ben*_*hoz 3 macos streaming udp gstreamer h.264

我使用 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
Run Code Online (Sandbox Code Playgroud)

客户

./gst-launch-1.0 udpsrc port=7480 ! "application/x-rtp, payload=127" ! rtph264depay ! decodebin ! glimagesink
Run Code Online (Sandbox Code Playgroud)

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

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

  2. rtph264depay

  3. 解码器
  4. glimagesink(用于测试)或将图像转换为 CVPixelBufferRef 的自定义应用程序接收器(在拉模式下)(已测试:它适用于 videotestsrc / uridecodebin / 等)

它不起作用,即使管道的状态消息看起来很“正常”。我在控制台中有有关消息,SecTaskLoadEntitlements failed error=22但在使用命令行时也有消息。
我在问自己 gst-launch 下我缺少什么。我在基于 udpsrc 的管道的网络上找不到任何示例。

我的问题是:

  • 有没有人知道我们启动 gst-launch 时实际发生了什么,或者知道实际发生了什么?
  • 是否有一些使用 udpsrc 的代码中工作管道的示例?

编辑


这是我的管道的图像。如您所见,GstDecodeBin 元素不会创建 src pad,因为它没有接收或处理任何内容(我将 udpsrc 元素上的“超时”属性设置为 10 秒,即抛出)。这可能是 OSX 沙盒问题吗?

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

  1. udpsrc
  2. 队列
  3. h264支付
  4. 解码仓
  5. 视频转换器
  6. 帽过滤器
  7. 应用程序/ glimagesink

管道

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

Ben*_*hoz 5

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

现在一切正常。

将环境变量 GST_DEBUG 设置为 udpsrc:5 有很大帮助,以获取信息。