关于licence的问题

发布时间:2018年6月12日 更新时间:2018年8月10日 贡献者:yjiexia yyuanchen chaoli

短视频 SDK 分基础版和商业版,基础版只需要短视频的 Licence(TXUgcSDK.licence),商业版还同时需要 Pitu 的 Licence(YTFaceSDK.licence),把 Licence 放到工程目录,并修改为对应的名字即可。

4.9 版本开始 Licence 使用方式有改变,可以选择是否把 Licence 打包到项目中。

  • iOS 使用时需要调用 setLicenceURL: key: 接口设置 Licence 的 url 和 key。

  • Android 使用时需要调用TXUGCBase.getInstance().setLicence(context, "Licence URL", "Licence Key")接口设置 Licence 的 url 和 key。

详情查看:https://cloud.tencent.com/document/product/584/20333

[注意] 4.5 ~ 4.7 版本的 SDK 不支持 Licence 自动续期,4.9 版本开始才支持自动续期。4.9 的 SDK 可以兼容之前的 Licence,但是新的 Licence 无法在 4.9 之前的 SDK 上使用。如果开发者在升级到 SDK 4.9 版本后,更换新的 Licence 使用 P 图动效没有效果,请先将工程 clean,然后将手机的 app 先卸载后再运行。

[注意] 基础版Licence的申请配置流程,参考前面的链接操作。商业版Licence,直接联系商务,商务会在后台给配置完整,不需要用户再配置自己控制台的参数了。


申请短视频 Licence 后是否还能修改信息?

发布时间:2018年6月28日 更新时间:2018年6月28日 贡献者:yjiexia

正式版的不能修改!试用版的可以修改。试用版的 Licence 在有效期内修改只会更新相关信息,不会更新过期时间,所以不会占用试用次数。 修改Licence


调用TXUGCBase的getLicenceInfo接口可以获取哪些信息?

发布时间:2018年9月7日 更新时间:2018年9月7日 贡献者:zilongye

以下是在SDK Demo调用getLicenceInfo接口示例:

{
  "appData" : [
    {
      "type" : "formal",
      "feature" : 1,
      "packageName" : "com.content.liteav.demo",
      "startDate" : "2018-07-06T00:00:00Z",
      "bundleId" : "com.tencent.liteav.demo",
      "endDate" : "2019-07-30T00:00:00Z"
    }
  ],
  "pituLicense" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
}

参数说明:

type formal:正式版
test:测试版
feature 0:测试版(旧)
1:正式版(旧)
2:精简版
3:基础版
4:商业版
5:商业版Pro
packageName
bundleId
应用程序的包名
startDate
endDate
有效期起始日期与截止日期

关于短视频录制报错 -5 的问题

发布时间:2018年8月9日 更新时间:2018年9月29日 贡献者:zilongye dgaohuang

从 4.5 版本开始短视频功能需要 Licence 才可以正常调用接口,调用startRecord接口返回值:

状态码 说明
0 成功
-1 正在录制短视频
-2 videoRecorder初始化失败
-3 摄像头没有打开
-4 麦克风没有打开
-5 licence 验证失败
-6 videoPath 无效
-7 coverPath 无效

报错信息为errcode=-5 licence 验证失败?

1.可以通过 getLicenceInfo接口查询licence信息,如出现licence为空,4.9以上版本排查licencen是否 初始化,如:TXUGCBase.getInstance().setLicence(context,url,key),4.5-4.8的建议升级到最新版本;

2.licence信息不为空时,检查获取的licence的信息bundleid/packageName是否和工程一致,licence是否 还在有效期之内,feature对应的licence是否跟sdk版本一致?

3.调用stopRecord接口返回-5,获取licence信息正常。

  • 在调用stopReocrd的时候,会有个回调onRecordComplete(TXRecordResult result),result中的retCode是回调错误码-5,首先检查传入的视 频路径是否正确,其次看下app是不是禁用了SD卡的权限

  • 直播专业版对应短视频基础版sdk,licence版本需要与sdk版本一致,精简版license只适用于短视频精简版sdk.


短视频常见问题(iOS)


下载小视频Demo源码报Framework not found TXLiteAVSDK_UGC_IJK错误?

发布时间:2019年7月23日 更新时间:2018年7月23日 贡献者:zilongye

问题描述:
下载最新版本小视频Demo报下面这个错误,历史原因是以前的小视频Demo用的SDK库叫TXLiteAVSDK_UGC_IJK,现在统一改成TXLiteAVSDK_UGC了。

解决办法:
把TXLiteAVSDK_UGC_IJK删除,重新添加下本地有个TXLiteAVSDK_UGC的库


关于 TXUGCPublish.h 的问题

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

从 4.5 版本开始,TXUGCPublish 相关的类从 SDK 上移到了 Demo 层,开发者如果需要使用,使用时直接把 VideoUpload 目录整个拖入自己的工程即可。


Xcode 中直接运行 Demo 报错

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

需要选择对应的 Target,如下图:


连接 Xcode 调试,短视频录制报错

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

连接 Xcode 调试,短视频录制报错,报错信息:Main Thread Checker: UI API called on a background thread 原因是某些 API(一般是UI相关的)需要在主线程调用,如果在非主线程调用,同时有勾选 Main Thread Checker 的话,就会报错。

解决办法:Product -> Scheme -> Edit Scheme -> Run -> Diagnostics,取消勾选 Main Thread Checker


使用 SDK 时报找不到头文件

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

  • Build Settings -> Search Paths -> Header Search Paths 中添加头文件搜索路径。
  • 使用 "TXLiteAVSDK_UGC/XXX.h"方式引用 SDK 的头文件。

两种方法选其一。


运行工程时报找不到类别方法或者 crash

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

SDK 用到了一些类别的方法,加载类别方法需要在工程配置:Build Settings -> Linking -> Other Linker Flags 添加 -ObjC


集成 SDK 报 duplicate symbol(符号重复)

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

  • 检查 Build Settings -> Linking -> Other Linker Flags 设置,不能有 -all_load
  • 更换 rename 版 SDK。

录制短视频时设置背景音乐无效

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

  1. 确定传的 BGM path 下有没有文件,以及是否可以正常播放。

  2. 确定接口的调用顺序:startCameraSimple:preview: -> setBGM: -> startRecord

[注意] 很多接口调用有时序要求,不然会无效。一般在注释上会有说明。 比如短视频录制的 setVideoResolution:setVideoBitrate:setAspectRatio: 等接口都需要在 startRecord 之前设置才有效。


录制设置 BGM,endTime 时没有完成回调

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

如果设置的 endTime 小于音乐文件总时长,4.6 及之前的版本是在 BGM 播放完后才会触发完成回调,从 4.7 版本开始在 endTime 时触发完成回调。


为什么录制时第一次打开摄像头比较慢?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

苹果手机摄像头第一次打开时(冷启动)耗时相对较长,通过系统接口打开摄像头也是如此。

因为摄像头打开的操作不适合放在子线程去做,经过测试在子线程中进行打开摄像头操作耗时会更大,并且在主线程连续打开/关闭摄像头的时候,子线程的响应延迟会更高,体验不好。


返回继续录制怎么实现?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

在第一次录制完成的时候,不要调用 stopRecordstopCameraPreview(调用之后不能再继续录制,只能重新录制),可以调用pauseRecord,然后通过 TXUGCPartsManager.getVideoPathList 获取已经录取的视频片段,通过 TXVideoJoiner.joinVideo 合成最终视频(4.5之前版本),还可以直接调用 TXUGCPartsManager.joinAllParts 合成最终视频,这个方法合成速度更快(4.5 以后版本支持),这样当返回继续录制的时候,所有的录制状态都在,可以继续录制。


短视频录制完成时收不到完成回调

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

  • 确定有没有调用 stopRecord,只有调用 stopRecord 后才会有完成回调。
  • 确定函数的调用是否都在主线程。

录制过程中用其他播放器播放视频,返回继续录制,声音录制不了

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

iOS 中的 AudioSession 是所有音视频应用共用的,使用其他播放器播放的时候,AudioSession 会被占用,播放结束时如果 AudioSession 没有让出或者让出不及时,会导致录制模块的 AudioSession 失效,SDK 提供了 -(void) pauseAudioSession-(void) resumeAudioSession 两个接口,在去其他播放器预览的时候先调用 pauseAudioSession,返回继续录制前调用 resumeAudioSession


为什么录制出来的视频不清晰?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

码率和分辨率不匹配,录制出来的视频就会不清晰。可以通过适当增大码率、开启B帧来提升画质。


视频编辑时退后台再回到前台,视频生成失败

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

生成视频默认采用的是硬编码(编码效率高,编码出来的图像效果好),硬编码器在程序进后台后会停止工作,从而导致视频生成失败。SDK 提供了两个接口 pauseGenerateresumeGenerate,APP 进后台时可以调用 pauseGenerate 暂停视频生成,APP 回到前台后再调用 resumeGenerate 继续视频生成。

[注意] 调用 resumeGenerate,SDK 将重启硬编码器,有一定的概率重启失败,或重启后前几帧数据编码失败。此时,SDK 内部会在 TXVideoGenerateListener 抛出错误事件,收到错误事件后需要重新生成视频。


文件上传失败

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:yjiexia

文件上传状态码:

  1. 确定上传的文件是否在本地沙盒,如果上传媒体库的文件,需要先 copy 到本地沙盒。
  2. 返回错误码1002:签名有问题、时间戳过期、点播服务问题(未开通或停服)。
  3. 返回错误码1003:请求参数问题、上传文件格式不支持。

TXUGCRecord.h短视频录制里面有设置背景音乐循环播放的接口吗?

发布时间:2018年9月7日 更新时间:2018年9月7日 贡献者:zilongye

TXVideoEditer.h里面有类似接口setBGMLoop,TXUGCRecord.h还没有,计划5.3版本加上。


iOS端短视频录制和短视频编辑添加同一首BGM,声音大小不一样?

发布时间:2018年9月12日 更新时间:2018年9月12日 贡献者:zilongye

目前由于短视频录制和短视频编辑使用的音频模式不一样会导致这个问题,计划5.3版本优化。


iOS端短视频录制完成生成的预览视频没有把动效背景音录制进去?

发布时间:2018年9月12日 更新时间:2018年9月12日 贡献者:zilongye

回音消除接口关掉就不会有这个问题:
TXUGCCustomConfig * param = [[TXUGCCustomConfig alloc] init];
param.enableAEC = NO;


iOS端短视频录制先调用pauseAudioSession然后又调用了resumeAudioSession,特效的背景音明显变大声?

发布时间:2018年9月12日 更新时间:2018年9月12日 贡献者:zilongye

回音消除接口关掉就不会有这个问题:
TXUGCCustomConfig * param = [[TXUGCCustomConfig alloc] init];
param.enableAEC = NO;


iOS端小视频demo短视频编辑获取mp3音乐时长问题?

发布时间:2019年1月5日 更新时间:2019年7月23日 贡献者:zilongye

原因是小视频Demo业务层代码逻辑问题,获取BGM音乐总时长为0,导致无法播放,所以设置了BGM没有声音。
1、在SDK版本5.2及之前可以使用以下方式获取音乐时长:
_BGMDuration = [TXVideoInfoReader getVideoInfoWithAsset:(AVAsset *)_BGMPath].duration;

2、在SDK版本5.3版本及以后的版本建议使用系统接口获取音乐时长,因为SDK接口getVideoInfoWithAsset是给视频使用的,如果调用这个接口传音乐路径获取的音乐时长会为0,可以参考以下系统接口代码:
AVURLAsset*audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil];
CMTime audioDuration = audioAsset.duration;
float audioDurationSeconds = CMTimeGetSeconds(audioDuration);


短视频常见问题(Android)


目前短视频录制生成的分辨率支持自定义吗?有哪些可定制化的输出?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

短视频录制可定制参数包括 fps (每秒钟有多少帧画面),GOP(多少秒编出一个关键I帧)大小,视频码率(每秒钟编码器产生的音视频数据的多少),录制最大/最小时长,录制的分辨率以常量方式提供了三种分辨率可供选择:360x640、540x960、720x1280

录制为什么以常量方式而不是用户自定义大小原因有二:一是以上三种是主流的录制分辨率;二是因为 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;             // FPS
customConfig.isFront = mFront;            // 是否前置摄像头
mTXCameraRecord.startCameraCustomPreview(customConfig, mVideoView);

安卓短视频生成,进度回调的99.9%与完成回调之间有较大的时间间隔?

发布时间:2018年8月10日 更新时间:2018年8月10日 贡献者:chaoli

TXVideoEditer.generateVideo的回调onGenerateProgress进行到大概99.9%会停止,合成后的moov头移动耗时,手机性能越低、视频越长,会耗时越久,建议在ui上做一些动画处理。

供参考: 手机:魅族pro6S; 视频:15S、720P; 测试时长在600ms


Android短视频录制结束,为什么没有收到onRecordComplete回调?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

开始录制短视频前,请先通过调用 TXUGCRecord 类的 setVideoRecordListener() 接口设置录制回调的监听器。

结束时,需要调用 TXUGCRecord 类的 stopRecord() 接口结束录制。

// 录制前
mTXCameraRecord = TXUGCRecord.getInstance(this.getApplicationContext());
mTXCameraRecord.setVideoRecordListener(this);

...

// 结束录制
mTXCameraRecord.stopRecord();

短视频退出录制,开启第二次录制,如何继续接着上一次内容录制?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

Demo 在 onRecordComplete 回调之后,调用了 mTXCameraRecord.getPartsManager().deleteAllParts() ,用于清除分片文件,因为 stopRecord 已经将分片文件合成完成。

如果录制退出,继续上次录制,不需要删除分片,不要调用 mTXCameraRecord.getPartsManager().deleteAllParts()

@Override
public 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(); //进去预览界面
    }

为什么短视频录制设置背景音没有生效?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

设置背景音乐一定要在启动录制 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);

录制是否有拍照功能?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

短视频 SDK 有拍照功能,调用 TXUGCRecord 类的 snapshot 接口,以 TXRecordCommon.ITXSnapshotListener 回调异步返回拍照的图片,代码示例如下:

private void snapshot() {
    if (mTXCameraRecord != null) {
        mTXCameraRecord.snapshot(new TXRecordCommon.ITXSnapshotListener() {
            @Override
            public void onSnapshot(Bitmap bmp) {
                // 拍照的图片
                saveBitmap(bmp);
            }
        });
    }
}

变速录制速度的倍数是多少?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

变速录制不支持自定义速度。

定义 TXRecordCommon中对应常量 倍数
极慢速 RECORD_SPEED_SLOWEST 0.5倍
慢速 RECORD_SPEED_SLOW 0.8倍
标准 RECORD_SPEED_NORMAL 1倍
快速 RECORD_SPEED_FAST 1.25倍
极快速 RECORD_SPEED_FASTEST 1.5倍

变速录制通过调用 TXUGCRecord的setRecordSpeed(record),设置不同的录制速度

mTXCameraRecord.setRecordSpeed(TXRecordCommon.RECORD_SPEED_FAST);

短视频编辑时,设置快速/慢速播放的倍数值各是多少?

发布时间:2018年8月10日 更新时间:2018年8月10日 贡献者:chaoli

安卓:

定义 TXVideoEditConstants中对应常量 倍数
极慢速 SPEED_LEVEL_SLOWEST 0.25倍
慢速 SPEED_LEVEL_SLOW 0.5倍
标准 SPEED_LEVEL_NORMAL 1.0倍
快速 SPEED_LEVEL_FAST 2.0倍
极快速 SPEED_LEVEL_FASTEST 4.0倍

ios:

定义 TXSpeedLevel中对应常量 倍数
极慢速 SPEED_LEVEL_SLOWEST 0.5倍
慢速 SPEED_LEVEL_SLOW 0.75倍
标准 SPEED_LEVEL_NORMAL 1.0倍
快速 SPEED_LEVEL_FAST 1.5倍
极快速 SPEED_LEVEL_FASTEST 2.0倍

[注意] 由于安卓和ios的系统原因,倍数值只能取某些固定的值,ios与安卓不对齐也并不太影响用户体验,现在各大主流短视频app都没有做对齐,如果客户有强需求做对齐,请联系我们。


导入视频的格式要求?是否支持导入分辨率大于720P(例如2K,4K)的视频?导入文件限制有具体大小吗?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

导入视频目前android端仅支持mp4,分辨率没有做限制,导入文件不限制大小。

  • 导入视频的分辨率没有做限制,不管原视频多大,经过预处理后最大是 720P。
  • 为了快速的导入视频,SDK 4.7 版本后可以不经过预处理(部分功能会受到限制,如倒放,单针预览等),对于分辨率大于 720P 的视频,建议需要加上预处理,因为预览是将每一帧解码,一些手机的性能不好,解码一帧并渲染到界面的时间过长,导致卡顿。

目前短视频编辑支持哪种格式的背景音乐?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

目前仅支持 mp3 和 m4a 类型。


目前短视频编辑有哪些可定制化的输出?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

短视频编辑可定制视频码率(SDK 4.5 及以上)、音频码率(SDK 4.7 及以上)、分辨率以常量方式提供了四种分辨率可供选择:360x640、480x640、540x960、720x1280

分辨率 TXVideoEditConstants中对应常量
360x640 VIDEO_COMPRESSED_360P
480x640 VIDEO_COMPRESSED_480P
540x960 VIDEO_COMPRESSED_540P
720x1280 VIDEO_COMPRESSED_720P
//设置输出视频码率
mTXVideoEditer.setVideoBitrate(3600);  
//设置输出分辨率
mTXVideoEditer.generateVideo(TXVideoEditConstants.VIDEO_COMPRESSED_720P, mVideoOutputPath);

通过短视频录制功能录制的视频,其中的音频是可以剥离出来的吗?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

目前短视频录制不支持同时录制 BGM 和人声,所以进入编辑后,重新设置 BGM,可以将原声音量设为 0,达到替换 BGM 的目的,代码如下所示:

// 设置视频原声音量大小(设为0,去掉录制的BGM)
mTXVideoEditer.setVideoVolume(0.0f); 
// 设置本地的背景音乐路径
String bgmPath = getBGMPath();
mTXVideoEditer.setBGM(bgmPath);
// 设置背景音乐音量大小,范围0.0f-1.0f
mTXVideoEditer.setBGMVolume(1.0f);

预览画面在同一个Activity窗口和全屏模式如何切换?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

动态修改传入 SDK 视频预览 View 父布局的大小,SDK 内部会根据父布局的大小,根据视频宽高动态调整视频的大小。

SDK接口的调用顺序: 先进行 stopPlay,在修改传入 SDK 的 FrameLayout 的宽高,调用 initWithPreview(parm),将新的 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);

// 重新设置预览View
private 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 是把“剪辑”和“滤镜”等等功能放在一个页面处理,能否把“剪辑”和“滤镜”分成两个页面?

发布时间:2018年6月12日 更新时间:2018年6月12日 贡献者:dgaohuang

可以先进行裁剪(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);

使用短视频录制功能,录制出来的视频文件大小很大?

发布时间:2018年7月18日 更新时间:2018年7月18日 贡献者:yyuanchen

市面上大部分带有短视频功能的 App ,场景一般是录制短视频,接着跳转到编辑界面。经过这一系列的操作,视频文件会变得很小。因为我们为了保证编辑出来的视频画面的清晰度, 我们没有把录制出来视频文件进行压缩处理。因压缩文件会损失视频的画质。

如果您的场景是直接录制短视频文件,你可以按照以下步骤对录制生成的视频文件进行压缩处理接口。

1.将录制的 Config 中的 needEdit 属性 设置为 False

// 使用推荐配置
TXRecordCommon.TXUGCSimpleConfig simpleConfig = new TXRecordCommon.TXUGCSimpleConfig();
simpleConfig.needEdit = False;
mTXCameraRecord.startCameraSimplePreview(simpleConfig, mVideoView);

// 使用自定义配置
TXRecordCommon.TXUGCCustomConfig customConfig = new TXRecordCommon.TXUGCCustomConfig();
customConfig.needEdit = mNeedEditer;
mTXCameraRecord.startCameraCustomPreview(customConfig, mVideoView);

2、在视频录制完成回调onRecordComplete()中,调用视频压缩方法。

@Override
public void onRecordComplete(TXRecordCommon.TXRecordResult result) {
    Log.i(TAG, "onRecordComplete, result retCode = " + result.retCode + ", descMsg = " + result.descMsg + ", videoPath + " + result.videoPath + ", coverPath = " + result.coverPath);
    // 执行其他操作
    // ...
    // 先实例化一个 TXVideoEditer 对象,然后再调用 generateVideo() 函数压缩视频
    mTXVideoEditer.generateVideo(TXVideoEditConstants.VIDEO_COMPRESSED_720P, mVideoOutputPath);
}

安卓短视频编辑时,动态/静态贴纸都是放入到assets目录下的,也就是只能在打包apk时写死。那客户要做贴纸包动态拓展,能支持吗,如何做?

发布时间:2018年8月10日 更新时间:2018年8月10日 贡献者:chaoli

参考demo中的getPasterInfoList方法,读取的贴纸文件是从sdcard中读取的,所以只要把拓展包拷贝到指定目录下即可。拷贝进来的json字符串要遵循文档中描述的格式。

总pasterList.json的格式如下

{
  "pasterList" : [
    {
      "icon" : "daddy/icon.png",
      "name" : "daddy"
    },

    {
      "icon" : "face/icon.png",
      "name" : "face"
    },

    {
      "icon" : "girl/icon.png",
      "name" : "girl"
    },

    {
      "icon" : "glass/icon.png",
      "name" : "glass"
    }
  ]
}

单个动态贴纸包的config.json的格式如下

{
  "name":"glass",                        // 贴纸名称
  "count":6,                             // 贴纸数量
  "period":480,                          // 播放周期:播放一次动态贴纸的所需要的时间(ms)
  "width":444,                           // 贴纸宽度
  "height":256,                          // 贴纸高度
  "keyframe":6,                          // 关键图片:能够代表该动态贴纸的一张图片
  "frameArray": [                        // 所有图片的集合
                 {"picture":"glass0"},
                 {"picture":"glass1"},
                 {"picture":"glass2"},
                 {"picture":"glass3"},
                 {"picture":"glass4"},
                 {"picture":"glass5"}
               ]
}

更多的短视频编辑功能的介绍以及用法,可以阅读视频编辑(Android)


results matching ""

    No results matching ""