我目前设置了两个命令行管道,以通过以太网将视频从Raspberry Pi摄像机(ArduCam模块)传输到PC。这些效果很好:
gst-sender.sh
./video2stdout | gst-launch-1.0 -v fdsrc fd=0 ! \
video/x-h264, width=1280, height=800, framerate=60/1 ! \
h264parse ! rtph264pay ! \
udpsink host=xxx.xxx.xx.xxx port=xxxx
gst-reciever.sh
gst-launch-1.0 -v -e udpsrc port=xxxx \
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, \
encoding-name=(string)H264, payload=(int)96" ! \
rtph264depay ! h264parse ! mp4mux ! filesink location=video.mp4
但是,最终我将运行多台摄像机,并通过外部硬件触发器进行同步,并且由于我不能保证流将在同一时间开始,因此需要时间戳-无论是流开始时间还是每个时间框架。
通过在gst-sender.sh的h264parse和rtph264pay之间添加'identitysilent = false',我可以访问流的缓冲区数据,并使用以下命令可以检索帧时间戳:
./gst-sender.sh | grep -oP "(?<=dts: )(\d+:){2}\d+.\d+"
但是这些时间戳是相对于流开始的,所以我不能使用它们来排列多个流中保存的视频!
Start video encoding...
0:00:00.000000000
0:00:00.016666666
0:00:00.033333332
0:00:00.049999998
0:00:00.066666664
0:00:00.083333330
0:00:00.099999996
0:00:00.116666662
0:00:00.133333328
0:00:00.149999994
0:00:00.166666660
0:00:00.183333326
gstreamer似乎具有用于延迟计算[1]的“绝对”时钟时间,但是我一直找不到从命令行访问它的任何方法。
是否可以从命令行访问gstreamer的绝对/系统时钟?还是获取流开始时间戳的另一种方法?