【问题标题】:Webcam streaming using gstreamer over UDP使用 gstreamer over UDP 进行网络摄像头流式传输
【发布时间】:2020-11-28 07:34:05
【问题描述】:

这是我正在尝试的:

gst-launch -v udpsrc port=1234 ! fakesink dump=1

我测试:

gst-launch -v audiotestsrc ! udpsink host=127.0.0.1 port=1234

一切正常,我可以看到来自audiotestsrc的包裹

现在让我们使用网络摄像头源进行测试:

gst-launch -v v4l2src device=/dev/video0 ! queue ! videoscale method=1 ! "video/x-raw-yuv,width=320,height=240" ! queue ! videorate ! "video/x-raw-yuv,framerate=(fraction)15/1" ! queue ! udpsink host=127.0.0.1 port=1234

什么也没有发生,转储中没有包出现。

这是服务器中详细显示的logdump

有人知道吗?

【问题讨论】:

  • 忘了说:例如用 autovideosink 替换 udpsink 我可以看到网络摄像头很好

标签: gstreamer


【解决方案1】:

试试这些(你可能需要为此安装 gstreamer-ugly 插件)

来自网络摄像头的 UDP 流式传输(通过网络流式传输)

gst-launch v4l2src device=/dev/video0 ! 'video/x-raw-yuv,width=640,height=480' !  x264enc pass=qual quantizer=20 tune=zerolatency ! rtph264pay ! udpsink host=127.0.0.1 port=1234

从网络摄像头接收的 UDP 流式传输(通过网络接收)

gst-launch udpsrc port=1234 ! "application/x-rtp, payload=127" ! rtph264depay ! ffdec_h264 ! xvimagesink sync=false

更新

要确定流式传输端的有效负载,只需使用带有 gst-launch -v ... 的详细选项

【讨论】:

  • 在编码和流之间包含一个队列是个好主意。允许更好的时间和更少的抖动播放。
  • @AtillaFiliz 我倾向于在使用“tee”时使用“queue”,尽管您的观点在这种情况下可能是有效的。
  • 我自己做了一些实验。我在编码器端使用了一些专门的硬件,添加队列没有任何区别。但是,当我在 rtpdepay 和 ffdec 之间添加队列时,播放质量提高了很多。
  • 队列元素通过在另一个线程中发送数据来解耦流。见gstreamer.freedesktop.org/data/doc/gstreamer/head/…gstreamer.freedesktop.org/wiki/…
【解决方案2】:

也许数据包对于 udp 来说太大了?它们仅限于 64K。尝试将帧大小调整为非常小的尺寸,以检查这是否是原因。如果是这样,您可能对一些压缩和 payloaders/depayloaders 感兴趣 (gst-inspect | grep pay)。

【讨论】:

    【解决方案3】:

    gstreamer1-1.16.0-1.fc30

    gst-launch-1.0 -v filesrc location=/.../.../.../sample-mp4-file.mp4 ! qtdemux ! h264解析!队列 ! rtph264pay config-interval=10 pt=96 ! udpsink 端口=8888 主机=127.0.0.1

    https://en.wikipedia.org/wiki/RTP_audio_video_profile

    【讨论】:

    • 你能解释一下你的答案吗?
    猜你喜欢
    • 2020-03-22
    • 2015-03-14
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多