簡單的說下一Android的幾種視頻播放功能:
1、VideoView:最簡單的視頻播放
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment.HotFragment">
<VideoView
android:id="@+id/vv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
private void initView(View v) {
VideoView videoView = v.findViewById(R.id.vv);
String uri="/storage/emulated/0/Download/APPNEWCARDEMO.mp4";
videoView.setVideoPath(uri);
videoView.start();
}
VideoView全屏:
public class SplashVideoView extends VideoView {
public SplashVideoView(Context context) {
super(context);
}
public SplashVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SplashVideoView(Context context, AttributeSet attrs, int
defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int
heightMeasureSpec) {
//我們重新計算高度
int width = getDefaultSize(0, widthMeasureSpec);
int height = getDefaultSize(0, heightMeasureSpec);
setMeasuredDimension(width, height);
}
@Override
public void
setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
super.setOnPreparedListener(l);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
}
2、SurfaceView+MediaPlayer 播放視頻:使用方式
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
private SurfaceView surfaceView;
private MediaPlayer player;
private SurfaceHolder holder;
private void initView2(View v) {
surfaceView = v.findViewById(R.id.surfaceView);
String uri="/storage/emulated/0/Download/APPNEWCARDEMO.mp4";
player = new MediaPlayer();
try {
player.setDataSource(uri);
holder=surfaceView.getHolder();
holder.addCallback(new MyCallBack());
try {
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
player.start();
player.setLooping(true);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
private class MyCallBack implements SurfaceHolder.Callback {
@Override
public void surfaceCreated(SurfaceHolder holder) {
player.setDisplay(holder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
3、TextureView+MediaPlaye 播放視頻:使用方式;
<TextureView
android:id="@+id/textureView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
private TextureView textureView;
private MediaPlayer player;
private void initView(View v) {
textureView = v.findViewById(R.id.textureView);
String uri="/storage/emulated/0/Download/APPNEWCARDEMO.mp4";
player = new MediaPlayer();
try {
player.setDataSource(uri);
textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) {
player.setSurface(new Surface(surfaceTexture));
try {
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
player.start();
player.setLooping(true);
}
});
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
以上是Android基本的視頻播放方式,有什么不同我就先不介紹了,看項目需要;
下面介紹幾種主流的視頻開源項目:
1、ExoPlyer 谷歌的開源框架,使用方式:
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
private void initializePlayer(View v) {
playerView = (v.findViewById(R.id.video_view));
// 創建帶寬
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
// 創建軌道選擇工廠
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
// 創建軌道選擇實例
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
// 創建播放器實例
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(getActivity(), trackSelector);
playerView.setPlayer(player);
// 創建加載數據的工廠
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(getActivity(), Util.getUserAgent(getActivity(), "MyApplication"), null);
// 創建資源
Uri uri = Uri.parse("/storage/emulated/0/Download/APPNEWCARDEMO.mp4");
ExtractorMediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
player.prepare(mediaSource, false, true);
player.setPlayWhenReady(true);
}
ExoPlayer項目地址:https://github.com/google/ExoPlayer
2、JiaoZiVideoPlayer 視頻播放、使用方式;
<cn.jzvd.JzvdStd
android:id="@+id/videoplayer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
JzvdStd jzvdStd = (JzvdStd) findViewById(R.id.videoplayer);
jzvdStd.setUp("http://jzvd.nathen.cn/c6e3dc12a1154626b3476d9bf3bd7266/6b56c5f0dc31428083757a45764763b0-5287d2089db37e62345123a1be272f8b.mp4"
, "視頻標題", Jzvd.SCREEN_WINDOW_NORMAL);
jzvdStd.thumbImageView.setImage("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640"); //占位圖
餃子餃子播放器開源地址:https://github.com/lipangit/JiaoZiVideoPlayer