我正在 NVIDIA Jetson Nano 上开发视频录制应用程序。我的应用程序在 200 多台 Jetson Nano 设备上运行,每台设备每天录制 3-10 个视频。单个设备通常记录 40-45 分钟,中间间隔 5 分钟。问题是:有时(< 5%)视频已损坏,无法进行后处理。
管道(添加换行符以提高可读性):
v4l2src name=video_source
! videorate ! video/x-raw, height=720, width=1280, framerate=30/1
! nvvidconv
! omxh264enc
! queue
! mux.
pulsesrc device=alsa_input.usb-046d_Logitech_BRIO_FC1248A5-03.analog-stereo name=audio_source
! audio/x-raw, rate=44100, channels=2, width=32, depth=32
! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0
! lamemp3enc bitrate=256
! queue
! mux.
qtmux name=mux
! filesink location=filename.mp4
Gst.parse_launch
我尝试使用 Python 绑定 ( )运行此管道,但gst-launch-1.0
两者都有问题。
- 使用 Python 绑定,我在管道的时钟对象上设置了一个时钟事件。当它触发时,我将 EOS 事件发送到管道。我的日志表明
pipeline.send_event
总是调用,但有时无法返回。 - 使用
gst-launch-1.0
,我添加了-e
标志(强制 EOS)并使用 Pythonsubprocess
来启动该过程。然后主 Python 进程简单地休眠 40-45 分钟,然后向子进程发送一个 SIGINT 事件。日志gst-launch-1.0
有时会停在EOS on shutdown enabled -- Forcing EOS on the pipeline
.
在任何一种情况下,相机都不会被释放,需要手动终止。生成的视频已损坏(缺少 moov 原子),无法使用 OpenCV 播放或读取以进行进一步处理。
这是我的管道问题、设备特定问题还是 Gstreamer 错误?我该如何解决?