字幕
更新时间:2020-12-11
创建字幕控制器
- 创建字幕控制器,使用字幕相关功能,需要创建字幕轨并添加到媒体轨道中心,并创建一个字幕片段,配合字幕UI逻辑使用,详见智能小视频源码,涉及组件BDHKVlogSubtitlesView(字幕位置),BDMVSubtitleInputAccessoryView(字幕输入框),BDMVInputEventBottomBar(字幕确认框)
- 代码示例如下:
Plain Text
1 //创建字幕控制器
2 mUgcSubtitleEditController = new UgcSubtitleEditController(this, mUgcPreViewFrameLayout, mVideoView);
3 mUgcSubtitleEditController.setUgcVideoPreviewActivity(this);
4 mUgcSubtitleEditController.setSubtitleEditControllerListener(
5 new UgcSubtitleEditController.SubtitleEditControllerListener() {
6 @Override
7 public List<MultiMediaData> getDataList() {
8 return mDataSourceList;
9 }
10
11 @Override
12 public void updateSubtitleList(List<SubTitleUnit> subTitleUnits) {
13 if (mVlogEditManager != null) {
14 mVlogEditManager.setSubtitle(subTitleUnits);
15 }
16 if (mAEffectProcessor != null) {
17 mAEffectProcessor.changeEffect(mVlogEditManager.getShaderConfigMap(),
18 mVlogEditManager.getUpdateMediaTracks());
19 }
20 if (mUgcSubtitleEditController != null) {
21 mUgcSubtitleEditController.changeSubtitleIcon(!ListUtils.isEmpty(subTitleUnits));
22 }
23 }
24
25 @Override
26 public String getThemeId() {
27 return "";
28 }
29
30 @Override
31 public void updateSubtitleConfig(SubTitleConfig subTitleConfig) {
32 if (mVlogEditManager != null) {
33 mVlogEditManager.setSubtitleConfig(subTitleConfig);
34 }
35
36 VideoDraftBean videoDraftBeanDb = getVideoDraftBeanDb();
37 if (videoDraftBeanDb != null) {
38 videoDraftBeanDb.setVideoSubtitleConfig(SubTitleConfig.beanToJson(subTitleConfig));
39 CurrentVideoBeanManager.updateVideoDraftBean(videoDraftBeanDb);
40 }
41 }
42
43 @Override
44 public void setIsNeedPauseWhenEdit(boolean isNeedPauseWhenEdit) {
45 mIsNeedPauseWhenEdit = isNeedPauseWhenEdit;
46 }
47
48 @Override
49 public void saveSubtitleDraft(List<SubTitleUnit> subTitleUnits) {
50 VideoDraftBean videoDraftBeanDb = getVideoDraftBeanDb();
51 if (videoDraftBeanDb != null) {
52 videoDraftBeanDb.setVideoSubtitleData(SubTitleUnit.arrayToJson(subTitleUnits));
53 CurrentVideoBeanManager.updateVideoDraftBean(videoDraftBeanDb);
54 }
55 }
56
57 @Override
58 public void updateIsPauseByUser(boolean isPauseByUser) {
59 mIsPausePlayByUser = isPauseByUser;
60 if (mIsPausePlayByUser) {
61 if (mVlogEditManager != null) {
62 mVlogEditManager.pause();
63 }
64 if (mPreviewMusicPlayer != null) {
65 mPreviewMusicPlayer.onPause();
66 }
67 }
68 }
69 });
70
设置字幕画面位置
- 设置字幕画面位置,可以调整字幕轨道上某个字幕的显示位置
- 代码示例如下:
Plain Text
1private void inflateDragSubtitleLayout() {
2 if (mDragSubtitleViewStub == null) {
3 return;
4 }
5 mDragSubtitleLayout = (DragSubtitleLayout) mDragSubtitleViewStub.inflate();
6 mDragSubtitleLayout.setOnDragItemClickListener(this);
7 mDragSubtitleViewStub = null;
8 if (mSubTitleConfig != null) {
9 mDragSubtitleLayout.setSubtitleConfig(mSubTitleConfig);
10 }
11 mDragSubtitleLayout.setOnDragItemMovedListener(new DragSubtitleLayout.OnDragItemMovedListener() {
12 @Override
13 public void onDragItemMoved() {
14 mIsChangeSubtile = true;
15 }
16 });
17 mDragSubtitleLayout.setOnCancelFocusManuallyListener(new DragSubtitleLayout.OnCancelFocusManuallyListener() {
18 @Override
19 public void onCancelFocusManually(SubTitleUnit subTitleUnit) {
20 if (mSubtitleEditLayout != null && mSubtitleEditLayout.getVideoShaft() != null
21 && mIPlayerDataSource != null) {
22 mSubtitleEditLayout.getVideoShaft().clearSelectState();
23 }
24 }
25 });