写在前面

忙忙碌碌一个多月没怎么写过文章了,今天来写写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);

代码如上,运行后则会调用系统播放器进行播放,如果有多种播放器,还会要求进行选择,如图:

1d728bff2404

系统播放器.png

使用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();

同样可以进行视频播放,但是一定要切记处理权限问题,需要获取存储权限.

1d728bff2404

VideoView.png

使用第三方播放器

此处引入一个比较简单但是非常强大的第三方播放器,节操播放器

implementation 'cn.jzvd:jiaozivideoplayer:6.2.9'

播放视频非常简单,只有两句代码:

JZVideoPlayerStandard jzVideoPlayerStandard = findViewById(R.id.videoplayer);

jzVideoPlayerStandard.setUp(Config.video_uri.toString(), JZVideoPlayerStandard.SCREEN_WINDOW_FULLSCREEN, "炮姐OP");

1d728bff2404

微信图片_20180507092923.jpg

本地视频的播放基本用这三种方案可以完美的解决了,第三种其实更好一些,因为不用再自己实现标题栏,进度条,手指滑动左右调节亮度和音量了,会更节省时间一点.

网络直播视频

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的测试连接,可以自行测试.

结尾

依旧是一首歌

1d728bff2404

TIM截图20180507154130.png

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐