主要功能
点播:支持常见的音视频文件播放(MP4、flv、MP3 等)
示例代码
public class VodPlayerActivity extends Activity {
private static final String TAG = "LivePlayerActivity";
private String roomId = "7a97e8c7";
private String accessToken = "vhall";
private SurfaceView mSurfaceView;
private VHVodPlayer mPlayer;
private boolean mPlaying = false;
ImageView mPlayBtn;
ProgressBar mLoadingPB;
SeekBar mSeekbar;
TextView mPosView, mMaxView;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (mPlaying) {
int pos = (int) mPlayer.getPosition();
mSeekbar.setProgress(pos);
mPosView.setText(String.valueOf(pos));
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
roomId = getIntent().getStringExtra("roomid");
accessToken = getIntent().getStringExtra("token");
setContentView(R.layout.vod_layout);
mPlayBtn = (ImageView) this.findViewById(R.id.btn_play);
mLoadingPB = (ProgressBar) this.findViewById(R.id.pb_loading);
mSeekbar = (SeekBar) this.findViewById(R.id.seekbar);
mSurfaceView = (SurfaceView) this.findViewById(R.id.surfaceview);
mPosView = (TextView) this.findViewById(R.id.tv_pos);
mMaxView = (TextView) this.findViewById(R.id.tv_max);
mPlayer = new VHVodPlayer(this, mSurfaceView);
mPlayer.addListener(new MyPlayer());
mSeekbar.setOnSeekBarChangeListener(new MySeekbarListener());
handlePosition();
}
@Override
protected void onPause() {
super.onPause();
if (mPlayer != null && mPlaying)
mPlayer.pause();
}
@Override
protected void onResume() {
super.onResume();
if (mPlayer != null && mPlayer.resumeAble()) {
mPlayer.resume();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mPlayer != null)
mPlayer.release();
if (timer != null) {
timer.cancel();
timer = null;
}
}
public void play(View view) {
if (mPlaying) {
mPlayer.pause();
} else {
if (mPlayer.resumeAble())
mPlayer.resume();
else
mPlayer.start(roomId, accessToken);
}
}
class MyPlayer implements VHPlayerListener {
@Override
public void onEvent(int event, String msg) {
switch (event) {
case VHVodPlayer.EVENT_STATUS_STARTING:
mLoadingPB.setVisibility(View.VISIBLE);
break;
case VHVodPlayer.EVENT_STATUS_STARTED:
int max = (int) mPlayer.getDuration();
mSeekbar.setMax(max);
mMaxView.setText(String.valueOf(max));
mLoadingPB.setVisibility(View.GONE);
mPlaying = true;
mPlayBtn.setImageResource(R.mipmap.icon_pause_bro);
break;
case VHVodPlayer.EVENT_STATUS_STOPED:
mPlaying = false;
mPlayBtn.setImageResource(R.mipmap.icon_start_bro);
mLoadingPB.setVisibility(View.GONE);
break;
case VHVodPlayer.EVENT_STATUS_END:
mPlaying = false;
mPlayBtn.setImageResource(R.mipmap.icon_start_bro);
mLoadingPB.setVisibility(View.GONE);
break;
case VHVodPlayer.EVENT_STATUS_WH:
break;
}
}
@Override
public void onError(int errorCode, String msg) {
mPlaying = false;
mPlayBtn.setImageResource(R.mipmap.icon_start_bro);
mLoadingPB.setVisibility(View.GONE);
Toast.makeText(VodPlayerActivity.this, msg, Toast.LENGTH_SHORT).show();
}
}
class MySeekbarListener implements SeekBar.OnSeekBarChangeListener {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mPosView.setText(String.valueOf(seekBar.getProgress()));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mPlayer.seek(seekBar.getProgress());
}
}
//每秒获取一下进度
Timer timer;
private void handlePosition() {
if (timer != null)
return;
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(0);
}
}, 1000, 1000);
}
}