要点
1.查看视频流信息
ps:这点挺关键。最近在做一个rtsp流的解码时,发现以前的解码程序不能用了,最后发现流是hevc的,不是h264,那么h264相关的软解码和硬解码器肯定都是无效的。另外,推流格式flv仅支持到h264,所以hevc的视频流需要转码为h264才能使用ffmpeg推流出去。
查看流信息的最佳方式,当然是直接使用编译好的工具ffprobe
./ffprobe -show_streams xxxx
2.查看ffmpeg当前版本支持的所有解码器
比如拿到了hevc, 这时候我想知道相关的解码器有哪些,我的硬件哪些又能支持硬解码和硬编码呢?
进入ffmpeg源码根目录,运行
./configure --list-decoders
发现我用的ffmpeg4.1.0. 支持的hevc的解码器有:
hevc :这个是cpu软解无疑了
hevc_cuvid:这个明显是nvidia GPU硬解支持
hevc_mediacodec:这个应该是安卓平台的硬解支持
hevc_qsv: qsv好像是种像素格式,对qsv格式的硬解支持
hevc_rkmpp:这个好像是瑞芯微的rk系列mpp硬解支持
hevc_v4l2m2m:针对v4l2设备的
貌似树莓派上只有hevc能用啊,尴尬,不能硬解吗?又知道的告诉我下啊
3.查询编译好的ffmpeg版本有哪些大概支持
#查询支持的视频文件格式(封装器及解封装器)
./ffmpeg -formats
#查询支持的编码器
./ffmpeg -encoders
#查询支持的解码器
./ffmpeg -decoders
#查询支持的滤镜
./ffmpeg -filters
./ffmpeg -codecs
ps:这条查询很神奇,好像能查出我的平台支持的所有编码器,比如我还没编译hevc进来时,它这里显示,decoders: hevc hevc_v4l2m2m.
4.查询编译好的ffmpeg更细致的支持
#查询FLV封装器的支持
./ffmpeg -h muxer=flv
#查询H.264编码器的支持
./ffmpeg -h encoder=h264
ps:这里可以看到其支持哪些像素格式等重要信息,诸如yuv420p,nv12,nv21等