我已经在这里为我的android设备构建了ffmpeg库:https://github.com/appunite/AndroidFFmpeg。但是有些视频文件播放非常慢(我发现非常慢的播放视频是我的android设备可以自己播放的)。这是build.sh脚本
https://github.com/appunite/AndroidFFmpeg/blob/master/FFmpegLibrary/jni/build_android.sh
可能是因为这些行:
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_dxva2 \
--enable-hwaccel=mpeg4_vaapi \
正如我所理解的,这些行正在启用硬件加速(代码的作者说,这可能会引发一些错误)。播放器的基本思想是将视频和音频流解码成本地代码,然后将视频帧渲染成androidbitmap,并将音频渲染成android mediaplayer。
有谁知道如何解决视频解码速度慢的问题(可能会降低视频帧的分辨率或其他什么?)我会很高兴得到任何帮助和意见。
最佳答案
奇怪的是--enable-hwaccel=h264_vaapi
连续指定了两次,但我看到它在您链接到的原始构建脚本中。
dxva2是指在windows桌面计算机上可用的DirectX Video Acceleration。所以这没什么用。vaapi是指Video Acceleration API。我本想说它只针对unix桌面,但wikipedia页面声明它也可以针对android。
解码速度慢的可能原因是正在采用软件解码路径。你解码的是哪种类型的视频数据,在什么样的配置文件和分辨率下?一般来说,最好利用android媒体设施,比如MediaPlayer进行播放,除非你正在做一些特别的事情。你可能已经研究过这个选项,也许你发现你不能获得原始的androidbitmap(我对android开发不是太熟悉)。
我正在查找ffmpeg的vaapi接口和vaapi->android代码的源代码。如果您已经为android编译了ffmpeg,它是如何访问vaapi的?你也有为android编译的vaapi吗?我有一种感觉,vaapi不是android的一个库存组件(但我也不确定),所以您可能需要确保vaapi已经就位。那么,您是否正确地要求ffmpeg使用vaapi?我不认为ffmpeg会自动检测到这一点。