在 Android TV 上解码性能有限,有完整的日志,和一切需要协助的找我
Describe the bug
在 Android TV 具体是 小米电视S Pro 75 播放 4K HEVC 编码 SDR 视频,随着码率上升出现卡顿现象。 大概 2 MBit/s 以上就能明显察觉和原生的 Flutter video_player 的差别。
Expected behavior
期望最好能和 video_player 相近的性能表现。至少能播放 8 MBit/s 的视频。
Log
这个是无参数 fvp.registerWith() 的日志 默认启动.log
另外测试过,'video.decoders': ['mediacodec'], 参数的情况,感觉比默认情况稍微好一点点。 另外如果不使用 fastSeek 只用普通 seek 的话偶尔会有快进后视频卡住不动,只有音频播放的情况。
感谢作者做出这么好用的插件,在 Windows,Linux,安卓手机上都表现的很好,希望能给我任何可能有帮助的建议,我愿意实施并且测试反馈,谢谢。
I/flutter ( 5233): mdk.FINE: 14:37:15.781: 0xb8999400>847650 00:14:04.7/00:47:03 cache 0v 2.3s/43559KB 225192KB/s |-2949|>4ms update 55.9ms 17.4fps draw 2/4 +29ms gpu 44562/58097us
有在硬解,渲染一帧gpu耗时大概45ms,渲染帧率上不去。video_player官方实现是直接输出到surface,我这边是输出到surface再用opengl渲染了一次,性能会降。可以试试
registerWith(options: {'tunnel': true});
这样就不经过opengl,不过通常会黑屏,因为有些步骤对顺序有要求我在flutter这边还没做处理。
你也可以用我写的另外一个简单的例子对比,把这行 https://github.com/wang-bin/mdk-android/blob/master/sdk/src/main/cpp/MDKPlayerJNI.cpp#L14
DECODE_TO_SURFACEVIEW改成1和0看看有什么区别
对了,你可以直接装个mpv-android,高级设置的配置里加vo=mediacodec_embed就是不用opengl,否则用opengl,你可以对比下性能
使用 registerWith(options: {'tunnel': true}); 确实黑屏了,无法判断是否卡顿。日志如下:
使用 mpv-android 测试,无论加不加 vo=mediacodec_embed 都不卡顿,加了 vo=mediacodec_embed 视频占全屏,比例不对且字幕不显示,性能统计覆盖层也不显示了。
使用 mdk-android 测试 默认情况下 DECODE_TO_SURFACEVIEW 为 0,mPlayer.setMedia 给 url 后大概 1s 多应用闪退,多次测试均如此,日志如下:
DECODE_TO_SURFACEVIEW 改为 1,播放时候出现奇怪的现象,就是感觉是在最近几帧之间来回跳画面不稳定,无法观看,整体是有前进,但是很慢,音频正常。日志如下:
使用 mpv-android 测试,无论加不加 vo=mediacodec_embed 都不卡顿。
你用media-kit 试试看,应该也不用改什么代码,把fvp删了,这个是基于mpv的。全屏是正常的,要靠调整view大小。不过默认vo可能是mediacodec_embed
加了 vo=mediacodec_embed 视频占全屏,比例不对且字幕不显示,性能统计覆盖层也不显示了
因为直接解码到view上去了,显示的内容完全没法控制
使用 mdk-android 测试 默认情况下 DECODE_TO_SURFACEVIEW 为 0,mPlayer.setMedia 给 url 后大概 1s 多应用闪退,多次测试均如此,日志如下
得用最新的libmdk, 最近刚修的一个着色器错误。可以从sourceforge 或最新的github action的artifacts下载。
DECODE_TO_SURFACEVIEW 改为 1,播放时候出现奇怪的现象,就是感觉是在最近几帧之间来回跳画面不稳定,无法观看,整体是有前进,但是很慢,音频正常
你录段视频看看
media-kit 我尝试过,在 Android 手机和 Windows 端的 CPU 占用明显高于 fvp,GPU 占用则相反。对于这台 Android TV 来说,使用 mediacodec_embed 是能流程播放的,默认的模式则卡顿比 fvp 还严重。
使用了最新的 libmdk 测试了一下,无论 DECODE_TO_SURFACEVIEW 为 0 还是 1,都是一样的跳跃表现,录屏如下:
里面播放的视频是 https://download.blender.org/demo/movies/Sintel.2010.1080p.mkv
里面的 HW 和 HDR 选项都切换过,效果一致。
跳跃手机上复现不了
跳跃手机上复现不了
用 fvp 嵌入倒是没有跳跃问题,现在还是性能问题。你用低端设备加稍微高点的码率的视频应该能复现。