写在前面
忙忙碌碌一个多月没怎么写过文章了,今天来写写Android中的视频,直播播放,斗猫项目里用到直播流,坑踩了不少,可算是填上了.以下代码已上传至:https://github.com/Xxxxxxyk/PlayVideo
开始
视频分为本地视频和视频流,本地视频即为已经下载好到本地的视频,常见格式为MP4,WMV,AVI等格式,视频流多见于直播中,常见格式为RTSP流媒体,RTMP流,m3u8 流媒体,MMS 流,斗猫中用的直播视频是抓的斗鱼APP的包,为m3u8流媒体.
本地视频
首先先来试一下播放本地视频,这个项目就不用Kotlin写了,回顾下Java.可选的方案有3种:1,使用系统自带的视频播放器,这个方法比较简单,但是不接受定制.2使用系统自带的VideoView进行视频播放,但会有宽高问题.3则是直接使用第三方库进行播放,这种相对较为简单一些,都来尝试一下.
使用系统自带播放器
随便找了首歌的MV,开始瞎搞一下.
Intent view = new Intent(Intent.ACTION_VIEW);
view.setDataAndType(Config.video_uri,"video/mp4");
startActivity(view);
代码如上,运行后则会调用系统播放器进行播放,如果有多种播放器,还会要求进行选择,如图:
使用VideoView进行播放
mVv_paly = findViewById(R.id.vv_video);
mVv_paly.setMediaController(new MediaController(this));
mVv_paly.setVideoURI(Config.video_uri);
mVv_paly.start();
mVv_paly.requestFocus();
同样可以进行视频播放,但是一定要切记处理权限问题,需要获取存储权限.
使用第三方播放器
此处引入一个比较简单但是非常强大的第三方播放器,节操播放器
implementation 'cn.jzvd:jiaozivideoplayer:6.2.9'
播放视频非常简单,只有两句代码:
JZVideoPlayerStandard jzVideoPlayerStandard = findViewById(R.id.videoplayer);
jzVideoPlayerStandard.setUp(Config.video_uri.toString(), JZVideoPlayerStandard.SCREEN_WINDOW_FULLSCREEN, "炮姐OP");
本地视频的播放基本用这三种方案可以完美的解决了,第三种其实更好一些,因为不用再自己实现标题栏,进度条,手指滑动左右调节亮度和音量了,会更节省时间一点.
网络直播视频
RTSP流媒体
首先先要搭建一个RTSP的直播流,这里使用VLC进行搭建,具体教程网上一抓一大把,不再赘述.
配置好后下载并导入Vitamio,之后就可以写代码了.
Vitamio.isInitialized(this);
mVv_player = findViewById(R.id.vv_player);
mVv_player.setVideoPath(Config.RTSP_URL);
mVv_player.setMediaController(new MediaController(this));
mVv_player.requestFocus();
此处有一个坑,当播放视频是出现如下提示,可优先检查一下,是不是没有进行初始化Vitamio.isInitialized(this);
Expecting an absolute path of the library: libstlport_shared.so
因为框架很大,所以看到持续的黑屏不要惊慌,稍等一下视频就出来了.
M3U8流媒体
M38U流媒体的播放与RTSP流媒体的播放类似,只需要将VideoPath替换掉即可,此处提供一个M38U的测试连接,可以自行测试.
http://playertest.longtailvideo.com/adaptive/bipbop/gear4/prog_index.m3u8
结尾
依旧是一首歌