android 视频播放器 加载字幕,Android 实现视频字幕Subtitle和横竖屏切换示例

系统自带的VideoView有些视频格式不支持,那么我们可以用第三方实现的VideoView替代系统的来播放视频,比较流行的有ijkplayer、vitamio。

最近有个需求就是需要给视频添加字幕,其实也挺简单的。字幕比较常用的格式是srt,实际它就是文本,把它解析出来,然后根据时间再展示就OK。还有就是实现了即使旋转按钮关闭,根据方向感应器也能做到横竖屏切换。

本文用的是系统VideoView,然后播放sd卡中的视频来作为演示(源码中带有f2.mp4和f2.srt,运行时拷贝到sd卡就行)。下面简单介绍一下源码:

MainActivity包括显示字幕和如何实现横竖屏如何切换:

public class SubtitleActivity extends Activity implements View.OnClickListener,OnTouchListener{

private VideoView videoView ;

TextView tvSrt, mCurrentTime,mTotalTime,resolution_switch,mediacontroller_file_name;

ImageView mediacontroller_play_pause,switch_screen;

private SeekBar progress_seekbar;

private AudioManager mAM;

private long totalDuration;

private boolean mShowing = true, mDragging,isResolution;

private static final int PARSE_SRT = 0;

private static final int FADE_OUT = 1;

private static final int SHOW_PROGRESS = 2;

private static final int CHANGE_VIDEOVIEW_BG = 3;

private static final int SCREEN_ORIENTATION_USER = 4;

private static final int sDefaultTimeout = 3000;

private RelativeLayout videoview_layout, mMediaController;

private ListView resolution_listview;

private boolean isPortraint = true;

private static int LockScreen = -1;// 用于记录是否关闭屏幕旋转,0为关闭1为开启

private int screenWidth,videoViewHeight;

List videopathList=new ArrayList();

Handler mHandler=new Handler(){

public void handleMessage(Message msg){

long pos;

switch (msg.what) {

case PARSE_SRT:

SrtParser.showSRT(videoView,tvSrt) ;

//每隔500ms执行一次showSRT(),根据时间匹配显示哪句字幕

mHandler.sendEmptyMessageDelayed(0, 500);

break;

case FADE_OUT:

showOrHideController();

break;

case SHOW_PROGRESS:

pos = setControllerProgress();

if (!mDragging && mShowing) {

msg = obtainMessage(SHOW_PROGRESS);

sendMessageDelayed(msg, 1000 - (pos % 1000));

}

break;

case CHANGE_VIDEOVIEW_BG:

videoView.setBackgroundColor(0x00000000);

break;

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_subtitle);

videoView = (VideoView)this.findViewById(R.id.videoView );

mAM = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

screenWidth = APPApplication.screenWidth;

videoViewHeight = screenWidth * 9 / 16;

tvSrt = (TextView)findViewById(R.id.srt);//项目中显示字幕的控件

mediacontroller_file_name= (TextView)findViewById(R.id.mediacontroller_file_name);

//String[]splitStr=Constant.videoUrl1.split("/");

//mediacontroller_file_name.setText(splitStr[splitStr.length-1]);

mTotalTime = (TextView) findViewById(R.id.mediacontroller_time_total);

mCurrentTime = (TextView) findViewById(R.id.mediacontroller_time_current);

resolution_switch = (TextView) findViewById(R.id.resolution_switch);

mediacontroller_play_pause = (ImageView) findViewById(R.id.mediacontroller_play_pause);

switch_screen = (ImageView) findViewById(R.id.switch_screen);

videoview_layout = (RelativeLayout) findViewById(R.id.videoview_layout);

mediacontroller_play_pause.setOnClickListener(this);

progress_seekbar = (SeekBar) findViewById(R.id.mediacontroller_seekbar);

videoview_layout = (RelativeLayout) findViewById(R.id.videoview_layout);

mMediaController = (RelativeLayout) findViewById(R.id.media_controller);

resolution_listview = (ListView) findViewById(R.id.resolution_listview);

resolution_switch.setOnClickListener(this);

videoView.setOnTouchListener(this);

progres

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要给视频添加字幕,可以使用 Android Studio 中的 ExoPlayer 播放器库。ExoPlayer 是由 Google 推出的一款高性能、可扩展的媒体播放器库,支持多种媒体格式和功能,包括字幕显示。 以下是实现视频添加字幕的步骤: 1. 导入 ExoPlayer 库 在 build.gradle 文件中添加以下依赖: ``` implementation 'com.google.android.exoplayer:exoplayer:2.X.X' ``` 其中,2.X.X 是 ExoPlayer 库的版本号。 2. 准备字幕文件 将字幕文件保存在应用的 assets 目录下或者其他任意位置。ExoPlayer 支持多种字幕格式,包括 SRT、TTML、WebVTT 等。 3. 创建 ExoPlayer 实例 在布局文件中添加一个 SurfaceView 或者 TextureView,用于显示视频内容。然后在 Activity 或者 Fragment 中创建 ExoPlayer 实例,并将 SurfaceView 或者 TextureView 绑定到 ExoPlayer 实例上。 ``` playerView = findViewById(R.id.player_view); player = ExoPlayerFactory.newSimpleInstance(this); playerView.setPlayer(player); ``` 4. 准备视频字幕数据源 使用 ExoPlayer 的 DataSource.Factory 类创建视频字幕的数据源,其中字幕数据源需要指定字幕文件的 URI 和格式。 ``` String videoUri = "http://example.com/video.mp4"; String subtitleUri = "file:///android_asset/subtitle.srt"; DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, "MyApp"); MediaSource videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(videoUri)); Format subtitleFormat = Format.createTextSampleFormat(null, MimeTypes.APPLICATION_SUBRIP, Format.NO_VALUE, "en"); MediaSource subtitleSource = new SingleSampleMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(subtitleUri), subtitleFormat, C.TIME_UNSET); ``` 5. 将字幕数据源和视频数据源合并 使用 ExoPlayer 的 MergingMediaSource 类将字幕数据源和视频数据源合并为一个媒体数据源。 ``` MediaSource mediaSource = new MergingMediaSource(videoSource, subtitleSource); ``` 6. 播放视频 使用 ExoPlayer 的 prepare 方法将媒体数据源准备好,并使用 ExoPlayer 的 setPlayWhenReady 方法开始播放视频。 ``` player.prepare(mediaSource); player.setPlayWhenReady(true); ``` 至此,你已经成功地在 Android Studio 中实现了给视频添加字幕的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值