您的位置:首页 > 其它

使用IjkMediaPlayer结合surface

2017-12-20 11:18 295 查看
使用IjkMediaPlayer集合surfaceView播放视频,自己写的播放和暂停按钮



导入依赖

/*ijkPlayer*/
// required, enough for most devices.
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.7.8.1'
compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.7.8.1'
// Other ABIs: optional
compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.7.8.1'
compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.7.8.1'
// ExoPlayer as IMediaPlayer: optional, experimental
compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.7.8.1'

清单文件中加入权限
<uses-permission android:name="android.permission.INTERNET" />布局文件中
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3">
<SurfaceView
android:id="@+id/viedo_surface"
android:layout_width="match_parent"
android:layout_height="300dp" />

<Button
android:id="@+id/start"
android:layout_alignBottom="@+id/viedo_surface"
android:text="播放"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_alignParentRight="true"
android:id="@+id/pause"
android:layout_alignBottom="@+id/viedo_surface"
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>代码
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {

@BindView(R.id.viedo_surface)
SurfaceView mSurfaceView;
@BindView(R.id.start)
Button start;
@BindView(R.id.pause)
Button pause;
private IjkMediaPlayer mPlayer;

boolean isPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);

isPlay = false;
pause.setEnabled(false);
mSurfaceView.getHolder().addCallback(this);
initPlayer();
}

private void initPlayer() {
IjkMediaPlayer.loadLibrariesOnce(null);
IjkMediaPlayer.native_profileBegin("libijkplayer.so");

mPlayer = new IjkMediaPlayer();
/* try {
//http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4
mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");
} catch (IOException e) {
e.printStackTrace();
}
mPlayer.prepareAsync();
mPlayer.start();*/
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
mPlayer.setDisplay(holder);
}

@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

}

@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

}

@OnClick({R.id.start, R.id.pause})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.start:
mPlayer.reset();
try {
mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");//读取视频文件地址
mPlayer.prepareAsync(); //预加载视频
mPlayer.setDisplay(mSurfaceView.getHolder()); //将视频画面输出到surface上
mPlayer.start(); //开始播放
pause.setText("暂停"); //pause此时为暂停
pause.setEnabled(true); //pause按钮此时可用
isPlay = true;
}catch (IOException e){
Toast.makeText(MainActivity.this,"发生错误",Toast.LENGTH_LONG).show();
}
break;
case R.id.pause://点击暂停时候 如果正在播放 就显示继续按钮

if (isPlay == true) {
pause.setText("继续");
mPlayer.pause();
isPlay = false;
} else {
mPlayer.start();
pause.setText("暂停");
isPlay = true;
}
break;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: