我使用 GStreamer 管道编写了 C++ 代码,该管道将 UDP 流作为输入并将帧写入 JPEG 图像。但是,一些输出图像丢失,我不确定是什么导致了这个问题。 udp流中使用的输入视频是清晰的高质量视频,是1fps的H264(High Profile)视频。我们在 Virtual Box 上使用 ubuntu 20.04,视频分辨率为 1920x1080(全高清)。由于它是 1fps 视频,因此总输出帧或图像等于视频持续时间(以秒为单位)。但在输出图像中,我们得到的结果越来越少。的图像。它也与每次运行的代码不一致。有时会丢失 3 帧,有时会丢失 5 帧,有时也会丢失 8 帧。此外,由于服务器和消费者位于同一系统上,因此不会出现数据包丢失。
第一个代码是一个服务器管道,它从输入视频创建 udp 流。
GstElement *pipeline = gst_parse_launch(g_strdup_printf("filesrc location=%s ! qtdemux name=d d. ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink name=sink host=224.1.1.1 port=5000 auto-multicast=true", video_path), NULL );
然后第二个管道使用该流并将帧写入 jpeg 图像。
const gchar *pipeline_str ="udpsrc multicast-group=224.1.1.1 auto-multicast=true port=5000 caps = \"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=96\" ! rtpjitterbuffer ! rtph264depay ! h264parse ! avdec_h264 ! decodebin ! videoconvert ! video/x-raw,width=1920,height=1080,format=BGR, pixel-aspect-ratio=1/1 ! videoconvert ! jpegenc ! appsink name=sink sync=false";
您能否确保首先启动消费者管道并确保它在启动生产者之前正在运行?