android中mediaplayer,android.media.MediaPlayer
第一次写博客,逻辑有点乱,见谅~
机器人从API16中更新对字幕追踪的支持,具体是下面几个方法。
增加了阿尔及利亚标准级
public voidaddTimedTextSource(上下文context,Uriuri,StringmimeType)
public voidaddTimedTextSource(字符串路径,StringmimeType)
public voidaddTimedTextSource(FileDescriptorfd,long offset,long length,StringmimeType)
public voidaddTimedTextSource(文件描述符FD,StringmimeType)
以第二方法为例,先看下应用程序接口注释:
增加了阿尔及利亚标准级
添加外部定时文本源文件。当前支持的格式是带有文件扩展名的子部分.srt,不区分大小写。请注意,单个外部定时文本源可能包含多个轨道。可以使用getTrackInfo()找到可用音轨的总数,以查看在此方法调用后还有哪些音轨可用。
大致意思就是,媒体播放器支持外置文件显示字幕,但是现在只支持。污泥停留时间格式。这个文件可能有多个追踪器在追踪它,可以通过调用getTrackInfo()方法来获得所有的追踪器。
跟踪信息共有四种类型,未知,视频,音频,字幕。
增加了阿尔及利亚标准级
public static final int MEDIA _ TRACK _ TYPE _ UNKNOWN=0;
public static final int MEDIA _ TRACK _ TYPE _ VIDEO=1;
public static final int MEDIA _ TRACK _ TYPE _ AUDIO=2;
public static final int MEDIA _ TRACK _ TYPE _ timed text=3;
在调用的时候,经常遇到这个错误:
03-29 14:42:38.675:W/系统err(21382):Java。郎。运行时间异常:故障代码:-38
在安卓。媒体。媒体播放器。调用(媒体播放器。Java:644)
在安卓。媒体。媒体播放器。addtimedtextsource(媒体播放器。Java:1814年)
在安卓。媒体。媒体播放器。addtimedtextsource(媒体播放器。Java:1778年)
在安卓。媒体。媒体播放器。addtimedtextsource(媒体播放器。Java:1710年)
03-29 14:42:38.675:W/系统err(21382):在com。演示。德文。碎片。qosdemofragment $视频支架。on prepared(qosdemofragment。Java:224)
应用程序接口中告诉我们会抛这些例外情况:
增加了阿尔及利亚标准级
投掷:
IOException -如果文件无法访问或已损坏。
如果不支持mimeType,则抛出。
IllegalStateException
如果在无效状态下调用。
经过试验,在准备好的的时候调用没有问题!
但是只是调用这个方法是无法工作的,还需要注册响应的听众和调用选择曲目方法。
具体代码如下:(在准备好的回调中)
尝试
多媒体播放器。addtimedtextsource(SRT路径,
媒体播放器. MEDIA _ mime type _ TEXT _ sub rip);
track info[]track infos=mmediaplayer。gettrackinfo();
if (trackInfos!=null trackInfos.length 0)
for(int I=0;I跟踪信息长度我)
最终轨道信息info=轨道信息[I];
Log.w(TAG, TrackInfo: info.getTrackType())
信息。get语言());
如果(信息。gettracktype()==TrackInfo .媒体_轨道_类型_音频)
//mmediaplayer。选择音轨(I);
else if(信息。gettracktype()==轨道信息.MEDIA_TRACK_TYPE_TIMEDTEXT)
多媒体播放器。选择音轨(I);
捕捉(例外e)
e。printstacktrace();
}
之后再注册的OnTimedTextListener中,会触发该回调,再配合带边框的就是实现字幕了,安卓已经做好了同步功能!
以上是我在播放MP4流时,可以正常工作!但是在播放M3U8流时,不能工作还是抛了运行时异常这个异常,可能和媒体播放器的准备好的机制有关。
目前还没有找到什么办法,解决这个问题.
尝试过等视频播放起来后在调用这个方法还是不行~
如果哪位已经解决了,请告诉我下,谢谢。
添加于
应用程序接口级