我希望能够将梯形校正应用于网络摄像头流。原始图像流包含一个矩形背景,我使用矩形覆盖层,用户拖动其角以匹配图像中的实际角。最后,用户单击按钮将坐标发送到服务器。然后,服务器更新过滤器参数并重新启动流。使用ffmpeg
RTMP 流式传输到一切正常nginx
,但生成的 HLS 流nginx
滞后不令人满意和/或挂起。我使用过滤器如下:
-lavfi "perspective=x0=100:y0=20:x1=520:y1=20:x2=100:y2=380:x3=520:y3=380:interpolation=linear:sense=source"
切换到使用motion
流式传输图像具有更好的实时性能,我可以将图像完美地嵌入上述 HTML 中。问题是我找不到将过滤器插入流ffmpeg
中的方法motion
,我认为这仅适用于已保存的文件。可能吗?
答案1
在维护者的指点下motion
,我已经完成了这项工作:
- 安装
v4l2loopback
设备。在我的例子中,它将环回设备报告为/dev/video2
,因此ffmpeg
命令从网络摄像头流经/dev/video0
透视滤镜,校正梯形失真效果,并将结果放入/dev/video2
。
ffmpeg -f v4l2 -i /dev/video0 -f v4l2 /dev/video2 -lavfi \
"perspective=x0=23:y0=43:x1=500:y1=38:x2=33:y2=467:x3=508:y3=471:interpolation=linear:sense=source"
- 按标准运行
motion
,但使用环回设备作为摄像头输入。
要顺利重新启动还需要做一些工作ffmpeg
,但现在大部分已经完成了。