在 RTSP gstreamer python 客户端中处理帧速率和视频比例
Handling Frame Rate and Video Scale in RTSP gstreamer python client
我们有一个 RTSP 流 运行ning。这是我们用于 运行 流的 gstreamer 管道。
./test-launch "nvarguscamerasrc
! video/x-raw(memory:NVMM), width=(int)1280, height=(int)960, framerate=(fraction)30/1, format=(string)NV12
! nvvidconv
! nvv4l2h264enc maxperf-enable=1 poc-type=2 preset-level=1 bitrate=40000000
! rtph264pay name=pay0 pt=96 config-interval=1"
我想以 10 FPS 和宽度 640 高度 480 的视频比例读取流,然后将接收到的帧传递给对象检测。
这是我用来读取流的管道。
"rtspsrc location=rtsp://127.0.0.1:8554/test max-rtcp-rtp-time-diff=-1 udp-buffer-size=2147483647 buffer-mode=2 " \
"! decodebin " \
"! autovideoconvert " \
"! nvjpegenc " \
"! appsink name=sink emit-signals=True"
我可以通过上述方法获取带有 appsink 回调的帧,但是每当我尝试使用 videoscale 和 videorate 插件时现有管道 我没有通过 appsink 回调获得任何输出。
我什至使用这种方法来获取帧,但这也不起作用。我没有收到任何错误,但我在 appsink 回调中没有收到任何帧。
rtspsrc location=rtsp://127.0.0.1:8554/test
! rtph264depay ! h264parse ! nvv4l2decoder
! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=15/1 ! appsink …
当我尝试在 python 应用程序中执行 gstreamer 时出现此错误我怀疑无法更改视频大小的原因是由于缺少此插件但我可以在没有插件的情况下继续这个插件只要我不改变视频大小和帧率。
dlopen failed for /usr/lib/aarch64-linux-gnu/libv4l/plugins-wrapped/libv4l2_nvvidconv.so:
/usr/lib/aarch64-linux-gnu/libv4l/plugins-wrapped/libv4l2_nvvidconv.so:
cannot open shared object file: No such file or directory
您的问题可能是 nvv4l2decoder 输出到 NVMM 内存中,但 videoconvert 无法从 NVMM 内存中读取。尝试使用 nvvidconv 而不是同时使用 videoconvert 和 videoscale:
rtspsrc location=rtsp://127.0.0.1:8554/test ! rtph264depay ! h264parse ! nvv4l2decoder ! nvvidconv ! video/x-raw,width=640,height=480 ! videorate ! video/x-raw,framerate=15/1 ! appsink
我们有一个 RTSP 流 运行ning。这是我们用于 运行 流的 gstreamer 管道。
./test-launch "nvarguscamerasrc
! video/x-raw(memory:NVMM), width=(int)1280, height=(int)960, framerate=(fraction)30/1, format=(string)NV12
! nvvidconv
! nvv4l2h264enc maxperf-enable=1 poc-type=2 preset-level=1 bitrate=40000000
! rtph264pay name=pay0 pt=96 config-interval=1"
我想以 10 FPS 和宽度 640 高度 480 的视频比例读取流,然后将接收到的帧传递给对象检测。
这是我用来读取流的管道。
"rtspsrc location=rtsp://127.0.0.1:8554/test max-rtcp-rtp-time-diff=-1 udp-buffer-size=2147483647 buffer-mode=2 " \
"! decodebin " \
"! autovideoconvert " \
"! nvjpegenc " \
"! appsink name=sink emit-signals=True"
我可以通过上述方法获取带有 appsink 回调的帧,但是每当我尝试使用 videoscale 和 videorate 插件时现有管道 我没有通过 appsink 回调获得任何输出。
我什至使用这种方法来获取帧,但这也不起作用。我没有收到任何错误,但我在 appsink 回调中没有收到任何帧。
rtspsrc location=rtsp://127.0.0.1:8554/test
! rtph264depay ! h264parse ! nvv4l2decoder
! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=15/1 ! appsink …
当我尝试在 python 应用程序中执行 gstreamer 时出现此错误我怀疑无法更改视频大小的原因是由于缺少此插件但我可以在没有插件的情况下继续这个插件只要我不改变视频大小和帧率。
dlopen failed for /usr/lib/aarch64-linux-gnu/libv4l/plugins-wrapped/libv4l2_nvvidconv.so:
/usr/lib/aarch64-linux-gnu/libv4l/plugins-wrapped/libv4l2_nvvidconv.so:
cannot open shared object file: No such file or directory
您的问题可能是 nvv4l2decoder 输出到 NVMM 内存中,但 videoconvert 无法从 NVMM 内存中读取。尝试使用 nvvidconv 而不是同时使用 videoconvert 和 videoscale:
rtspsrc location=rtsp://127.0.0.1:8554/test ! rtph264depay ! h264parse ! nvv4l2decoder ! nvvidconv ! video/x-raw,width=640,height=480 ! videorate ! video/x-raw,framerate=15/1 ! appsink