我确定这个管道可以在我设置的早期 Ubuntu 系统上运行(为了便于阅读而格式化):
playbin
uri=rtspt://user:[email protected]/ch1/main
video-sink='videoconvert
! videoflip method=counterclockwise
! fpsdisplaysink'
然而,当我尝试在我的程序中使用它时,我得到:
Missing element: H.264 (Main Profile) decoder
WARNING: from element /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0:
No decoder available for type 'video/x-h264,
stream-format=(string)avc, alignment=(string)au,
codec_data=(buffer)014d001fffe10017674d001f9a6602802dff35010101400000fa000030d40101000468ee3c80,
level=(string)3.1, profile=(string)main, width=(int)1280,
height=(int)720, framerate=(fraction)0/1, parsed=(boolean)true'.
Additional debug info:
gsturidecodebin.c(938): unknown_type_cb ():
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0
现在我非常确定我已经安装了H264解码器,并且gstreamer插件
autogen.sh/configure
确实正确地识别了这一事实。安装的软件包是 h264enc
、libx264-142
、libx264-dev
和 x264
。
如果我使用更“可接受”的
autovideosink
代替fpsdisplaysink
,或者如果我尝试使用gst-play-1.0
播放RTSP流,它会做完全相同的事情。但是,如果我使用测试模式源,它就可以工作videotestsrc
。
我做错了什么?
看起来gstreamer找不到合适的解码H264的插件。您可能没有安装 H264 解码器元素,或者 gstreamer 正在寻找错误的元素路径。
首先,尝试运行
gst-inspect-1.0
。这应该输出 gstreamer 检测到的所有元素的长列表。
gst-inspect-1.0 avdec_h264
来验证您是否拥有 H264 解码器元素。尝试执行以下操作:
sudo apt-get install h264enc
sudo apt-get install --yes libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
sudo apt-get install --yes libgirepository1.0-dev libgstrtspserver-1.0 libgstreamer1.0-dev
如果您遇到损坏的软件包,请运行此命令:
sudo apt --fix-broken install
,然后执行上述步骤。