短视频_01.jpg短视频_02.jpg短视频_03.jpg短视频_04.jpg短视频_05.jpg短视频_06.jpg短视频_07.jpg短视频_08.jpg


近年来,短视频行业发展极为迅速,凭借其创意玩法以及新鲜的视频内容成为继直播之后的新风口。为了满足开发者快速创建短视频应用的需求,腾讯云点播推出了短视频一站式解决方案,覆盖了视频生成、上传、处理、分发和播放在内的各个环节,帮助用户以最快速度实现短视频应用的上线。

短视频(User Generated Short Video,UGSV)基于腾讯云强大的上传、存储、转码、分发的云点播能力,提供集成了采集、剪辑、拼接、特效、分享、播放等功能的客户端 SDK,并整合腾讯的 IM、社交、用户画像数据以及 AI 人脸识别和图像检测技术,帮助用户聚焦业务本身,快速轻松实现基于移动端的短视频应用。

本文档旨在帮助客户以最快速、最简单的方式体验、开通、购买和对接腾讯云短视频服务。

    
    

功能体验

iOS 版Android 版

功能列表

功能模块功能项功能简介精简版基础版商业版商业版 Pro
界面自定义 UI开发者自定义 UI。小视频 App 提供了一套完整的 UI 交互源码,可复用或自定义。
采集拍摄屏比支持16:9、4:3、1:1多种屏比拍摄。
清晰度支持标清、高清、超清拍摄,支持自定义码率、帧率、GOP。
拍摄控制拍摄前后摄像头切换、灯光的控制。
时长设置自定义拍摄的最短和最长时长。
水印拍摄支持添加水印。×
焦距拍摄支持调节焦距。
对焦模式支持手动对焦和自动对焦。
分段录制拍摄过程中可以暂停分段并且可以回删。
拍照支持拍摄照片。×
变速录制拍摄时支持慢速和快速录制。×
背景音乐拍摄前可以选择本地的 MP3 作为背景音。×
变声和混响拍摄前对录制的声音变声(如萝莉、大叔)和混响效果(如 KTV、会堂)。×
滤镜支持实时预览滑动切换滤镜的效果,支持自定义滤镜及设置滤镜程度。
基础美颜拍摄设置人脸的磨皮、美白、红润,并调节强度。
高级美颜拍摄设置大眼、瘦脸、V 脸、下巴调整、短脸、小鼻效果,并支持调节强度。×××
动效贴纸人脸识别,然后添加变形、覆盖贴纸挂件等效果。××
AI 抠图识别出人的轮廓,把背景抠除,替换成其他的元素,如动态背景或 PPT 等。×××
绿幕抠像将画面中的绿色元素(如纯绿背景)抠除,替换成其他的元素,如动态背景或 PPT 等。×××
特效编辑快速导入Android 支持快速导入视频。
视频裁剪按照给定的时间范围精确裁剪视频。
码率设置可以指定码率生成视频。
获取封面根据时间获取帧图像。
按帧预览移动时间线时,在预览窗口显示基准游标停留的帧图像。
滤镜给视频添加滤镜,并支持设置滤镜的强度。×
时间特效给视频添加倒放、反复、慢动作的时间特效。×
滤镜特效给视频添加灵魂出窍、动感光波、分裂、幻影等特效。×
背景音乐选择自带声音文件或用户手机本地的 MP3 作为背景音,支持背景音乐的裁剪和设置音量大小。×
动态或者静态贴纸添加动态或者静态贴纸,支持设置在视频画面中显示位置和起始时间。×
字幕添加字幕,可以选择字幕边框背景的样式(如气泡等),支持设置在视频画面中显示位置和起始时间。×
图片转场导入多张图片,并选择旋转、淡入淡出等转场效果,并生成视频。×
视频拼接多视频拼接支持多视频前后拼接。×
跟拍支持根据播放的视频进行跟拍,生成双画面视频。×
视频上传上传至云点播云点播支持媒资管理、内容审核等功能。
点播播放超级播放器基于点播播放器实现的集视频信息拉取、横竖屏切换、清晰度选择、弹幕、直播时移等功能于一体的解决方案,且完全开源。

LICENSE

  • 精简版 LICENSE
    您可以登录 云点播控制台 在线申请为期一个月的基础版试用 LICENSE,该 LICENSE 可以在精简版和基础版 SDK 上使用。
    购买云点播流量资源包精简版,可以获取短视频精简版 SDK 为期一年的 LICENSE 使用权限。云点播资源包请参见 资源包(预付费),购买成功后,登录 云点播控制台 获取精简版 LICENSE。

  • 基础版 LICENSE
    购买云点播流量资源包旗舰版2、旗舰版3,可以获取短视频基础版 SDK 为期一年的 LICENSE 使用权限。云点播资源包请参见 资源包(预付费),购买成功后,登录 云点播控制台 获取基础版 LICENSE。

  • 商业版和商业版 Pro LICENSE
    如果您已经在使用云点播服务,可以拨打腾讯云95716服务热线,联系我们的商务团队,以云点播资源带宽或流量置换的方式,获得短视频商业版 SDK 或者商业版 Pro SDK 的折扣价格。仅使用短视频商业版 SDK,LICENSE 授权费用为350000元/年,商业版 Pro SDK,LICENSE 授权费用为500000元/年。

什么是客户端视频上传?

客户端视频上传,是指 App 用户将本地视频直接上传到云点播。

视频上传功能 TXUGCPublish 找不到?

视频上传模块已经从 SDK 中独立出来,并开源到 Demo 中,需要用户自己集成短视频上传,步骤如下:

  1. 下载 Demo

  2. app\libs\upload目录下上传的 jar 包拷贝到您的项目..\app\libs\upload目录下。

  3. 将短视频上传源码目录Demo\app\src\main\java\com\tencent\liteav\demo\videoupload拷贝到您自己的工程目录下,并修改源码里的 package 名称。

  4. 在工程 App 目录下的 build.gradle 中,添加引用 jar 包的代码。

    dependencies {compile fileTree(include: ['*.jar'], dir: 'libs/upload')}


  5. AndroidManifest.xml中配置 App 的权限。



上传失败,报1000的内部错误?

请检查是否开启云点播服务。

短视频上传参数类错误?

请检查视频文件地址和图片地址是否正确,该路径下是否能找到相应文件。

短视频上传签名错误?

客户端在发起上传前,需要向 App 服务器请求上传签名,如果 App 服务器允许客户端上传,则会按照 签名规则 为客户端生成一个上传签名,客户端必须携带该签名,让云点播验证客户端上传是否被授权。

客户端上传签名的步骤如下:

  1. 获取 API 密钥。

  2. 拼接明文串。

  3. 将明文串转为最终签名。

  4. 服务搭建完毕之后,开发者可以通过云点播提供的工具来校验签名的正确性:


更多请参见 客户端上传签名

集成遇到异常怎么办?


如果您使用的是 商用企业版,那么您只能使用 armeabi 架构,关闭其他架构,例如 armeabi-v7a。如果您使用的是其他版本,那么您可以使用 armeabi 和 armeabi-v7a 架构。

如上图所示,请在app的 build.gradle 中指定 abiFilters 为“armeabi”。

同时集成两款以上 LiteAV 体系的 SDK 出现冲突怎么办?

如果您的项目中同时集成了两款以上的 LiteAV 体系的 SDK,就会出现符号冲突(symbol duplicate)的问题,这是由于 LiteAV 体系的 SDK 都使用了相同的基础模块。

要避免符号冲突问题,正确的做法是不要同时集成两个 SDK,而是集成一个具备完整功能的专业版 SDK:

所属平台ZIP 包Github64位支持安装包增量安装包瘦身
iOSDOWNLOADGithub支持4.08M(arm64)DOC
AndroidDOWNLOADGithub支持jar:1.5M
so(armeabi):6.5M
so(armv7):6.1M
so(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 版本分为基础版和商业版,区别在于 AI 特效的有无。

  • License 分为基础版和商用版,基础版需要申请基础功能的 License;商业版除了要申请基础功能的 License 外,还需要申请 AI 动效的 License;两种都可申请试用版的 License。

  • 详细价格请参考 价格文档

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

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

录制为什么以常量方式而不是用户自定义大小,原因如下:

  • 以上三种是主流的录制分辨率。

  • 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()。

@OverridepublicvoidonRecordComplete(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 回调异步返回拍照的图片,代码示例如下:

privatevoidsnapshot(){    if (mTXCameraRecord != null) {        mTXCameraRecord.snapshot(new TXRecordCommon.ITXSnapshotListener() {            @OverridepublicvoidonSnapshot(Bitmap bmp){                // 拍照的图片                saveBitmap(bmp);            }        });    }}

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

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

定义TXRecordCommon 中对应常量倍数
极慢速RECORD_SPEED_SLOWEST0.5倍
慢速RECORD_SPEED_SLOW0.8倍
标准RECORD_SPEED_NORMAL1倍
快速RECORD_SPEED_FAST1.25倍
极快速RECORD_SPEED_FASTEST1.5倍

变速录制通过调用 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。

分辨率TXVideoEditConstants 中对应常量
360x640VIDEO_COMPRESSED_360P
480x640VIDEO_COMPRESSED_480P
540x960VIDEO_COMPRESSED_540P
720x1280VIDEO_COMPRESSED_720P
//设置输出视频码率mTXVideoEditer.setVideoBitrate(3600);   //设置输出分辨率mTXVideoEditer.generateVideo(TXVideoEditConstants.VIDEO_COMPRESSED_720P, mVideoOutputPath);

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

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

// 设置视频原声音量大小(设为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(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);// 重新设置预览ViewprivatevoidinitPlayerLayout(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);

关于 License 的问题?

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

4.9版本开始 License 使用方式有改变,可以选择是否把 License 打包到项目中。使用时需要调用 setLicenceURL:key:接口设置 License 的 url 和 key。

注意:

4.5 - 4.7版本的 SDK 不支持 License 自动续期,4.9版本开始才支持自动续期。4.9的 SDK 可以兼容之前的 Licence(url 和 key 不能传 null,可以随便传个字符串),但是新的 License 无法在4.9之前的 SDK 上使用。

关于 TXUGCPublish.h 的问题?

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

Xcode 中直接运行 Demo 报错?

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

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

连接 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

说明:

该问题在4.9版本已经修复。

使用 SDK 时报找不到头文件?

  • Build Settings>Search Paths>Header Search Paths中添加头文件搜索路径。

  • 使用"TXLiteAVSDK_UGC/XXX.h"方式引用 SDK 的头文件。

  • 使用@import TXLiteAVSDK_UGC;方式引用 SDK (5.0及之后的版本)。

以上几种方法选其一。

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

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

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

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

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

注意:

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

录制设置 BGM 不能循环播放?

目前逻辑暂未支持循环播放。

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

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

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

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

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

返回继续录制怎么实现?

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

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

  • 确定有没有调用 stopRecord,只有调用 stopRecord 后才会有完成回调。

  • 确定函数的调用是否都在主线程。

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

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

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

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

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

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

注意:

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

文件上传失败?

文件上传状态码:

  1. 确定上传的文件是否在本地沙盒,如果上传媒体库的文件,需要先 copy 到本地沙盒。

  2. 返回错误码1002:签名有问题、时间戳过期、点播服务问题(未开通或停服)。

  3. 返回错误码1003:请求参数问题、上传文件格式不支持。

短视频录制是否有拍照功能?

短视频 SDK 可以实现拍照功能,开始预览后调用TXUGCRecord类的snapshot接口获取图片即可。


  • 名称: 短视频SDK
  • 关键词: 短视频UGSV,短视频SDK,拍摄剪辑及视频特效制作,腾讯云