/* * Copyright (C) 2013-2014 Bilibili * Copyright (C) 2013-2014 Zhang Rui * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package tv.danmaku.ijk.media.player; import android.annotation.TargetApi; import android.content.Context; import android.net.Uri; import android.os.Build; import android.view.Surface; import android.view.SurfaceHolder; import java.io.FileDescriptor; import java.io.IOException; import java.util.Map; import tv.danmaku.ijk.media.player.misc.IMediaDataSource; import tv.danmaku.ijk.media.player.misc.ITrackInfo; public interface IMediaPlayer { /* * Do not change these values without updating their counterparts in native */ int MEDIA_INFO_UNKNOWN = 1; int MEDIA_INFO_STARTED_AS_NEXT = 2; int MEDIA_INFO_VIDEO_RENDERING_START = 3; int MEDIA_INFO_VIDEO_TRACK_LAGGING = 700; int MEDIA_INFO_BUFFERING_START = 701; int MEDIA_INFO_BUFFERING_END = 702; int MEDIA_INFO_NETWORK_BANDWIDTH = 703; int MEDIA_INFO_BAD_INTERLEAVING = 800; int MEDIA_INFO_NOT_SEEKABLE = 801; int MEDIA_INFO_METADATA_UPDATE = 802; int MEDIA_INFO_TIMED_TEXT_ERROR = 900; int MEDIA_INFO_UNSUPPORTED_SUBTITLE = 901; int MEDIA_INFO_SUBTITLE_TIMED_OUT = 902; int MEDIA_INFO_VIDEO_ROTATION_CHANGED = 10001; int MEDIA_INFO_AUDIO_RENDERING_START = 10002; int MEDIA_INFO_AUDIO_DECODED_START = 10003; int MEDIA_INFO_VIDEO_DECODED_START = 10004; int MEDIA_INFO_OPEN_INPUT = 10005; int MEDIA_INFO_FIND_STREAM_INFO = 10006; int MEDIA_INFO_COMPONENT_OPEN = 10007; int MEDIA_INFO_VIDEO_SEEK_RENDERING_START = 10008; int MEDIA_INFO_AUDIO_SEEK_RENDERING_START = 10009; int MEDIA_INFO_MEDIA_ACCURATE_SEEK_COMPLETE = 10100; int MEDIA_ERROR_UNKNOWN = 1; int MEDIA_ERROR_SERVER_DIED = 100; int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200; int MEDIA_ERROR_IO = -1004; int MEDIA_ERROR_MALFORMED = -1007; int MEDIA_ERROR_UNSUPPORTED = -1010; int MEDIA_ERROR_TIMED_OUT = -110; void setDisplay(SurfaceHolder sh); void setDataSource(Context context, Uri uri) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException; @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) void setDataSource(Context context, Uri uri, Map headers) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException; void setDataSource(FileDescriptor fd) throws IOException, IllegalArgumentException, IllegalStateException; void setDataSource(String path) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException; String getDataSource(); void prepareAsync() throws IllegalStateException; void start() throws IllegalStateException; void stop() throws IllegalStateException; void pause() throws IllegalStateException; void setScreenOnWhilePlaying(boolean screenOn); int getVideoWidth(); int getVideoHeight(); boolean isPlaying(); void seekTo(long msec) throws IllegalStateException; long getCurrentPosition(); long getDuration(); void release(); void reset(); void setVolume(float leftVolume, float rightVolume); int getAudioSessionId(); MediaInfo getMediaInfo(); @SuppressWarnings("EmptyMethod") @Deprecated void setLogEnabled(boolean enable); @Deprecated boolean isPlayable(); void setOnPreparedListener(OnPreparedListener listener); void setOnCompletionListener(OnCompletionListener listener); void setOnBufferingUpdateListener( OnBufferingUpdateListener listener); void setOnSeekCompleteListener( OnSeekCompleteListener listener); void setOnVideoSizeChangedListener( OnVideoSizeChangedListener listener); void setOnErrorListener(OnErrorListener listener); void setOnInfoListener(OnInfoListener listener); void setOnTimedTextListener(OnTimedTextListener listener); /*-------------------- * Listeners */ interface OnPreparedListener { void onPrepared(IMediaPlayer mp); } interface OnCompletionListener { void onCompletion(IMediaPlayer mp); } interface OnBufferingUpdateListener { void onBufferingUpdate(IMediaPlayer mp, int percent); } interface OnSeekCompleteListener { void onSeekComplete(IMediaPlayer mp); } interface OnVideoSizeChangedListener { void onVideoSizeChanged(IMediaPlayer mp, int width, int height, int sar_num, int sar_den); } interface OnErrorListener { boolean onError(IMediaPlayer mp, int what, int extra); } interface OnInfoListener { boolean onInfo(IMediaPlayer mp, int what, int extra); } interface OnTimedTextListener { void onTimedText(IMediaPlayer mp, IjkTimedText text); } /*-------------------- * Optional */ void setAudioStreamType(int streamtype); @Deprecated void setKeepInBackground(boolean keepInBackground); int getVideoSarNum(); int getVideoSarDen(); @Deprecated void setWakeMode(Context context, int mode); void setLooping(boolean looping); boolean isLooping(); /*-------------------- * AndroidMediaPlayer: JELLY_BEAN */ ITrackInfo[] getTrackInfo(); /*-------------------- * AndroidMediaPlayer: ICE_CREAM_SANDWICH: */ void setSurface(Surface surface); /*-------------------- * AndroidMediaPlayer: M: */ void setDataSource(IMediaDataSource mediaDataSource); }