code: function play() {
  	// // console.log('play');
  	const video = this;
  	const player = video[IIV];
  
  	// If it's fullscreen, use the native player
  	if (video.webkitDisplayingFullscreen) {
  		video[IIVPlay]();
  		return;
  	}
  
  	if (player.driver.src !== 'data:' && player.driver.src !== video.src) {
  		// // console.log('src changed on play', video.src);
  		setTime(video, 0, true);
  		player.driver.src = video.src;
  	}
  
  	if (!video.paused) {
  		return;
  	}
  	player.paused = false;
  
  	if (video.buffered.length === 0) {
  		// .load() causes the emptied event
  		// the alternative is .play()+.pause() but that triggers play/pause events, even worse
  		// possibly the alternative is preventing this event only once
  		video.load();
  	}
  
  	player.driver.play();
  	player.updater.start();
  
  	if (!player.hasAudio) {
  		dispatchEventAsync(video, 'play');
  		if (player.video.readyState >= player.video.HAVE_ENOUGH_DATA) {
  			// // console.log('onplay');
  			dispatchEventAsync(video, 'playing');
  		}
  	}
  }
docs: METHODS