平台
全志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();