打开源代码jsb-videoplayer.js,定位到如下代码:
_p.play = function () {
let video = this._video;
if (!video || !this._visible || this._playing) return;
video.play();
this._playing = true;
};
可以明显看到调用video.play()的时候先判断_playing的值,之后强制将_playing置为true了,再看看Cocos2dxVideoView.java这个源代码,定位到如下代码:
public void start() {
if ((mCurrentState == State.PREPARED ||
mCurrentState == State.PAUSED ||
mCurrentState == State.PLAYBACK_COMPLETED) &&
mMediaPlayer != null) {
mCurrentState = State.STARTED;
mMediaPlayer.start();
this.sendEvent(EVENT_PLAYING);
}
}
从这里可以看到是否真的开启了播放是有条件判断的,所以这里就会产生了一个问题,当不在该条件里的时候在js层调用了play(),并没有开启播放,但_playing已经是true了,但下次真的可以播放的时候再调用pla(),却无济于事了,直接在js层就被拦截了
