protected long skipBytes(long bytes) throws BasicPlayerException
	{
		long totalSkipped = 0;
		if (m_dataSource instanceof File)
		{
			log.info("Bytes to skip : " + bytes);
			int previousStatus = m_status;
			m_status = SEEKING;
			long skipped = 0;
			try
			{
				synchronized (m_audioInputStream)
				{
					notifyEvent(BasicPlayerEvent.SEEKING, getEncodedStreamPosition(), -1, null);
					initAudioInputStream();
					if (m_audioInputStream != null)
					{
						// Loop until bytes are really skipped.
						while (totalSkipped < (bytes - SKIP_INACCURACY_SIZE))
						{
							skipped = m_audioInputStream.skip(bytes - totalSkipped);
							if (skipped == 0) break;
							totalSkipped = totalSkipped + skipped;
							log.info("Skipped : " + totalSkipped + "/" + bytes);
							if (totalSkipped == -1) throw new BasicPlayerException(BasicPlayerException.SKIPNOTSUPPORTED);
						}
					}
				}
				notifyEvent(BasicPlayerEvent.SEEKED, getEncodedStreamPosition(), -1, null);
				m_status = OPENED;
				if (previousStatus == PLAYING) startPlayback();
				else if (previousStatus == PAUSED)
				{
					startPlayback();
					pausePlayback();
				}
			}
			catch (IOException e)
			{
				throw new BasicPlayerException(e);
			}
		}
		return totalSkipped;
	}