平台
全志H6 + Android 9
问题
使用MediaPlayer编写的视频播放器, 在RK平台上测试和低于Android 9 或手机运行都是正常的, H6升级到Android 9后, 播放器出现图像快进的问题, 50秒的视频, 不到3秒就跳完了.
在后续测试中发现, 同样的视频, 用系统的播放器播放, 可以正常播放.
测试代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextureView android:id="@+id/texture"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
TextureView texture = (TextureView)findViewById(R.id.texture);
MediaPlayer player = MediaPlayer.create(this, Uri.fromFile(f));
/*if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
float speed = player.getPlaybackParams().getSpeed();
Logger.d(TAG, "playWithMediaPlayer speed = " + speed);
PlaybackParams par = player.getPlaybackParams();
par.setSpeed(0.1f);
player.setPlaybackParams(par);
}*/
player.setSurface(new Surface(texture.getSurfaceTexture()));
player.start();
解决
原因: 使用了TextureView作为显示控件, 换成SurfaceView问题自然而然地解决了.
更深层次的原因, 手上没有系统源码, 所以, 只有全志自己知道了.
修改后代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SurfaceView android:id="@+id/sv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
SurfaceView sv = (SurfaceView)findViewById(R.id.sv);
MediaPlayer player = MediaPlayer.create(this, Uri.fromFile(f));
player.setDisplay(sv.getHolder());
player.start();