字幕
更新时间: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        });
            