我在Android手机上通过RTP / UDP接收视频,但我发现CPU使用率非常高,一个核心的近100%用于解码视频。在高端设备上,视频播放几乎是平滑的,但在中低端设备上,我每秒只能获得1帧。它是H.264视频流,分辨率为480x360,速度为30 fps。
这是我的管道:
udpsrc port=5004 caps=application/x-rtp,payload=96,clock-rate=90000,encoding-name=H264
! rtpjitterbuffer drop-on-latency=true max-dropout-time=500
! rtph264depay
! video/x-h264,width=480,height=360,framerate=30/1,profile=baseline,stream-format=avc,alignment=au
! h264parse
! decodebin
! videoconvert
! autovideosink
据我所知,这里的问题是通过使用decodebin
,CPU负责解码视频,这是不好的。
所以现在我试图找到该元素的替代品,以便使用硬件加速解码视频。我发现我可以使用像amcviddec-XXXX
这样的元素,我必须参考硬件解码器。可用元素列表应位于设备的/etc/media_codecs.xml
文件中,但我无法确定哪个元素以及如何将有效解码器插入到我的管道中。这些是该文件的内容:http://pastebin.com/9KxHDpE3
我尝试了amcviddec-omxgoogleh264decoder
或amcviddec-omxmarvellvideohwcoda7542decoder
之类的内容,但我总是收到此错误:GStreamer encountered a general supporting library error
。至少管道形成良好,所有元素似乎都被Gstreamer所理解。