您的位置:首页 > 理论基础 > 计算机网络

android播放网络或者本地视频(截取某帧做封面)VideoView原生控件

2017-07-25 11:06 961 查看
使用android原生控件VideoView播放本地或者网络视频, 实现如下:

XML文件中:

<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>


Jave代码中:

videoView = (VideoView)this.findViewById(R.id.videoView );

//本地的视频  需要在手机SD卡根目录添加一个 fl1234.mp4 视频
String videoUrl1 = Environment.getExternalStorageDirectory().getPath()+"/fl1234.mp4" ;
//网络视频
String videoUrl2 = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" ;
Uri uri = Uri.parse( videoUrl2 );
//设置视频控制器
videoView.setMediaController(new MediaController(this));
//播放完成回调
videoView.setOnCompletionListener( new MyPlayerOnCompletionListener());
//设置视频路径
videoView.setVideoURI(uri);
//开始播放视频
videoView.start();

class MyPlayerOnCompletionListener implements MediaPlayer.OnCompletionListener {

@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText( MainActivity.this, "播放完成了", Toast.LENGTH_SHORT).show();
}
}


好了,运行吧

PS:不要忘了加权限

有的时候需要显示网络视频的某一帧做封面,接下来上实现代码:

public Bitmap getNetVideoBitmap(String videoUrl) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
//根据url获取缩略图
retriever.setDataSource(videoUrl, new HashMap());
//获得第一帧图片
bitmap = retriever.getFrameAtTime();
imageView.setImageBitmap(bitmap);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
retriever.release();
}
return bitmap;
}


这样就能获取到视频中的某一帧做封面了!!! 但是这段代码非常的耗时,我能想到的暂时的办法是开个线程放进去, 没有什么好的办法, 有能解决的麻烦告知一下,谢谢了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: