用VideoView播放视频的话,嵌套ScrowView会有滑动的问题,所以选择用TextureView和MediaPlayer来播放网络视频。
1:给textureView添加监听,创建Surface实例,用来交给MediaPlayer
textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
//textureView可用
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
//添加集合的原因是用来区分列表中不同的surface
mSurfaces.add(new Surface(surface));
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
});
2:给点击事件用来播放网络视频
textureView.ivThumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.reset();
mPlayer.setDataSource(list.get(position).getUrl());
//让MediaPlayer和TextureView进行视频画面的结合
mPlayer.setSurface(mSurfaces.get(videoPosition));
//设置监听
mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
//开始播放后隐藏图片,防止空白情况发生
ivThumbnail.setVisibility(View.GONE);
}
});
mPlayer.setScreenOnWhilePlaying(true);//在视频播放的时候保持屏幕的高亮
//异步准备
mPlayer.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
}
});
3:完成以上两步就可以播放视频了,最后是获取缩略图
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
int kind = MediaStore.Video.Thumbnails.MINI_KIND;
if (Build.VERSION.SDK_INT >= 14) {
retriever.setDataSource(url, new HashMap<String, String>());
} else {
retriever.setDataSource(url);
}
Bitmap thumbnail = retriever.getFrameAtTime();
网友评论