我有一个网络摄像头,我想用它来传输 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
我希望您会发现这很有用。