У меня есть пример конвейера gstreamer:gst-launch-1.0 v4l2src device=/dev/video2 ! image/jpeg,width=1280, height=800, framerate=30/1 ! v4l2jpegdec ! queue ! v4l2h264enc extra-controls="controls, h264_profile=4, video_bitrate=620000" ! 'video/x-h264, profile=high, level=(string)4' ! h264parse ! matroskamux ! filesink location=output2.mkv
Что я запускаю его из командной строки. Вместо того, чтобы использовать ctrl+c для завершения процесса, я хочу отправить событие EOS в процесс.
Возможно ли это? И если да, то делал ли кто-нибудь это или какое есть решение?
решение1
Я не смог найти способ сделать это, но я добавил watchdog timeout=1000
в конвейер и отключил видеовход, затем сторожевой таймер завершает поток и генерирует EOS. У меня также есть -e
в конце моей команды, чтобы убедиться, что видеофайл правильно закрыт:
gst-launch-1.0.exe rtspsrc location=rtsp://192.168.189.3:8554/bandwidth_h264 latency=0 ! decodebin ! watchdog timeout=1000 ! tee name=split split.! queue leaky=1 ! autovideosink sync=false split.! queue leaky=1 ! videoconvert ! x264enc ! mp4mux ! filesink location=c:/demo/test.mp4 -e