python - 从 opencv videowriter api 运行 gstreamer 管道命令以将连续图像流式传输到 hlssink
问题描述
我正在尝试使用 opencv videowriter api 从视频卡设备流式传输连续图像,下面是执行该操作的 opencv 代码片段,我的问题是我正在获取帧但没有在 /var/ 中生成任何 index.m3u8 文件www文件夹我是opencv的新手,gstreamer无法弄清楚这是否可以从opencv实现,或者我必须使用其他一些机制
输入视频设备是仅支持 MJEPG 编解码器的视频卡
import cv2
cap = cv2.VideoCapture('/dev/video0')
framerate = 30.0
out = cv2.VideoWriter('appsrc ! image/jpeg ! '
'jpegdec ! x264enc tune=zerolatency ! '
'mpegtsmux ! hlssink location=/var/www/segment-%05d.ts '
'playlist-location=/var/www/index.m3u8 max-files=20 target-duration=15',
0, framerate, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if ret:
out.write(frame)
else:
break
# Release everything if job is finished
cap.release()
out.release()
解决方案
OpenCvVideoWriter
仅在其 GStreamer 接口上支持 BGR 帧。可能VideoCapture
还会将图像转换为 BGR。
因此,您无需在 gstreamer 管道中解码 jpeg。但是x264enc
并不总是接受 BGR 作为输入,所以你应该在和 x264encvideoconvert
之间添加`appsrc
t = cv2.VideoWriter('appsrc ! videoconvert ! x264enc tune=zerolatency ! '
'mpegtsmux ! hlssink location=/var/www/segment-%05d.ts '
'playlist-location=/var/www/index.m3u8 max-files=20 target-duration=15',
0, framerate, (640, 480))
推荐阅读
- reactjs - 如何使用 React Navigation 5 在 Action Creators 中导航到屏幕
- python - 如何使用上次检查时间而不是日期搜索邮箱?
- java - 从 Hibernate Optimistic Locking 异常中恢复
- android - 购买付费应用时是否可以发送账户信息?
- javascript - 在 React 中使用异步从 API 恢复数据时遇到问题
- firebase - 必须将非空字符串提供给 Text 小部件。在 Flutter 中显示数据!= null'
- reactjs - 在反应中设置状态问题
- html - CSS:在手机视图中图像尺寸变大
- python - 程序没有完全终止
- sql - 如何正确调用包含动态 SQL 的 PL/SQL 函数?