android中mediaplayer,android.media.MediaPlayer

  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。当前);

  }

android中mediaplayer,android.media.MediaPlayer