很多优酷网的视频,都是被分拆成多段的。最近做项目,需要在线播放分段和下载视频。播放分段视频,其实就是常说的m3u的概念,把各个分段的地址做成一个播放列表,播放器把所有分段当作一个完整的视频。在播放过程中,让用户感觉不到整个视频有分段的痕迹。话说干嘛要把视频拆分成多段呢,网上有文章说是为了节省缓冲时的流量,避免不必要的缓冲。
onStart()
onSuccess()
onFinish()
onProgress
在下载过程中,最重要的就是onProgress 方法,它跟踪下载进度。我们通常看到的下载进度条,下载速度,都是通过这个回调方法把数据展示到界面的。而现在我该如何做呢。例如我有18个文件分段。我在下载第一个文件的时候,我根本不知道总的文件多大。这一点倒好解决,我不可能请求18个分段的文件大小,而是让服务器从数据库返回的数据实体时就告诉我总体大小,如果没有,则粗略按照每个分段为同样大小来处理进度。在每个分段下载完成后,保存当前下载的总进度。在onProgress中,current指的是当前分段下载的字节数,count是当前分段的总字节数。所以计算进度时,需要加上已经下载完成的分段。每下载完一个分段,计算好下载进度保存下来,在onSuccess方法里,开启执行下一个分段,到最后一个分段执行完成后,才算整体下载完成。如果在onProgress里将进度准确显示出来,那下载时用户时感觉不到在下载多段视频的。
下载完成后,最好不要要将多段视频合并,因为文件在合并时容易出现错乱的现象,应该采取分段播放的思路。
这篇博客写于两年了,现在把它从eoe迁移到csdn上来,因为eoe的博客系统已经销声匿迹了。