视频播放-VideoVIew,Vitamio
Posted Tears_fg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视频播放-VideoVIew,Vitamio相关的知识,希望对你有一定的参考价值。
-
播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView类来实现的。这个
类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器。
VideoView的用法和 MediaPlayer 也比较类似(不同点在于播放视频需要UI控件,播放音乐只需要借助MediaPlayer对象)VideoView,用于播放一段视频媒体,它继承了SurfaceView,位于"android.widget.VideoView",是一个视频控件。
- 常用监听:
- setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件。
- setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件。
- setOnPreparedListener(MediaPlayer.OnPreparedListener l)::监听视频装载完成的事件
xml布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="fanggao.qf.videoview.MainActivity"> <VideoView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="300dp" /> </RelativeLayout>
源代码:
/** * VideoView surfaceView的子类 */ public class MainActivity extends AppCompatActivity { private String url = "http://qiubai-video.qiushibaike.com/G2XQOKE9T0NKSX4E_3g.mp4"; private VideoView videoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得videoView对象 videoView = (VideoView) findViewById(R.id.video_view); //给video填充数据 videoView.setVideoPath(url); // videoView.setVideoURI(Uri.parse(path));第二种方式 //播放本地资源 // videoView.setVideoPath(new File(Environment.getExternalStorageDirectory(),"a.mp3").getPath()); /**媒体控制面版常用方法:MediaController: hide(); 隐藏MediaController; show(); 显示MediaController show(int timeout);设置MediaController显示的时间,以毫秒计算,如果设置为0则一直到调用hide()时隐藏; */ //设置媒体控制器 videoView.setMediaController(new MediaController(this));//设置该参数就有滑动条 //设置准备监听 videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { //视频播放器播放视频 mp.start(); } }); } /*videoVIew.stopPlayback()内部的方法如下, 只是将媒体播放器停止并释放资源 if (mMediaPlayer != null) { mMediaPlayer.stop(); mMediaPlayer.release(); mMediaPlayer = null; */ /*如果需要播放完毕后播放下一个视频只需要调用videoView.stopPlayback(),后再重新调用VideoVIew.setVideoPath(path)即可 * 而serfaceView 调用stop方法后将不能再播放视频*/ @Override protected void onDestroy() { //在销毁活动之前调用该方法 if(videoView != null){ //释放资源 videoView.stopPlayback(); videoView = null; } super.onDestroy(); } }
可以看出,VideoView和MediaPlayer用法上很相似,其实是因为VideoView的内部封装了MediaPlayer,使得我们可以很方便的使用它,但是VideoView 并不是一个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足,只适于播放一些游戏的片头动画,或者某个应用的视频宣传等.
另外,也有第三方的包Vitamio,帮助我们轻松的播放视频
vitamio,下载地址:https://www.vitamio.org/Download/ 下载代码即可
使用方法跟VideoView基本一致
不过需要在清单文件中注册一个没有界面的Activity,还需要初始化
下载后将vitamio当module文件导入-修改编译版本跟之前项目一致--最后当库文件导入当前项目中(Add as library)
没有页面的activity
<activity android:name="io.vov.vitamio.activity.InitActivity" android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation" android:launchMode="singleTop" android:theme="@android:style/Theme.NoTitleBar" android:windowSoftInputMode="stateAlwaysHidden"/>
xml文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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="fanggao.qf.vitamio.MainActivity"> <io.vov.vitamio.widget.VideoView android:id="@+id/videoView" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
main函数:
public class MainActivity extends AppCompatActivity { //rtmp是直播的网络协议 private String url="rtmp://live.hkstv.hk.lxdns.com/live/hks"; private VideoView vView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //注册 Vitamio.isInitialized(this); setContentView(R.layout.activity_main); vView = (VideoView) findViewById(R.id.videoView); //设置数据 vView.setVideoPath(url); //设置控制器 vView.setMediaController(new MediaController(this)); //设置预加载完成后的监听 vView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { vView.start(); } }); } @Override protected void onDestroy() { if(vView != null){ vView.stopPlayback(); vView = null; } super.onDestroy(); } }
注意:rtmp是直播的网络协议
效果:
直播中...
以上是关于视频播放-VideoVIew,Vitamio的主要内容,如果未能解决你的问题,请参考以下文章
使用 Vitamio 在 Android 中支持 Youtube 和 Vimeo 视频
android 视频开发 集成vitamio 播放rtsp m3u8 视频 有图有demo