我从这里为我的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 \
我已经理解这些行正在启用hw加速(该代码的作者说这会引起一些错误)。播放器的基本思想是以本机代码解码视频和音频流,然后将视频帧渲染到AndroidBitmap中,并将音频渲染到Android MediaPlayer中。 有谁知道如何解决慢视频解码的问题(可能降低视频帧分辨率或其他?)我会很高兴任何帮助和想法。
答案 0 :(得分:1)
奇怪,连续两次指定--enable-hwaccel=h264_vaapi
,但我发现它在您链接到的原始构建脚本中。
DXVA2是指{桌面计算机上提供的DirectX Video Acceleration。所以这对我们没有帮助。 VAAPI指的是Video Acceleration API。我打算说它只针对Unix桌面,但维基百科页面说明它也可以针对Android。
解码速度慢的可能原因是正在采用软件解码路径。您正在解码什么类型的视频数据,以及什么样的配置文件和分辨率?通常,最好利用Android媒体工具(例如MediaPlayer)进行播放,除非您正在做一些特别的事情。你可能已经研究过这个选项,也许你发现你无法获得原始的AndroidBitmaps(我对Android开发不太熟悉)。
我正在查看FFmpeg的VAAPI界面和VAAPI-> Android代码的来源。如果您为Android编译了FFmpeg,它如何访问VAAPI?你有为Android编译的VAAPI吗?我有一种感觉,VAAPI不是Android的库存组件(但同样,我不确定),所以你可能需要确保VAAPI到位。那么,你是否正确地要求FFmpeg使用VAAPI?我认为FFmpeg不会自动检测到这一点。