近期项目出了个新需求,类似微信10秒小视频的上传和发布。

要实现这个需求需要满足三个点要点:

1.有一个相册,并且可以选择视频。

2.需要压缩视频。

3.需要播放视频。

对于1. 我们本身就继承了PictureSelector 点击打开链接,但是我们的需求需要将源码下载下来修改才能解决问题。

对于2. 压缩视频在网上找了下,现在使用的是small-video-record,这个库压缩10秒的本地视频需要11秒到15秒之间。体积可以从20m压缩到6M到8M。这个之后可以在单独研究研究鲁班,FFmpeg。

对于3. 播放视频首先能想到的必然是videoView 因为简单,不需要太复杂的调用。但是在使用的过程中遇到了比较重要的几个问题:

(3.1)视频在播放网络视频的之前的缓冲时间比较长(2秒到三秒)。

(3.2)在视频播放页面,分享到微信扣扣登第三方平台,再重新回到视频播放页的时候,视频在Android  版本比较高,性能比较好的手机上会有一秒到两秒的卡顿,在android 版本比较低或者性能不高的手机上会卡住,不会 继续播放,有的甚至直接为黑屏。

(3.3)在android  4.4的手机上mp4格式的网络视频,有的全部无法播放。

针对以上3.1和3.3因为是原生的VideoView 自己处理的只是简单的播放处理没有做过于复杂的封装,所以无法避免。如果要解决这两点问题,那最简单的就是更换一个播放器,推荐使用B站的IJkVideoPlayer,这样会使得3.1 和3.3 的问题得到较大的解决。

针对3.2.网站上也有很多的处理方法(但是好像不起什么作用。。。),这个因为我用的是videoview的方法调用有错(网上大部分的调用模板。。。),我的错误调用方法是在播放页面的onPause方法中记录下当时videoView的进度,然后在onResume中判断进度是否 大于-1(因为默认值是-1)来调用方法mVideoView.sart() 和mVideoView.seekTo(mCurrentPosition),因为方法调用的不对,所以会出现这个问题,我们可以把记录当前的位置mCurrentPositjion这一步去掉,直接在onResume()方法中调用mVideoView.resume()就可以解决3.2所述的问题。

就到这里,希望能帮到有需要的童鞋。