创建字幕控制器
- 创建字幕控制器,使用字幕相关功能,需要创建字幕轨并添加到媒体轨道中心,并创建一个字幕片段,配合字幕UI逻辑使用,详见智能小视频源码,涉及组件BDHKVlogSubtitlesView(字幕位置),BDMVSubtitleInputAccessoryView(字幕输入框),BDMVInputEventBottomBar(字幕确认框)
- 代码示例如下:
//创建字幕控制器 mUgcSubtitleEditController = new UgcSubtitleEditController(this,
mUgcPreViewFrameLayout, mVideoView); mUgcSubtitleEditController.setUgcVideoPreviewActivity(this); mUgcSubtitleEditController.setSubtitleEditControllerListener( new UgcSubtitleEditController.SubtitleEditControllerListener() { @Override public List<MultiMediaData> getDataList() { return mDataSourceList; } @Override public void updateSubtitleList(List<SubTitleUnit> subTitleUnits) { if (mVlogEditManager != null) { mVlogEditManager.setSubtitle(subTitleUnits); } if (mAEffectProcessor != null) { mAEffectProcessor.changeEffect(mVlogEditManager.getShaderConfigMap(), mVlogEditManager.getUpdateMediaTracks()); } if (mUgcSubtitleEditController != null) { mUgcSubtitleEditController.changeSubtitleIcon(!ListUtils.isEmpty(subTitleUnits)); } } @Override public String getThemeId() { return ""; } @Override public void updateSubtitleConfig(SubTitleConfig subTitleConfig) { if (mVlogEditManager != null) { mVlogEditManager.setSubtitleConfig(subTitleConfig); } VideoDraftBean videoDraftBeanDb = getVideoDraftBeanDb(); if (videoDraftBeanDb != null) { videoDraftBeanDb.setVideoSubtitleConfig(SubTitleConfig.beanToJson(subTitleConfig)); CurrentVideoBeanManager.updateVideoDraftBean(videoDraftBeanDb); } } @Override public void setIsNeedPauseWhenEdit(boolean isNeedPauseWhenEdit) { mIsNeedPauseWhenEdit = isNeedPauseWhenEdit; } @Override public void saveSubtitleDraft(List<SubTitleUnit> subTitleUnits) { VideoDraftBean videoDraftBeanDb = getVideoDraftBeanDb(); if (videoDraftBeanDb != null) { videoDraftBeanDb.setVideoSubtitleData(SubTitleUnit.arrayToJson(subTitleUnits)); CurrentVideoBeanManager.updateVideoDraftBean(videoDraftBeanDb); } } @Override public void updateIsPauseByUser(boolean isPauseByUser) { mIsPausePlayByUser = isPauseByUser; if (mIsPausePlayByUser) { if (mVlogEditManager != null) { mVlogEditManager.pause(); } if (mPreviewMusicPlayer != null) { mPreviewMusicPlayer.onPause(); } } } });
设置字幕画面位置
- 设置字幕画面位置,可以调整字幕轨道上某个字幕的显示位置
- 代码示例如下:
private void inflateDragSubtitleLayout() {
if (mDragSubtitleViewStub == null) {
return;
}
mDragSubtitleLayout = (DragSubtitleLayout) mDragSubtitleViewStub.inflate();
mDragSubtitleLayout.setOnDragItemClickListener(this);
mDragSubtitleViewStub = null;
if (mSubTitleConfig != null) {
mDragSubtitleLayout.setSubtitleConfig(mSubTitleConfig);
}
mDragSubtitleLayout.setOnDragItemMovedListener(new DragSubtitleLayout.OnDragItemMovedListener() {
@Override
public void onDragItemMoved() {
mIsChangeSubtile = true;
}
});
mDragSubtitleLayout.setOnCancelFocusManuallyListener(new DragSubtitleLayout.OnCancelFocusManuallyListener() {
@Override
public void onCancelFocusManually(SubTitleUnit subTitleUnit) {
if (mSubtitleEditLayout != null && mSubtitleEditLayout.getVideoShaft() != null
&& mIPlayerDataSource != null) {
mSubtitleEditLayout.getVideoShaft().clearSelectState();
}
}
});