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 包装器):
udpsrc 大写:"application/x-rtp,media=video,payload=127,encoding-name=H264"
rtph264depay
- 解码箱
- glimagesink(用于测试)或将图像转换为 CVPixelBufferRef 的自定义 appsink(拉模式)(已测试:它适用于 videotestsrc / uridecodebin 等)
它不起作用,即使管道的状态消息看起来相当 'normal'。我在控制台中有关于 SecTaskLoadEntitlements failed error=22
的消息,但在使用命令行时我也有。
我问自己 gst-launch 下我错过了什么。我在网上找不到任何关于基于 udpsrc 的管道的例子。
我的问题是:
- 有没有人知道我们启动 gst-launch 时实际发生了什么或知道实际发生了什么的方法?
- 是否有一些使用 udpsrc 在代码中工作的管道示例?
编辑
这是我的管道图片。如您所见,GstDecodeBin 元素不会创建 src pad,因为它没有接收或处理任何东西(我在 udpsrc 元素上将 'timeout' 属性 设置为 10 秒,这是抛出的) . 会不会是 OSX 沙盒问题?
现在我的管道看起来像这样:
- udpsrc
- 队列
- h264 延迟
- 解码bin
- 视频转换器
- 大写过滤器
- appsink / glimagesink
使用 this 问题中的方法进行测试,该应用确实在该端口上收到了一些东西。
找到它没有收到任何东西的原因:GstUdpSrc 元素必须在 GST_STATE_NULL
中才能分配一个端口来监听, 否则它将静默监听默认端口 (5004)。
现在一切正常。
将环境变量 GST_DEBUG 设置为 udpsrc:5 很有帮助,仅供参考。
我以这种方式使用 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 包装器):
udpsrc 大写:
"application/x-rtp,media=video,payload=127,encoding-name=H264"
rtph264depay
- 解码箱
- glimagesink(用于测试)或将图像转换为 CVPixelBufferRef 的自定义 appsink(拉模式)(已测试:它适用于 videotestsrc / uridecodebin 等)
它不起作用,即使管道的状态消息看起来相当 'normal'。我在控制台中有关于 SecTaskLoadEntitlements failed error=22
的消息,但在使用命令行时我也有。
我问自己 gst-launch 下我错过了什么。我在网上找不到任何关于基于 udpsrc 的管道的例子。
我的问题是:
- 有没有人知道我们启动 gst-launch 时实际发生了什么或知道实际发生了什么的方法?
- 是否有一些使用 udpsrc 在代码中工作的管道示例?
编辑
这是我的管道图片。如您所见,GstDecodeBin 元素不会创建 src pad,因为它没有接收或处理任何东西(我在 udpsrc 元素上将 'timeout' 属性 设置为 10 秒,这是抛出的) . 会不会是 OSX 沙盒问题?
现在我的管道看起来像这样:
- udpsrc
- 队列
- h264 延迟
- 解码bin
- 视频转换器
- 大写过滤器
- appsink / glimagesink
使用 this 问题中的方法进行测试,该应用确实在该端口上收到了一些东西。
找到它没有收到任何东西的原因:GstUdpSrc 元素必须在 GST_STATE_NULL
中才能分配一个端口来监听, 否则它将静默监听默认端口 (5004)。
现在一切正常。
将环境变量 GST_DEBUG 设置为 udpsrc:5 很有帮助,仅供参考。