智能客服
你问我答,随时在线为你解决问题
- MediaApplication.getInstance().setAccessToken("your access token");
获取Access Token可参见基于OAuth 2.0开放鉴权客户端模式。
- MediaApplication.getInstance().setApiKey("your ApiKey");
当您在AppGallery Connect上注册您的应用时,会给您的应用分配api_key,可参见添加当前应用的AppGallery Connect配置文件。
请勿将api_key硬编码在代码中,同时不要将api_key存储在应用的配置文件中。建议您将api_key存储在云侧,运行时获取。
HuaweiVideoEditor对象是整个编辑工程的入口类,其生命周期与编辑工程保持一致。创建编辑工程,您应首先创建HuaweiVideoEditor对象并初始化其运行环境。当离开编辑工程时,应释放Editor实例。
- HuaweiVideoEditor editor = HuaweiVideoEditor.create(getApplicationContext());
- editor.initEnvironment();
当销毁HuaweiVideoEditor对象后,必须重新初始化运行环境。
预览窗口负责视频图像画面的渲染,由视频编辑原子能力SDK内部创建SurfaceView来实现。在创建窗口之前,需要在您的App中指定预览窗口的布局位置。
- <LinearLayout
- android:id="@+id/video_content_layout"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:background="@color/video_edit_main_bg_color"
- android:gravity="center"
- android:orientation="vertical" />
- // 指定预览窗口
- LinearLayout mSdkPreviewContainer = view.findViewById(R.id.video_content_layout);
-
- // 在initEnvironment()完成之后,设置预览窗口承载的布局
- editor.setDisplay(mSdkPreviewContainer);
创建一条视频泳道,然后往泳道上添加图片或者视频素材。图片和视频素材需要通过文件路径添加到泳道上。其中图片在泳道上的默认长度为3s。
由于中低端机性能限制,导入高分辨率视频可能会造成卡顿,建议先通过降采样处理后再导入。
- // 获取时间线对象
- HVETimeLine timeline = editor.getTimeLine();
-
- // 创建视频泳道
- HVEVideoLane videoLane = timeline.appendVideoLane();
-
- // 在视频泳道的末尾,添加视频资源
- HVEVideoAsset videoAsset = videoLane.appendVideoAsset("test.mp4");
-
- // 在视频泳道的末尾,添加图片资源
- HVEImageAsset imageAsset = videoLane.appendImageAsset("test.jpg");
-
- // 通常我们对泳道上的资源操作的时候,通过泳道来获取资源列表
- List<HVEAsset> assets = videoLane.getAssets();
- // 根据资源列表获取资源对象visibleAsset,根据具体场景visibleAsset可以转换成HVEVideoAsset或者HVEImageAsset,i为资源在assets列表的索引
- HVEVisibleAsset visibleAsset = assets.get(i);
创建一条音乐泳道,然后往泳道上添加音乐素材。音乐素材需要通过文件路径添加到泳道上。
- // 创建音乐泳道
- HVEAudioLane audioLane = timeline.appendAudioLane();
-
- // 在音频泳道的末尾,创建音乐资源
- HVEAudioAsset audioAsset = audioLane.appendAudioAsset("test.mp3");
创建一条贴纸文字泳道,然后往泳道上添加贴纸和文字。贴纸需要通过文件路径添加到泳道上,文字只需要指定文本内容。贴纸和文字在泳道上的默认长度都为3s。
- // 创建贴纸文字泳道
- HVEStickerLane stickerLane = timeline.appendStickerLane();
-
- // 在泳道的末尾添加贴纸
- HVEStickerAsset stickerAsset = stickerLane.appendStickerAsset("test.png");
-
- // 在泳道的末尾添加文字
- HVEWordAsset wordAsset = stickerLane.appendWord("输入文字", 0, 3000);
特效分为两种:外联特效和内嵌特效。
创建一条特效泳道,然后往泳道上添加特效,通过构造HVEEffect.Options对象来创建特效。
- // 创建特效泳道
- HVEEffectLane effectLane = timeline.appendEffectLane();
-
- // 创建一个颜色调节特效,添加到0位置,时长为3000ms
- HVEEffect effect = effectLane.appendEffect(new HVEEffect.Options(HVEEffect.EFFECT_COLORADJUST, "", ""), 0, 3000);
- // 创建一个颜色调节内嵌特效
- HVEEffect effect = visibleAsset.appendEffectUniqueOfType(new HVEEffect.Options(HVEEffect.EFFECT_COLORADJUST, "", ""), ADJUST);
播放时间线需要指定起点和终点,时间线将会按照固定帧率向后推进,同时预览画面和声音保持同步播放。通过注册的播放回调,可以接受播放进度、暂停、播放完成和播放失败事件。
- // 注册播放进度回调
- editor.setPlayCallback(callback);
-
- // 播放完整时间线
- editor.playTimeLine(timeline.getStartTime(), timeline.getEndTime());
编辑完成后,通过导出接口将时间线上的资源生成输出一个新的视频。通过设置导出回调,可以监听导出进度、完成、失败事件,并且可以指定导出视频的帧率、分辨率、生成路径。
由于中低端机性能限制,导出高分辨率(4K)可能会造成内存溢出,建议选择1080P及以下分辨率导出。
- // 导出视频路径
- String outputPath =
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
- + File.separator + Constant.LOCAL_VIDEO_SAVE_PATH
- + File.separator + VideoExportActivity.getTime() + ".mp4";
-
- // 导出分辨率
- HVEVideoProperty videoProperty = new HVEVideoProperty(1920, 1080);
-
- // 导出视频
- HVEExportManager.exportVideo(editor, callback, videoProperty, outputPath);