我使用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包装):

带大写字母的
  • udpsrc:"application/x-rtp,media=video,payload=127,encoding-name=H264"
  • rtph264depay
  • 解码bin
  • glimagesink(用于测试)或将图像转换为CVPixelBufferRef的自定义appsink(以拉模式)(已测试:它与videotestsrc / uridecodebin等配合使用)

  • 即使管道的状态消息看起来很“正常”,它也无法工作。控制台中有关于SecTaskLoadEntitlements failed error=22的消息,但是在使用命令行时也有这些消息。
    我在问自己,我在GST发射中缺少什么。我在基于udpsrc的管道上找不到任何示例。

    我的问题是:
  • 启动gst-launch时,是否有人知道实际发生的事情?或者知道实际发生的事情的方法吗?
  • 是否有一些使用udpsrc的代码中的工作管道示例?


  • 编辑

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

    现在我的管道如下所示:
  • udpsrc
  • 队列
  • h264支付
  • 解码bin
  • 视频转换器
  • caps过滤器
  • appsink / glimagesink

  • macos - GStreamer udpsrc可与GST启动一起使用,但不能在应用程序(OSX)中使用-LMLPHP

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

    最佳答案

    找到为什么它什么都没收到: GstUdpSrc元素必须位于 GST_STATE_NULL 中,才能为其分配端口以侦听,否则它将无声地侦听默认端口(5004)。

    现在一切正常。

    将环境变量GST_DEBUG设置为udpsrc:5有助于获得更多信息。

    08-06 13:56