android中mediaplayer,android.media.MediaPlayer
之前说了媒体播放器如何实现字幕显示,但是应用程序接口需要16以上。那如何系统不支持的话我们可以自己实现。
大致思想如下:
从网上获取污泥停留时间文件后(可以保存在本地/或者不保存)解析污泥停留时间文件,随后根据运动员播放不断的刷新字幕来实现同步机制。
污泥停留时间解析
网上随便下了一个电影的字幕污泥停留时间文件,
一
00:00:00,000 - 00:00:10,000
(内容空白)
.(省略若干行)
四
00:00:43,780 - 00:00:49,230
我们曾经是一个和平的智能机械种族。
5
00:00:50,070 - 00:00:52,570
但是后来战争爆发了缓冲读取器缓冲读取器=新缓冲读取器(新输入流读取器(
inputStream,CHAR _ SET));
StringBuilder builder=new StringBuilder();
字符串行=缓冲区读取器。readline();
而(行!=空)
if (isBlankString(line))
建筑商。追加(“@”);
其他
生成器.追加(第 # 行);
line=缓冲读取器。readline();
返回建筑商。tostring();
循环读取文件,每次读一行,是回车空行@结尾,否则#结尾.然后把这个线以@分成数组(字符串中会出现@@这种情况注意下就可以了)
基本数组的每一项就是一个节点。然后可以通过#字符,解析id,开始时间,结束时间,数据。
最后可以在数组列表污泥停留时间中.
污泥停留时间同步
在运动员中都会有控制条,应该没人会用系统的视频视图吧。这样的话就需要实现控制条当前时间的显示,搜索栏同步等等。
基本思想就是有一个线程不断的刷新当前状态更新UI,这样的话我们就能拿到实时的播放信息来控制字幕的同步了。
Srt srt=findRightSrt(percent,currentPosition,duration);
if (srt==null mLogger!=空)
mLogger.log(找不到正确的“srt.”);
int id=SRT。getid();
int开始时间=SRT。get start time();
中间结束时间=SRT。getendtime();
如果(id!=msrthelper。id当前位置=开始时间
当前位置=结束时间)
mSrtHelper.id=id
设置字幕(SRT。get data());
else if (mSrtHelper.id==id
(当前位置开始时间当前位置结束时间))
设置字幕(空白);
如果(mLogger!=空)
米洛格。日志(SRT);
}
SRT=MSR helper。当前msrthelper。SRT尺寸?mSrtList。获取(msrthelper。current):null;
mSrtHelper.hasFoundSrt=true
mNextSrt=getNextSrt(msrthelper。当前);//保存下个污泥停留时间文件
else if (mNextSrt!=空)
if(当前位置=mnextsrt。getstart time())//当前时间已经到超过下个srt,更新当前污泥停留时间和nextSrt
mSrtHelper.current
mNextSrt=getNextSrt(msrthelper。当前);
else if(currentPosition mnextsrt。getendtime())
mSrtHelper.hasFoundSrt=false
返回msrt列表。获取(msrthelper。当前);
}