android播放网络或者本地视频(截取某帧做封面)VideoView原生控件
16lz
2021-01-26
使用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; }
这样就能获取到视频中的某一帧做封面了!!! 但是这段代码非常的耗时,我能想到的暂时的办法是开个线程放进去, 没有什么好的办法, 有能解决的麻烦告知一下,谢谢了!
更多相关文章
- Android邪门歪道
- Android(安卓)API之ImageView.ScaleType代码演示
- Bitmap,byte流,drawable之相互转换
- Android(安卓)Studio 使用lint工具进行代码优化
- Android(安卓)自定义选项卡按钮和选项卡位置
- APK反破解之一:Android(安卓)Java混淆(ProGuard)
- Android的Fragment中onActivityResult不被调用的终极解决方案
- 自定义Android视频播放器 - 自定义SurfaceView
- Android(安卓)studio 中Activity以及EditText的一些用法和问题