ffmpeg GStreamer

ffmpeg-7.13 GStreamer-1.26.2

树莓派5  raspberry pi 5  hevc(h.265) h.264硬件视频编码支持如下

一、ffmpeg支持硬件编码:

1、hevc_v4l2m2m、 h264_v4l2m2m两个都支持

2、支持视频H.265 H.264室内编码识别

/dev/dri/renderD128,DRM,渲染节点(无显示也能用),

ffmpeg -v verbose -rtsp_transport tcp -hwaccel drm -hwaccel_device /dev/dri/renderD128 -i rtsp://admin:SHnb888A@192.168.112.13:554 -f null /dev/null

ffmpeg-7.13
一、检测硬件视频编码支持
steven_roc@stevenroc-PCH:~ $ ffmpeg -codecs | grep hevc_v4l2m2m
ffmpeg version 7.1.3-0+deb13u1+rpt1 Copyright (c) 2000-2025 the FFmpeg developers
  built with gcc 14 (Debian 14.2.0-19)
  configuration: --prefix=/usr --extra-version=0+deb13u1+rpt1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-libmfx --disable-mmal --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --disable-libvpl --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-vout-drm --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sand --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      59. 39.100 / 59. 39.100
  libavcodec     61. 19.101 / 61. 19.101
  libavformat    61.  7.100 / 61.  7.100
  libavdevice    61.  3.100 / 61.  3.100
  libavfilter    10.  4.100 / 10.  4.100
  libswscale      8.  3.100 /  8.  3.100
  libswresample   5.  3.100 /  5.  3.100
  libpostproc    58.  3.100 / 58.  3.100
 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_v4l2m2m hevc_cuvid) (encoders: libx265 hevc_nvenc hevc_v4l2m2m hevc_vaapi hevc_vulkan)

steven_roc@stevenroc-PCH:~ $ ffmpeg -codecs | grep h264_v4l2m2m
ffmpeg version 7.1.3-0+deb13u1+rpt1 Copyright (c) 2000-2025 the FFmpeg developers
  built with gcc 14 (Debian 14.2.0-19)
  configuration: --prefix=/usr --extra-version=0+deb13u1+rpt1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-libmfx --disable-mmal --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --disable-libvpl --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-vout-drm --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sand --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      59. 39.100 / 59. 39.100
  libavcodec     61. 19.101 / 61. 19.101
  libavformat    61.  7.100 / 61.  7.100
  libavdevice    61.  3.100 / 61.  3.100
  libavfilter    10.  4.100 / 10.  4.100
  libswscale      8.  3.100 /  8.  3.100
  libswresample   5.  3.100 /  5.  3.100
  libpostproc    58.  3.100 / 58.  3.100
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_cuvid) (encoders: libx264 libx264rgb h264_nvenc h264_v4l2m2m h264_vaapi h264_vulkan)


二、视频编码自动检测
steven_roc@stevenroc-PCE:/opt/openAI/project/007.coze.plateApp/workspace/projects/cpp/config $ ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1:nk=1 rtsp://admin:123456qwe@192.168.16.13
hevc
steven_roc@stevenroc-PCE:/opt/openAI/project/007.coze.plateApp/workspace/projects/cpp/config $ ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1:nk=1 rtsp://admin:SHnb888A@192.168.112.13
[h264 @ 0x5555dfdba590] missing picture in access unit with size 33
[h264 @ 0x5555dfdba590] no frame!
h264

三、连接视频解码

ffmpeg -rtsp_transport tcp -i rtsp://admin:123456qwe@192.168.16.12 -c:v copy output.hevc

steven_roc@stevenroc-PCH:~ $ ffmpeg -rtsp_transport tcp -i rtsp://admin:123456qwe@192.168.16.12 -c:v copy output.hevc
ffmpeg -rtsp_transport tcp -i rtsp://admin:123456qwe@192.168.16.12:554/stream1 -f null -
1、 正确的 FFmpeg 硬件解码命令 最简洁可靠的命令(自动选择硬解)h.265
 ffmpeg -v verbose \
-rtsp_transport tcp \
-hwaccel drm \
-hwaccel_device /dev/dri/renderD128 \
-i rtsp://admin:123456qwe@192.168.16.17:554/h265/ch0/main/av_stream \
-f null /dev/null

2、h.264
 ffmpeg -v verbose \
-rtsp_transport tcp \
-hwaccel drm \
-hwaccel_device /dev/dri/renderD128 \
-i rtsp://admin:SHnb888A@192.168.112.13:554 \
-f null /dev/null
3、
1)、
ffmpeg -v verbose -rtsp_transport tcp -hwaccel drm -hwaccel_device /dev/dri/renderD128 -i rtsp://admin:SHnb888A@192.168.112.13:554 -f null /dev/null

ffmpeg -v verbose -rtsp_transport tcp -hwaccel drm -hwaccel_device /dev/dri/renderD128 -i rtsp://admin:123456qwe@192.168.16.17:554/h265/ch0/main/av_stream -f null /dev/null
ffmpeg -v verbose -rtsp_transport tcp -hwaccel drm -hwaccel_device /dev/dri/renderD128 -i rtsp://admin:123456qwe@192.168.16.17:554 -f null /dev/null
2)、
ffmpeg           -rtsp_transport tcp -hwaccel drm -hwaccel_device /dev/dri/card0        -i rtsp://admin:123456qwe@192.168.16.17:554/stream1 -f null -

3)、本地视频解码ffmpeg -c:v hevc_v4l2m2m -i test_1080p_hevc.mp4 -f null -              自动解码
ffmpeg -i test_1080p_hevc.mp4 -f null -

注意:使用 /dev/dri/renderD128无显示也能用
1、命令参数有误: /dev/dri/video19 是 V4L2 视频设备,不是 DRM 渲染节点。FFmpeg 的 -hwaccel_device 需要指向 DRM 设备(如 /dev/dri/renderD128 或  /dev/dri/card0),而你给了一个 V4L2 节点,导致 Device creation failed: -2。另外 RTSP 丢包是因为默认走 UDP,需要强制 TCP。
2、节点,类型,用途,
/dev/video19,V4L2,Pi 5 HEVC 解码器(rpi-hevc-dec),
/dev/dri/card0,DRM,显示卡主节点,
/dev/dri/renderD128,DRM,渲染节点(无显示也能用),

4、
steven_roc@stevenroc-PCE:~ $ pkg-config --modversion opencv4
4.10.0
steven_roc@stevenroc-PCE:~ $ ffmpeg -hwaccels | grep drm
ffmpeg version 7.1.3-0+deb13u1+rpt1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 14 (Debian 14.2.0-19)
configuration: --prefix=/usr --extra-version=0+deb13u1+rpt1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-libmfx --disable-mmal --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --disable-libvpl --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-vout-drm --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sand --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.101 / 61. 19.101
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
drm
steven_roc@stevenroc-PCE:~ $ ls /dev/dri/
by-path card0 card1 renderD128

5、

steven_roc@stevenroc-PCE:~ $ ffmpeg -decoders | grep v4l2
ffmpeg version 7.1.3-0+deb13u1+rpt1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 14 (Debian 14.2.0-19)
configuration: --prefix=/usr --extra-version=0+deb13u1+rpt1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-libmfx --disable-mmal --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --disable-libvpl --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-vout-drm --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sand --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.101 / 61. 19.101
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
V..... h263_v4l2m2m V4L2 mem2mem H.263 decoder wrapper (codec h263)
V..... h264_v4l2m2m V4L2 mem2mem H.264 decoder wrapper (codec h264)
V..... hevc_v4l2m2m V4L2 mem2mem HEVC decoder wrapper (codec hevc)
V..... mpeg1_v4l2m2m V4L2 mem2mem MPEG1 decoder wrapper (codec mpeg1video)
V..... mpeg2_v4l2m2m V4L2 mem2mem MPEG2 decoder wrapper (codec mpeg2video)
V..... mpeg4_v4l2m2m V4L2 mem2mem MPEG4 decoder wrapper (codec mpeg4)
V..... vc1_v4l2m2m V4L2 mem2mem VC1 decoder wrapper (codec vc1)
V..... vp8_v4l2m2m V4L2 mem2mem VP8 decoder wrapper (codec vp8)
V..... vp9_v4l2m2m V4L2 mem2mem VP9 decoder wrapper (codec vp9)


二、GStreamer

1、gst-inspect-1.0 输出来看,你的系统同时存在软解和硬解元素

元素                            类型         说明
`v4l2slh265dec`         硬解 ✅    V4L2 Stateless H.265 解码器,调用 VideoCore VII
`avdec_h265`            软解 ❌     FFmpeg 软件解码,CPU 占用高
`libde265dec`            软解 ❌     libde265 库软件解码
`avdec_h264`            软解 ❌    H.264 软件解码
`openh264dec`          软解 ❌    OpenH264 软件解码

 

2、GStreamer-1.26.2

1)v4l2slh265dec 只支持硬件h.265视频编码 v4l2slh265dec

GStreamer 1.26.2
一、检测硬件视频编码支持    v4l2slh265dec
steven_roc@stevenroc-PCH:~ $  gst-inspect-1.0 | grep 265
closedcaption:  h265ccextractor: H.265 Closed Caption Extractor
closedcaption:  h265ccinserter: H.265 Closed Caption Inserter
codec2json:  h2652json: H2652json
codectimestamper:  h265timestamper: H.265 timestamper
de265:  libde265dec: HEVC/H.265 decoder
libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
rtp:  rtph265depay: RTP H265 depayloader
rtp:  rtph265pay: RTP H265 payloader
typefindfunctions: video/x-h265: h265, x265, 265
v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
videoparsersbad:  h265parse: H.265 parser
x265:  x265enc: x265enc

steven_roc@stevenroc-PCH:~ $  gst-inspect-1.0 | grep 264
closedcaption:  h264ccextractor: H.264 Closed Caption Extractor
closedcaption:  h264ccinserter: H.264 Closed Caption Inserter
codec2json:  h2642json: H2642json
codectimestamper:  h264timestamper: H.264 timestamper
libav:  avdec_h264: libav H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 decoder
libav:  avmux_ipod: libav iPod H.264 MP4 (MPEG-4 Part 14) muxer
openh264:  openh264dec: OpenH264 video decoder
openh264:  openh264enc: OpenH264 video encoder
rtp:  rtph264depay: RTP H264 depayloader
rtp:  rtph264pay: RTP H264 payloader
typefindfunctions: video/x-h264: h264, x264, 264
uvch264:  uvch264deviceprovider (GstDeviceProviderFactory)
uvch264:  uvch264mjpgdemux: UVC H264 MJPG Demuxer
uvch264:  uvch264src: UVC H264 Source
videoparsersbad:  h264parse: H.264 parser

三、连接视频解码
1、avdec_h265 是纯软件解码,CPU 占用会很高(单核可能 80%+),但能验证 RTSP 流和下游 AI 管道是否正常。  
gst-launch-1.0 -v \
rtspsrc location=rtsp://admin:123456qwe@192.168.16.17:554/stream1 \
latency=200 protocols=tcp \
! rtph265depay \
! h265parse \
! avdec_h265 \
! queue max-size-buffers=3 leaky=downstream \
! videoconvert \
! "video/x-raw,format=BGR" \
! appsink max-buffers=1 drop=true
2)、
gst-launch-1.0 rtspsrc location=rtsp://admin:123456qwe@192.168.16.12 latency=0 ! queue ! application/x-rtp,media=video,encoding-name=H265 ! rtpjitterbuffer latency=0 ! rtph265depay ! h265parse ! avdec_h265 ! videoconvert ! autovideosink sync=false


2、如果项目依赖 GStreamer 硬件解码,最稳定的方案是重装 Raspberry Pi OS Bookworm(64-bit)。Trixie 目前处于测试阶段,该 bug 尚未修复[^3^]。     v4l2slh265dec 
1)、Bookworm 下硬解命令(与之前你成功协商的命令一致)   v4l2slh265dec 
gst-launch-1.0 -v \
rtspsrc location=rtsp://admin:123456qwe@192.168.16.17:554/stream1 \
latency=200 protocols=tcp \
! rtph265depay \
! h265parse \
! v4l2slh265dec \
! queue max-size-buffers=3 leaky=downstream \
! videoconvert \
! "video/x-raw,format=BGR" \
! appsink max-buffers=1 drop=true
2)、
gst-launch-1.0 -v \
rtspsrc location=rtsp://admin:123456qwe@192.168.16.17:554/stream1 \
latency=200 protocols=tcp name=src \
src. ! rtph265depay \
! h265parse config-interval=-1 \
! v4l2slh265dec \
! queue max-size-buffers=10 \
! videoconvert \
! "video/x-raw,format=RGBA" \
! autovideosink sync=false

# 1. 看 CPU(硬解时 gst-launch-1.0 应 < 15%) 
top -p $(pgrep -d',' gst-launch-1.0) 

# 2. 确认 /dev/video20(HEVC 解码器)正在被使用 
sudo v4l2-ctl -d /dev/video20 --get-fmt-video 

# 3. 确认没有回退到软解 
avdec_h265 GST_DEBUG=2 gst-launch-1.0 ... 2>&1 | grep -i "avdec"
# 无输出 = 硬解成功

# 检查v4l2slh265dec是否存在
gst-inspect-1.0 v4l2slh265dec

# 测试本地H.265文件播放(实验性,可能不稳定)
gst-launch-1.0 playbin uri=file:///path/to/test_h265.mp4

# 或手动pipeline
gst-launch-1.0 filesrc location=test.h265 ! h265parse ! v4l2slh265dec ! videoconvert ! autovideosink

 

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注