树莓派3硬件加速播放视频
树莓派3+Wayland+mpv+硬件解码
动机🔗
- 硬件加速播放视频能效更好
- 不用那就是全核100%
- 旧的MMAL、OMX不再被支持
- 新内核、新固件、新驱动都转向使用V4L2标准API(见raspberrypi/userland)
- ArchLinuxARM打包的mpv支持硬件解码,但是:
- 需要用
--hwdec=v4l2m2m-copy
- 上述解码器在Wayland上只与
--vo=gpu
兼容,--vo=dmabuf-wayland
用不了 --hwdec=v4l2m2m-copy --vo=gpu
输出会掉帧(尽管解码不会掉帧)
- 需要用
实现方法🔗
重新编译mpv,使其链接适配树莓派的rpi-ffmpeg。rpi-ffmpeg在树莓派上实现了 v4l2m2m
(w/o -copy
),并且这个解码器与输出方式 dmabuf-wayland
兼容,最终效果很好。
总流程是:
- clone mpv-build
- 运行
./update
in mpv-build's folder - 想办法用 rpi-ffmpeg 替换脚本自动clone的ffmpeg(例如用git添加一个remote)
- 在
ffmpeg_options
添加额外配置参数(见下) - 运行
./build -j4
编译所有东西 - 然后你就能用编译好的mpv实现硬件加速看视频了,命令形如
mpv --vo=dmabuf-wayland --hwdec=v4l2m2m video.mp4
ffmpeg_options
的内容(不是全都必要,但我懒得测试了):
--enable-libx264
--enable-libmp3lame
--enable-libfdk-aac
--enable-libdrm
--enable-opengl
--enable-outdev=vout_drm
--enable-hwaccels
--enable-v4l2_m2m
--enable-nonfree
--enable-sand
--enable-v4l2-request
附注🔗
树莓派3的硬件解码节点是/dev/video10
。可以通过运行v4l2-ctl --list-formats-out -d 10
列出所支持解码的格式。