第一次写博客,逻辑有点乱,见谅~

Android从API16中更新对字幕追踪的支持,具体是下面几个方法。

Added in API level 16

public void addTimedTextSource (Context context, Uri uri, String mimeType)

public void addTimedTextSource (String path, String mimeType)

public void addTimedTextSource (FileDescriptor fd, long offset, long length, String mimeType)

public void addTimedTextSource (FileDescriptor fd, String mimeType)

以第二方法为例,先看下API注释:

Added in API level 16
Adds an external timed text source file. Currently supported format is SubRip with the file extension .srt, case insensitive. Note that a single external timed text source may contain multiple tracks in it. One can find the total number of available tracks using getTrackInfo() to see what additional tracks become available after this method call.

大致意思就是,MediaPlayer支持外置文件显示字幕,但是现在只支持.SRT格式。这个文件可能有多个追踪器在追踪它,可以通过调用getTrackInfo()方法来获得所有的追踪器。

TrackInfo 共有四种类型,未知,视频,音频,字幕。

Added in API level 16
  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_TIMEDTEXT = 3;

使用

在调用的时候,经常遇到这个错误:

03-29 14:42:38.675: W/System.err(21382): java.lang.RuntimeException: failure code: -38
03-29 14:42:38.675: W/System.err(21382): at android.media.MediaPlayer.invoke(MediaPlayer.java:644)
03-29 14:42:38.675: W/System.err(21382): at android.media.MediaPlayer.addTimedTextSource(MediaPlayer.java:1814)
03-29 14:42:38.675: W/System.err(21382): at android.media.MediaPlayer.addTimedTextSource(MediaPlayer.java:1778)
03-29 14:42:38.675: W/System.err(21382): at android.media.MediaPlayer.addTimedTextSource(MediaPlayer.java:1710)
03-29 14:42:38.675: W/System.err(21382): at com.demo.devin.fragment.QosDemoFragment$VideoHolder.onPrepared(QosDemoFragment.java:224)

API中告诉我们会抛这些Exception:

Added in API level 16

Throws: IOException - if the file cannot be accessed or is corrupted. IllegalArgumentException - if the mimeType is not supported. IllegalStateException - if called in an invalid state.

经过试验,在OnPrepared的时候调用没有问题!

但是只是调用这个方法是无法工作的,还需要注册响应的listener和调用selectTrack方法。

具体代码如下:(在OnPrepared回调中)

try            {                mMediaPlayer.addTimedTextSource(srtPath,                        MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);                TrackInfo[] trackInfos = mMediaPlayer.getTrackInfo();                if (trackInfos != null && trackInfos.length > 0)                {                    for (int i = 0; i < trackInfos.length; i++)                    {                        final TrackInfo info = trackInfos[i];                        Log.w(TAG, "TrackInfo: " + info.getTrackType() + " "                                + info.getLanguage());                        if (info.getTrackType() == TrackInfo.MEDIA_TRACK_TYPE_AUDIO)                        {                            // mMediaPlayer.selectTrack(i);                        }                        else if (info.getTrackType() == TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT)                        {                            mMediaPlayer.selectTrack(i);                        }                    }                }            }            catch (Exception e)            {                e.printStackTrace();            }


之后再注册的OnTimedTextListener中,会触发该回调,再配合TextView就是实现字幕了,Android已经做好了同步功能!

以上是我在播放MP4流时,可以正常工作!但是在播放M3U8流时,不能工作还是抛了RunTimeException这个异常,可能和MediaPlayer的OnPrepared机制有关。

目前还没有找到什么办法,解决这个问题....

尝试过等视频播放起来后在调用这个方法还是不行~


如果哪位已经解决了,请告诉我下,谢谢。



Added in  API level 16

更多相关文章

  1. Android 调用系统相机拍照保存以及调用系统相册的方法
  2. Android软键盘弹出时不把布局顶上去的解决方法
  3. Android全屏(包含3种隐藏顶部状态栏及标题栏和一种隐藏Android 4.
  4. Android两种播放视频的方法(SurfaceView、MediaPlayer、SeekBar)
  5. android去掉标题的方法
  6. Android 4.0 HttpUrlConnection的getInputStream()方法总是返回
  7. eclipse中安装android ADT插件及无法下载ADT解决方法
  8. Android BaseWebLoad组件使用及与js方法互调

随机推荐

  1. Android(安卓)ProgressDialog的使用
  2. Linux profilers: oprofile vs. ftrace (
  3. Android(安卓)曲线绘制Demo
  4. android中如何给button加圆角
  5. Android(安卓)Button Maker(在线生成andro
  6. Android(安卓)Activity 常用功能设置(全屏
  7. AndroidManifest.xml的Service元素 andro
  8. Android(安卓)图像处理资料
  9. Android(安卓)File文件操作
  10. Android(安卓)获取控件宽高