Skip to content

AVPlayer

贾俊辉 edited this page Jun 8, 2018 · 1 revision

如果您有播放音乐的需求,可以直接使用AVPlayer。如果是视频播放,使用AVPlayer的话您需要自行处理Surface或者SurfaceHolder的关联,如果非必须,请尽量使用BaseVideoView或者RelationAssist。

使用AVPlayer播放音乐

  • 初始化AVPlayer对象
//使用配置的解码器
AVPlayer player = new AVPlayer();
//使用指定解码器创建AVPlayer对象,您需要传入解码器的id值
AVPlayer player = new AVPlayer(id);
  • 设置监听器、数据提供者(根据自己需要自行设置)
player.setOnPlayerEventListener(...);
player.setOnErrorEventListener(...);
player.setOnProviderListener(...);
player.setDataProvider(new XXXDataProvider())
  • 设置数据启动播放
player.setDataSource(new DataSource("http://url..."))
player.start();
//或者指定历史点播放
//例如在15秒处起播
player.start(15000);

方法释义

//切换解码器,此方法的调用会重新创建内部解码器示例。切换之后的操作您需要自行处理,比如重新设置数据启动播放。
//该方法的返回值为boolean类型,如果为true即切换成功,如果为false则切换失败,
//有两种可能的失败原因:
//一是您传入的要切换的解码器id和当前使用的id为同一个(即不需要重新创建解码器示例)
//二是你传入的解码器id值非法找不到您配置的解码器。
//所以,在使用时尽量先判断下是否切换成功,如果切换成功,再进行后续操作。
boolean switchDecoder(int decoderPlanId);

------------------------------------------------------------

//该方法为附加预留方法,如果您引入的解码器需要一些配置项或者一些数据,可通过此方法进行映射传递。
//该方法的调用最终会映射到解码器中的option方法,您可根据需要自行处理。
void option(int code, Bundle bundle);

------------------------------------------------------------

//该方法为定时器代理设置,默认开启了定时器代理。您可以在OnPlayerEventListener中通过回调方法中的eventCode
//进行过滤PLAYER_EVENT_ON_TIMER_UPDATE,code为PLAYER_EVENT_ON_TIMER_UPDATE的事件每秒回调一次,并将当前
//播放进度和总时长存在Bundle中,您可从Bundle中取出。
//int currentPosition = bundle.getInt(EventKey.INT_ARG1);
//int duration = bundle.getInt(EventKey.INT_ARG2);
//如果您不需要,可调用此方法传入false进行关闭即可。
void setUseTimerProxy(boolean useTimerProxy);

------------------------------------------------------------

//调用此方法进行重播,前提是您已经设置过数据了。
//可传入起播事件点,单位毫秒
void rePlay(int msc);

------------------------------------------------------------

//设置音量
void setVolume(float left, float right);

------------------------------------------------------------

//设置播放速度(如果您接入的解码器支持有效,否则无效)
void setSpeed(float speed);

------------------------------------------------------------

//获取播放器的状态,有一下几种值
//int STATE_END = -2;
//int STATE_ERROR = -1;
//int STATE_IDLE = 0;
//int STATE_INITIALIZED = 1;
//int STATE_PREPARED = 2;
//int STATE_STARTED = 3;
//int STATE_PAUSED = 4;
//int STATE_STOPPED = 5;
//int STATE_PLAYBACK_COMPLETE = 6;
int getState();

------------------------------------------------------------