如何将 h264 视频从网络摄像头传输到网络?

如何将 h264 视频从网络摄像头传输到网络?

我有一个网络摄像头,我想用它来传输 h264 视频。现在我正在使用 mjpg-streamer 流式传输 mjpg 视频。现在我想流式传输 h264。我发现可以用 gstreamer 来完成,但我对它完全陌生。另外,在阅读了一些博客/文章/等之后,在我看来,h264 和 gstreamer 存在一些问题。这仍然是真的吗?

除了 gstreamer 之外,可能还有其他方法可以做到这一点?

任何信息都会有帮助。提前致谢。

答案1

我将解释如何使用 gstreamer 流式传输 h264。

首先,您需要 Linux 内核 3.2 或更高版本才能在 v4l2 驱动程序中支持“H264 像素格式”。

使用 v4l2-ctl 检查相机是否有正确的 H.264 支持:

# v4l2-ctl --列表格式
# v4l2-ctl --list-formats-ext

接下来,您将需要 video4linux 库和实用程序。这些包括:

libv4l 和 libv4l-dev
v4l-utils
qv4l2(可能是 v4l-utils 的一部分)
v4l2ucp

设置帧速率:

# v4l2-ctl --set-fmt-video=宽度=800,高度=448,像素格式=1
# v4l2-ctl --set-parm=30

Gstreamer 有一个 v4l2src 输入元素,它尚不支持 video/x-264 格式。

但是,我们可以捕获 H.264 流并发送到文件甚至标准输出,只需使用文件源将其传输到 gstreamer 管道的标准输入:

#./捕获-c 100000 -o | gst-launch -v -e filesrc 位置=/dev/fd/0 ! h264解析!解码bin2! xvimagesink 同步=假

编码后的视频流可以使用 Gstreamer 通过网络发送:

#gst-launch -v udpsrc端口=4000 caps='application/x-rtp,媒体=(字符串)视频,时钟速率=(int)90000,编码名称=(字符串)H264'! \
          rtph264depay! ffdec_h264! xvimagesink 同步=假

 #./捕获-c 10000 -o | gst-launch -v -e filesrc 位置=/dev/fd/0 ! h264解析! rtph264支付! udpsink 主机=host_IP 端口=4000

我希望您会发现这很有用。

相关内容