提交 6726d10f 编写于 作者: G guoshuyu

优化Exo在切换surface时候的问题

上级 817554d9
......@@ -271,7 +271,8 @@ public abstract class GSYVideoBaseManager implements IMediaPlayer.OnPreparedList
Message msg = new Message();
msg.what = HANDLER_SETDISPLAY;
msg.obj = holder;
mMediaHandler.sendMessage(msg);
showDisplay(msg);
Debuger.printfError("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
}
@Override
......@@ -469,7 +470,6 @@ public abstract class GSYVideoBaseManager implements IMediaPlayer.OnPreparedList
initVideo(msg);
break;
case HANDLER_SETDISPLAY:
showDisplay(msg);
break;
case HANDLER_RELEASE:
if (playerManager != null) {
......
......@@ -6,9 +6,9 @@ import android.net.Uri;
import android.os.Message;
import android.view.Surface;
import com.google.android.exoplayer2.video.DummySurface;
import com.shuyu.gsyvideoplayer.model.GSYModel;
import com.shuyu.gsyvideoplayer.model.VideoOptionModel;
import com.shuyu.gsyvideoplayer.utils.Debuger;
import java.util.List;
......@@ -26,6 +26,8 @@ public class EXO2PlayerManager implements IPlayerManager {
private Surface surface;
private DummySurface dummySurface;
@Override
public IMediaPlayer getMediaPlayer() {
return mediaPlayer;
......@@ -36,6 +38,9 @@ public class EXO2PlayerManager implements IPlayerManager {
//目前EXO2在频繁的切换Surface时会可能出现 (queueBuffer: BufferQueue has been abandoned)
mediaPlayer = new IjkExo2MediaPlayer(context);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
if (dummySurface == null) {
dummySurface = DummySurface.newInstanceV17(context, false);
}
try {
mediaPlayer.setDataSource(context, Uri.parse(((GSYModel) msg.obj).getUrl()), ((GSYModel) msg.obj).getMapHeadData());
//很遗憾,EXO2的setSpeed只能在播放前生效
......@@ -53,11 +58,7 @@ public class EXO2PlayerManager implements IPlayerManager {
return;
}
if (msg.obj == null) {
mediaPlayer.setSurface(null);
if (surface != null) {
surface.release();
surface = null;
}
mediaPlayer.setSurface(dummySurface);
} else {
Surface holder = (Surface) msg.obj;
surface = holder;
......@@ -96,7 +97,12 @@ public class EXO2PlayerManager implements IPlayerManager {
@Override
public void release() {
if(mediaPlayer != null) {
mediaPlayer.setSurface(null);
mediaPlayer.release();
}
if (dummySurface != null) {
dummySurface.release();
dummySurface = null;
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册