一、目前短视频录制生成的分辨率支持自定义吗?有哪些可定制化的输出?
录制为什么以常量方式而不是用户自定义大小,原因如下:
·以上四种是主流的录制分辨率。
·Android 手机兼容问题,不支持一些非主流的分辨率,会产生一些花屏、绿屏、马赛克。
通过调用 TXUGCRecord 类的 startCameraCustomPreview 接口,将自定义录制的参数传入,代码如下所示:
// 自定义配置TXRecordCommon.TXUGCCustomConfig customConfig = new TXRecordCommon.TXUGCCustomConfig();customConfig.videoResolution = TXRecordCommon.VIDEO_RESOLUTION_540_960;customConfig.minDuration = mMinDuration; // 最小时长customConfig.maxDuration = mMaxDuration; // 最大时长customConfig.videoBitrate = mBiteRate; // 视频码率customConfig.videoGop = mGop; // GOP 大小customConfig.videoFps = mFps; // FPScustomConfig.isFront = mFront; // 是否前置摄像头mTXCameraRecord.startCameraCustomPreview(customConfig, mVideoView);
二、Android 短视频录制结束,为什么没有收到 onRecordComplete 回调?
开始录制短视频前,请先通过调用 TXUGCRecord 类的 setVideoRecordListener() 接口设置录制回调的监听器
结束时,需要调用 TXUGCRecord 类的 stopRecord() 接口结束录制。
// 录制前mTXCameraRecord = TXUGCRecord.getInstance(this.getApplicationContext());mTXCameraRecord.setVideoRecordListener(this);…// 结束录制mTXCameraRecord.stopRecord();
三、短视频退出录制,开启第二次录制,如何继续接着上一次内容录制?
Demo 在 onRecordComplete 回调之后,调用了 mTXCameraRecord.getPartsManager().deleteAllParts(),用于清除分片文件,因为 stopRecord 已经将分片文件合成完成。
如果录制退出,继续上次录制,不需要删除分片,不要调用 mTXCameraRecord.getPartsManager().deleteAllParts()。
@Overridepublic void onRecordComplete(TXRecordCommon.TXRecordResult result) { TXCLog.i(TAG, "onRecordComplete, result retCode = " + result.retCode + ", descMsg = " + result.descMsg + ", videoPath + " + result.videoPath + ", coverPath = " + result.coverPath); if (mTXRecordResult.retCode < 0) { Toast.makeText(TCVideoRecordActivity.this.getApplicationContext(), "录制失败,原因:" + mTXRecordResult.descMsg, Toast.LENGTH_SHORT).show(); } else { mDuration = mTXCameraRecord.getPartsManager().getDuration(); //录制的总时长 if (mTXCameraRecord != null) { mTXCameraRecord.getPartsManager().deleteAllParts(); //删除多次录制的分片文件 } startPreview(); //进去预览界面 }
四、为什么短视频录制设置背景音没有生效?
设置背景音乐一定要在启动录制(TXUGCRecord 的 startRecord)接口之前设置才能生效。代码调用顺序参照下面示例:
TXRecordCommon.TXUGCSimpleConfig simpleConfig = new TXRecordCommon.TXUGCSimpleConfig();simpleConfig.videoQuality = TXRecordCommon.VIDEO_QUALITY_MEDIUM;simpleConfig.minDuration = mMinDuration;simpleConfig.maxDuration = mMaxDuration;// 1、首先开启预览mTXCameraRecord.startCameraSimplePreview(simpleConfig, mVideoView);// 2、再设置背景音乐的路径并播放背景音乐mBGMDuration = mTXCameraRecord.setBGM(mBGMPath);mTXCameraRecord.playBGMFromTime(0, mBGMDuration);// 3、启动录制(customVideoPath:录制后视频路径,customPartFolder:录制视频的文件夹,customCoverPath:录制后视频的封面路径)int result = mTXCameraRecord.startRecord(customVideoPath, customPartFolder, customCoverPath);
五、录制是否有拍照功能?
短视频 SDK 有拍照功能,调用 TXUGCRecord 类的 snapshot 接口,以 TXRecordCommon.ITXSnapshotListener 回调异步返回拍照的图片,代码示例如下:
private void snapshot() { if (mTXCameraRecord != null) { mTXCameraRecord.snapshot(new TXRecordCommon.ITXSnapshotListener() { @Override public void onSnapshot(Bitmap bmp) { // 拍照的图片 saveBitmap(bmp); } }); }}
六、变速录制速度的倍数是多少?
变速录制不支持自定义速度
| 定义 | TXRecordCommon 中对应常量 | 倍数 |
| 极慢速 | RECORD_SPEED_SLOWEST | 0.5倍 |
| 慢速 | RECORD_SPEED_SLOW | 0.8倍 |
| 标准 | RECORD_SPEED_NORMAL | 1倍 |
| 快速 | RECORD_SPEED_FAST | 1.25倍 |
| 极快速 | RECORD_SPEED_FASTEST | 2倍 |
变速录制通过调用 TXUGCRecord 的 setRecordSpeed(record),设置不同的录制速度。
mTXCameraRecord.setRecordSpeed(TXRecordCommon.RECORD_SPEED_FAST);
七、导入视频的格式要求?是否支持导入分辨率大于720P(例如2K,4K)的视频?导入文件限制有具体大小吗?
导入视频目前 Android 端仅支持 MP4,分辨率没有做限制,导入文件不限制大小。
·导入视频的分辨率没有做限制,不管原视频多大,经过预处理后最大是720P。
·为了快速导入视频,SDK4.7后可以不经过预处理(一些功能受到限制,倒放,单帧预览等),对于分辨率大于720P的视频,建议需要加上预处理,因为预览是将每一帧解码,一些手机的性能不好,导致解码一帧并渲染到界面的时间过长,导致卡顿。
八、目前短视频编辑支持哪种格式的背景音乐?
目前仅支持 MP3 和 M4A 类型。
九、目前短视频编辑有哪些可定制化的输出?
短视频编辑可定制视频码率(SDK4.5及以上)、音频码率(SDK4.7及以上)、分辨率以常量方式提供了几种分辨率供你选择:360 x 640、480 x 640、540 x 960、720 x 1280、1080 × 1920。
| 分辨率 | TXVideoEditConstants 中对应常量 |
| 360×640 | VIDEO_COMPRESSED_360P |
| 480×640 | VIDEO_COMPRESSED_480P |
| 540×960 | VIDEO_COMPRESSED_540P |
| 720×1280 | VIDEO_COMPRESSED_720P |
| 1080×1920 | VIDEO_COMPRESSED_1080P |
//设置输出视频码率mTXVideoEditer.setVideoBitrate(3600); //设置输出分辨率mTXVideoEditer.generateVideo(TXVideoEditConstants.VIDEO_COMPRESSED_720P, mVideoOutputPath);
十、通过短视频录制功能录制的视频,其中的音频可以替换吗?
目前短视频录制不支持同时录制 BGM 和人声。如果你想添加自定义的 BGM 而不保留原始录制的音频,操作方法如下:
1. 进入编辑模式:首先,将录制的视频导入到视频编辑软件中。
2. 替换原始音频:在编辑软件中,找到音频编辑功能。将原声音量设为0来达到隐藏原始音频的效果。这样,在播放视频时就不会听到原始录制的声音。
3. 替换背景音乐:接下来,你可以从本地文件或其他来源选择一个新的 BGM 文件,并将其添加到视频中。确保新的 BGM 与视频内容相协调,并调整其音量大小以符合你的需求。
4. 导出编辑后的视频:完成音频替换和其他编辑工作后,保存并导出你的视频。
通过以上步骤,你可以轻松地在不保留原始音频的情况下,为视频添加并调整自定义的背景音乐。
具体的实现代码如下所示:
// 设置视频原声音量大小(设为0,去掉录制的 BGM)mTXVideoEditer.setVideoVolume(0.0f); // 设置本地的背景音乐路径String bgmPath = getBGMPath();mTXVideoEditer.setBGM(bgmPath);// 设置背景音乐音量大小,范围0.0f-1.0fmTXVideoEditer.setBGMVolume(1.0f);
十一、预览画面在同一个 Activity 窗口和全屏模式如何切换?
动态修改传入 SDK 视频预览 View 父布局的大小,SDK 内部会根据父布局的大小,根据视频宽高动态调整视频的大小。SDK 接口的调用顺序:
先进行 stopPlay,再修改传入 SDK 的 FrameLayout 的宽高,调用 initWithPreview(param),将新的 FrameLayout 承载播放组件的 layout 传入,再次 startPlay。
// 停止播放mTXVideoEditer.stopPlay();if (isFullScreen) { // 如果是全屏模式,则下面切换成窗口模式 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1500); mVideoPlayerLayout.setLayoutParams(params); initPlayerLayout(false); isFullScreen = false;} else { // 如果是窗口模式,则下面切换成全屏模式 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); mVideoPlayerLayout.setLayoutParams(params); initPlayerLayout(false); isFullScreen = true;}// 开始播放mTXVideoEditer.startPlayFromTime(startTime, endTime);// 重新设置预览Viewprivate void initPlayerLayout(boolean isFullScreen) { TXVideoEditConstants.TXPreviewParam param = new TXVideoEditConstants.TXPreviewParam(); param.videoView = mVideoPlayerLayout; if (isFullScreen) { param.renderMode = TXVideoEditConstants.PREVIEW_RENDER_MODE_FILL_SCREEN; } else { param.renderMode = TXVideoEditConstants.PREVIEW_RENDER_MODE_FILL_EDGE; } mTXVideoEditer.initWithPreview(param);}
十二、短视频编辑时,腾讯云短视频 Demo 是把“剪辑”和“滤镜”等功能放在一个页面处理。不过,我们公司产品是把“剪辑”功能和“滤镜”分成两个页面?
可以先进行裁剪(setCutTimeFrom)+ 预处理(processVideo)同时执行,结果生成一个裁剪后的视频预处理完的视频,再进行各种编辑的操作,将裁剪设置成整个时长(setCutTimeFrom),最后调用 generateVideo 生成视频,防止压缩两次导致画质降低。
注意:在预处理进行裁剪了,生成完的预处理视频,在最后生成前,一定要将裁剪时长设置为整个视频时长,不然还会再次进行裁剪。
//裁剪页面mTXVideoEditer = new TXVideoEditer(mContext);mTXVideoEditer.setCutFromTime(mTCVideoEditView.getSegmentFrom(), mTCVideoEditView.getSegmentTo());mTXVideoEditer.processVideo();// 将裁剪设置成整个时长 (setCutTimeFrom)mTXVideoEditer.setCutFromTime(0, mVideoDuration);//跳转到特效页面,进行生成mTXVideoEditer.generateVideo(TXVideoEditConstants.VIDEO_COMPRESSED_720P, mVideoOutputPath);
十三、集成遇到异常怎么办?
你可以使用 armeabi 和 armeabi-v7a 架构。
如上图所示,请在app的 build.gradle 中指定 abiFilters 为“armeabi”。
十四、同时集成两款以上 LiteAV 体系的 SDK 出现冲突怎么办?
如果你的项目中同时集成了两款以上的 LiteAV 体系的 SDK,就会出现符号冲突(symbol duplicate)的问题,这是由于 LiteAV 体系的 SDK 都使用了相同的基础模块。
要避免符号冲突问题,正确的做法是不要同时集成两个 SDK,而是集成全功能版 SDK:
| 所属平台 | ZIP 包 | GitHub | 64位支持 | 安装包增量 | 安装包瘦身 |
| iOS | DOWNLOAD | GitHub | 支持 | 4.08M(arm64) | DOC |
| Android | DOWNLOAD | GitHub | 支持 | jar:1.5M so(armeabi):6.5M so(armv7):6.1Mso(arm64):7.3M | DOC |
十五、SDK 升级后,短视频的功能不能使用?
1. 如果使用的是 androidstudio,在替换新的 aar 后,请修改app的 build.gradle 中的 aar 引用,与你放入工程下 /libs 目录下的 aar 文件名称是否一致。然后重新 clean 并且 build 一下你的工程。
2. 确认 SDK 版本,短视频 SDK 4.5 版本之后需要 License 支持。
请先申请 License,SDK 有精简版和基础版两种版本 License:
·区别请参见 SDK 功能及对应的 License 版本。
·详细价格请参见 价格文档
·如需使用美颜特效等高级功能,请参见 腾讯特效 SDK。
十六、Android 端短视频如何设置暂停和进度条?
短视频播放是基于短视频的播放器进行实现的,因此进度条功能需要你自行研发,相关功能实现说明可参见 播放器 SDK—进度展示。