Android使用VideoView播放视频文件及添加WebVTT字幕

  1. 设置播放源,支持本地或者网络资源(如:HLS、RTSP):
    videoView.setVideoURI(uri)

  2. 添加播放控制器MediaController:可选
    MediaController controller = new MediaController(this);
    controller.setMediaPlayer(this);
    videoView.setMediaController(controller);

  3. 添加WebVTT格式的字幕:可选
    MediaFormat mediaFormat = MediaFormat.createSubtitleFormat(MediaFormat.MIMETYPE_TEXT_VTT, Locale.getDefault().getLanguage());
    mediaFormat.setInteger(MediaFormat.KEY_IS_FORCED_SUBTITLE, 1);
    videoView.addSubtitleSource(inputStream, mediaFormat);

  4. 完整demo
package com.example.lance.mediaplayer;

import android.content.res.AssetManager;
import android.media.MediaFormat;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;

public class MainActivity extends AppCompatActivity implements MediaController.MediaPlayerControl {
    VideoView videoView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        videoView = (VideoView) findViewById(R.id.video_view);
        Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.test);
        videoView.setVideoURI(uri);
        //添加播放控制器
        MediaController controller = new MediaController(this);
        controller.setMediaPlayer(this);
        videoView.setMediaController(controller);
        //添加字幕
        InputStream inputStream = null;
        try {
            AssetManager assetManager = getAssets();
            inputStream = assetManager.open("subtitle.vtt");
            MediaFormat mediaFormat = MediaFormat.createSubtitleFormat(MediaFormat.MIMETYPE_TEXT_VTT, Locale.getDefault().getLanguage());
            mediaFormat.setInteger(MediaFormat.KEY_IS_FORCED_SUBTITLE, 1);
            videoView.addSubtitleSource(inputStream, mediaFormat);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(inputStream != null){
                //todo
            }
        }
        videoView.start();
    }

    @Override
    protected void onDestroy() {
        videoView.stopPlayback();
        super.onDestroy();
    }

    @Override
    public void start() {
        videoView.start();
    }

    @Override
    public void pause() {
        videoView.pause();
    }

    @Override
    public int getDuration() {
        return videoView.getDuration();
    }

    @Override
    public int getCurrentPosition() {
        return videoView.getCurrentPosition();
    }

    @Override
    public void seekTo(int pos) {
        videoView.seekTo(pos);
    }

    @Override
    public boolean isPlaying() {
        return videoView.isPlaying();
    }

    @Override
    public int getBufferPercentage() {
        return 0;
    }

    @Override
    public boolean canPause() {
        return false;
    }

    @Override
    public boolean canSeekBackward() {
        return false;
    }

    @Override
    public boolean canSeekForward() {
        return false;
    }

    @Override
    public int getAudioSessionId() {
        return 0;
    }
}


subtitle.vtt

WEBVTT

00:00:01.000 --> 00:00:03.000
Good day everyone

00:00:04.000 --> 00:00:07.000
my name is John Smith

00:00:08.000 --> 00:00:10.000
test by lance


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值