我使用 Gstreamer 处理实时摄像头视频流,通过 tcpserversink、jpegenc、rtpjpegpay 和 rtpstreampay 发送。
我在开放广播工作室使用 Gstreamer 接收此工作: tcpclientsrc host=ipaddress port=port !应用程序/x-rtp-stream,媒体=(字符串)视频,时钟速率=(int)90000,编码名称= JPEG! rtpstreamdepay! rtpjpeg支付! jpegdec !视频转换!解码器!队列 !视频。
如何使用命令行 gstreamer 从实时摄像机源(类似于上面的 OBS)获取它并记录为 matroska mkv 和/或 mpeg mp4 文件,或者可以考虑使用 Motion mjpeg?
Gstreamer 命令行: gst-launch-1.0 -e tcpclientsrc 主机=ip地址 端口=端口!应用程序/x-rtp-stream,媒体=(字符串)视频,帧速率= 30/1,时钟速率=(int)90000,编码名称= JPEG,时钟速率=(int)90000! rtpstreamdepay! rtpjpeg支付! jpeg解析! matroskamux 可流式传输=1!文件接收器位置=C:/video.mkv
它说 Pipeline is PREROLLING,PREROLLED,并将 pipeline 设置为 PLAYING with New Clock。
虽然只录制第一帧,但时钟卡在 0:00:00.0/99:99:99,因此,打开 mkv 文件,VLC 播放器仅显示第一帧。
我尝试了很多不同的变体,在线搜索很有挑战性,尝试过 videoconvert、decodebin、jpegdec、mp4mux、mpegtsmux、matroskamux、queue 等。
感谢您的帮助。
您可能需要在 rtpjitterbuffer
和
rtpstreamdepay
之间添加 rtpjpegdepay
:
gst-launch-1.0 -e tcpclientsrc ! application/x-rtp-stream,encoding-name=JPEG ! rtpstreamdepay ! rtpjitterbuffer ! rtpjpegdepay ! jpegparse ! matroskamux ! filesink location=test_mjpg.mkv
请注意,
rtpjitterbuffer
有一个latency
属性,默认值为2000毫秒,您可以稍后根据您的情况进行调整。