我使用gstreamer在我的NVIDIA Tegra jetson TK1开发板上运行9秒视频:
gst-launch-0.10 playbin uri=file:///home/ubuntu/widescreen.avi
我注意到这会丢弃很多帧,而gstreamer会打印这些消息:
WARNING: from element /GstPlayBin:playbin0/GstBin:vbin/GstAutoVideoSink:videosink/GstXvImageSink:videosink-actual-sink-xvimage: A lot of buffers are being dropped.
Additional debug info:
gstbasesink.c(2875): gst_base_sink_is_too_late (): /GstPlayBin:playbin0/GstBin:vbin/GstAutoVideoSink:videosink/GstXvImageSink:videosink-actual-sink-xvimage:
There may be a timestamping problem, or this computer is too slow.
我在执行此操作时运行top
,确实gstreamer
占用了95%的CPU。
现在,当我通过默认媒体播放器播放此视频时,它播放完全正常且没有任何延迟。我想知道是否有人知道gstreamer无法正常播放的原因。我是gstreamer的新手,想知道我是否可以采取措施来缓解这种情况。
答案 0 :(得分:1)
箱子是许多元素组合成一个元素类型结构(即具有适当数量的汇和源)。 playbin是一个标准的bin,带有" autovideosink"自动检测视频接收器的元素。 首先,我建议你升级到gstreamer-1.0,其中修复了许多错误。 其次问题似乎是你的xvimagesink,因此通过明确定义尝试使用ximagesink,你的autovideosink默认选择xvimagesink。 试试这个管道: - (用于硬件解码)
gst-launch-1.0 filesrc location="location of h264 video/file.avi" ! avidemux ! h264parse ! omxh264dec ! videoconvert ! ximagesink
或者对于cpu解码使用avdec_h264而不是omxh264dec
答案 1 :(得分:0)
如果媒体文件是H.264,则默认媒体播放器可能使用视频硬件解码,这允许以较少的CPU资源进行解码。尝试创建明确使用此处讨论的omx H.264解码元素的gstreamer管道(http://elinux.org/Jetson/H264_Codec)。
例如。 gst-launch-0.10 filesrc location=/home/ubuntu/widescreen.avi ! avidemux ! h264parse ! nv_omx_h264dec ! autovideosink