tencent cloud

文档反馈

Android 上传 SDK

最后更新时间:2024-05-16 14:45:20
    对于在 Android 平台上传视频的场景,云点播提供了 Android 上传 SDK。上传流程请参见 客户端上传指引
    SDK 名称
    云点播 Android 上传 SDK
    版本号
    V1.1.23.0
    SDK 介绍
    为 App 的最终用户提供本地视频上传到云点播平台的场景
    开发者
    腾讯云计算(北京)有限责任公司
    下载 SDK
    1. 单击下载 Android 上传 Demo 及源码,将下载好的压缩包解压,可以看到 Demo 目录。
    2. 上传源码在 Demo/app/src/main/java/com/tencent/ugcupload/demo/videoupload 目录下。

    集成上传库和源码

    1. 拷贝上传源码目录Demo/app/src/main/java/com/tencent/ugcupload/demo/videoupload到您的工程目录中,需要手动修改一下 package 名。
    2. 参考Demo/app/build.gradle在您的工程中添加依赖:
    implementation 'com.qcloud.cos:cos-android-nobeacon:5.9.25'
    implementation 'com.qcloud.cos:quic:1.5.43'
    说明:
    您也可以参见 手动集成 文档集成对应版本的依赖库。
    3. 使用视频上传需要网络、存储等相关访问权限,可在AndroidManifest.xml中增加如下权限声明:
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    4. 视频上传需要根据网络变化来刷新上传 IP,可按照业务需要动态注册广播,示例如下:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // your code......
    registerNetReceiver();
    }
    
    private void registerNetReceiver() {
    if (null == mNetWorkStateReceiver) {
    mNetWorkStateReceiver = new TVCNetWorkStateReceiver();
    IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(mNetWorkStateReceiver, intentFilter);
    }
    }
    
    private void unRegisterNetReceiver() {
    if (null != mNetWorkStateReceiver) {
    unregisterReceiver(mNetWorkStateReceiver);
    }
    }
    
    @Override
    protected void onDestroy() {
    super.onDestroy();
    // your code......
    unRegisterNetReceiver();
    }

    简单视频上传

    初始化上传对象

    TXUGCPublish mVideoPublish = new TXUGCPublish(this.getApplicationContext(), "independence_android")

    设置上传对象回调

    mVideoPublish.setListener(new TXUGCPublishTypeDef.ITXVideoPublishListener() {
    @Override
    public void onPublishProgress(long uploadBytes, long totalBytes) {
    mProgress.setProgress((int) (100*uploadBytes/totalBytes));
    }
    
    @Override
    public void onPublishComplete(TXUGCPublishTypeDef.TXPublishResult result) {
    mResultMsg.setText(result.retCode + " Msg:" + (result.retCode == 0 ? result.videoURL : result.descMsg));
    }
    });

    构造上传参数

    TXUGCPublishTypeDef.TXPublishParam param = new TXUGCPublishTypeDef.TXPublishParam();
    
    param.signature = "xxx";
    param.videoPath = "xxx";
    signature计算规则请参见 客户端上传签名

    调用上传

    int publishCode = mVideoPublish.publishVideo(param);

    简单图片上传

    初始化上传对象

    TXUGCPublish mVideoPublish = new TXUGCPublish(this.getApplicationContext(), "independence_android")

    设置上传对象回调

    mVideoPublish.setListener(new TXUGCPublishTypeDef.ITXMediaPublishListener() {
    @Override
    public void onMediaPublishProgress(long uploadBytes, long totalBytes) {
    mProgress.setProgress((int) (100*uploadBytes/totalBytes));
    }
    @Override
    public void onMediaPublishComplete(TXUGCPublishTypeDef.TXMediaPublishResult mediaResult) {
    mResultMsg.setText(result.retCode + " Msg:" + (result.retCode == 0 ? result.videoURL : result.descMsg));
    }
    });

    构造上传参数

    TXUGCPublishTypeDef.TXMediaPublishParam param = new TXUGCPublishTypeDef.TXMediaPublishParam();
    
    param.signature = "xxx";
    param.mediaPath = "xxx";
    signature计算规则请参见 客户端上传签名

    调用上传

    int publishCode = mVideoPublish.publishMedia(param);
    说明:
    上传方法根据用户文件的长度,自动选择普通上传以及分片上传,用户不用关心分片上传的每个步骤,即可实现分片上传。
    如需上传至指定子应用下,请参见 子应用体系 - 客户端上传

    高级功能

    携带封面

    在上传参数中带上封面路径即可。
    TXUGCPublishTypeDef.TXPublishParam param = new TXUGCPublishTypeDef.TXPublishParam();
    param.signature = "xxx";
    param.videoPath = "xxx";
    param.coverPath = "xxx";
    signature计算规则请参见 客户端上传签名

    取消和恢复上传

    取消上传,调用TXUGCPublishcancleublish()接口。
    mVideoPublish.canclePublish();
    恢复上传,用相同的上传参数(视频路径和封面路径不变),再调用一次TXUGCPublishpublishVideo

    断点续传

    在视频上传过程中,云点播支持断点续传,即当上传意外终止时,用户再次上传该文件,可以从中断处继续上传,减少重复上传时间。断点续传的有效时间是1天,即同一个视频上传被中断,那么1天内再次上传可以直接从断点处上传,超过1天默认会重新上传完整视频。
    上传参数中的enableResume为断点续传开关,默认是开启的。

    预上传

    在实际上传过程中,很大部分的错误是由于网络连接失败或超时导致的,为优化此类问题,我们增加了预上传优化逻辑。预上传包含:HTTPDNS 解析、获取建议上传地域、探测最优上传地域。
    建议您在 App 启动的时候调用TXUGCPublishOptCenter.getInstance().prepareUpload(signature),预上传模块会把<域名,IP>映射表和最优上传地域缓存在本地,如果此前动态注册了网络广播,订阅到网络切换时,清空缓存并自动刷新。
    signature计算规则请参见 客户端上传签名

    开启 https 上传

    将上传参数中 TXPublishParam 中的 enableHTTPS 置为 true 即可,默认 false。
    TXUGCPublishTypeDef.TXPublishParam param = new TXUGCPublishTypeDef.TXPublishParam();
    param.enableHttps = true;

    关闭日志

    关闭日志需要通过 TXUGCPublish 的setIsDebug方法进行操作,默认开启。开启的情况下,会打印 logcat 日志,同时也会将 log 保存到 app 私有目录下。
    // false 关闭日志
    mTXUGCPublish.setIsDebug(false);

    视频上传接口描述

    初始化上传对象:TXUGCPublish
    参数名称
    参数描述
    类型
    必填
    context
    application 上下文。
    Context
    customKey
    用于区分不同的用户,建议使用 App 的账号 ID,方便后续定位问题。
    String
    设置点播 appId:TXUGCPublish.setAppId
    参数名称
    参数描述
    类型
    必填
    appId
    点播 appId。
    int
    上传视频:TXUGCPublish.publishVideo
    参数名称
    参数描述
    类型
    必填
    param
    上传参数。
    TXUGCPublishTypeDef.TXPublishParam
    上传参数:TXUGCPublishTypeDef.TXPublishParam
    参数名称
    参数描述
    类型
    必填
    signature
    String
    videoPath
    本地视频文件路径。
    String
    coverPath
    本地封面文件路径,默认不带封面文件。
    String
    enableResume
    是否启动断点续传,默认开启。
    boolean
    enableHttps
    是否启动 HTTPS,默认关闭。
    boolean
    fileName
    上传到腾讯云的视频文件名称,不填默认用本地文件名。
    String
    enablePreparePublish
    是否开启预上传机制,默认开启。预上传机制可以大幅提升文件的上传质量
    boolean
    sliceSize
    分片大小,支持最小为1M,最大10M,默认为上传文件大小除以10
    long
    concurrentCount
    分片上传最大并发数量,默认为4个
    int
    trafficLimit
    限速值设置范围为819200 ~ 838860800,即100KB/s ~ 100MB/s,如果超出该范围会返回400错误。不建议将该值设置太小,防止超时。-1 表示不限速
    long
    uploadResumeController
    续点控制器,可自行实现续点键值的计算和保存,默认使用 md5 计算文件键值
    IUploadResumeController
    设置上传回调:TXUGCPublish.setListener
    参数名称
    参数描述
    类型
    必填
    listener
    上传进度和结果回调监听。
    TXUGCPublishTypeDef.ITXVideoPublishListener
    进度回调:TXUGCPublishTypeDef.ITXVideoPublishListener.onPublishProgress
    变量名称
    变量描述
    类型
    uploadBytes
    已上传的字节数。
    long
    totalBytes
    总字节数。
    long
    结果回调:TXUGCPublishTypeDef.ITXVideoPublishListener.onPublishComplete
    变量名称
    变量描述
    类型
    result
    上传结果。
    TXUGCPublishTypeDef.TXPublishResult
    上传结果:TXUGCPublishTypeDef.TXPublishResult
    成员变量名称
    变量说明
    类型
    retCode
    结果码。
    int
    descMsg
    上传失败的错误描述。
    String
    videoId
    点播视频文件 ID。
    String
    videoURL
    视频存储地址。
    String
    coverURL
    封面存储地址。
    String
    预上传:TXUGCPublishOptCenter.prepareUpload
    参数名称
    参数描述
    类型
    必填
    signature
    String

    图片上传接口描述

    初始化上传对象:TXUGCPublish
    参数名称
    参数描述
    类型
    必填
    context
    application 上下文。
    Context
    customKey
    用于区分不同的用户,建议使用 App 的账号 ID,方便后续定位问题。
    String
    设置点播 appId:TXUGCPublish.setAppId
    参数名称
    参数描述
    类型
    必填
    appId
    点播 appId。
    int
    上传图片:TXUGCPublish.publishMedia
    参数名称
    参数描述
    类型
    必填
    param
    上传参数。
    TXUGCPublishTypeDef.TXMediaPublishParam
    上传参数:TXUGCPublishTypeDef.TXMediaPublishParam
    参数名称
    参数描述
    类型
    必填
    signature
    String
    mediaPath
    本地图片文件路径。
    String
    enableResume
    是否启动断点续传,默认开启。
    boolean
    enableHttps
    是否启动 HTTPS,默认关闭。
    boolean
    fileName
    上传到腾讯云的视频文件名称,不填默认用本地文件名。
    String
    enablePreparePublish
    是否开启预上传机制,默认开启。预上传机制可以大幅提升文件的上传质量
    boolean
    sliceSize
    分片大小,支持最小为1M,最大10M,默认为上传文件大小除以10
    long
    concurrentCount
    分片上传最大并发数量,默认为4个
    int
    trafficLimit
    限速值设置范围为819200 ~ 838860800,即100KB/s ~ 100MB/s,如果超出该范围会返回400错误。不建议将该值设置太小,防止超时。-1 表示不限速
    long
    uploadResumeController
    续点控制器,可自行实现续点键值的计算和保存,默认使用md5计算文件键值
    IUploadResumeController
    设置上传回调:TXUGCPublish.setListener
    参数名称
    参数描述
    类型
    必填
    listener
    上传进度和结果回调订阅。
    TXUGCPublishTypeDef.ITXMediaPublishListener
    进度回调:TXUGCPublishTypeDef.ITXMediaPublishListener.onPublishProgress
    变量名称
    变量描述
    类型
    uploadBytes
    已上传的字节数。
    long
    totalBytes
    总字节数。
    long
    结果回调:TXUGCPublishTypeDef.ITXMediaPublishListener.onPublishComplete
    变量名称
    变量描述
    类型
    result
    上传结果。
    TXUGCPublishTypeDef.TXPublishResult
    上传结果:TXUGCPublishTypeDef.TXMediaPublishResult
    成员变量名称
    变量说明
    类型
    retCode
    结果码。
    int
    descMsg
    上传失败的错误描述。
    String
    mediaId
    点播媒体文件 ID。
    String
    mediaURL
    媒体资源存储地址。
    String
    预上传:TXUGCPublishOptCenter.prepareUpload
    参数名称
    参数描述
    类型
    必填
    signature
    String

    错误码

    SDK 通过TXUGCPublishTypeDef.ITXVideoPublishListener\\ITXMediaPublishListener接口来订阅视频上传相关的状态。因此,可以用TXUGCPublishTypeDef.TXPublishResult\\TXMediaPublishResult中的retCode来确认视频上传的情况。
    状态码
    在 TVCConstants 中所对应的常量
    含义
    0
    NO_ERROR
    上传成功。
    1001
    ERR_UGC_REQUEST_FAILED
    请求上传失败,通常是客户端签名过期或者非法,需要 App 重新申请签名。
    1002
    ERR_UGC_PARSE_FAILED
    请求信息解析失败。
    1003
    ERR_UPLOAD_VIDEO_FAILED
    上传视频失败。
    1004
    ERR_UPLOAD_COVER_FAILED
    上传封面失败。
    1005
    ERR_UGC_FINISH_REQUEST_FAILED
    结束上传请求失败。
    1006
    ERR_UGC_FINISH_RESPONSE_FAILED
    结束上传响应错误。
    1007
    ERR_CLIENT_BUSY
    客户端正忙(对象无法处理更多请求)。
    1008
    ERR_FILE_NOEXIT
    上传文件不存在。
    1009
    ERR_UGC_PUBLISHING
    视频正在上传中。
    1010
    ERR_UGC_INVALID_PARAM
    上传参数为空。
    1012
    ERR_UGC_INVALID_SIGNATURE
    视频上传 signature 为空。
    1013
    ERR_UGC_INVALID_VIDOPATH
    视频文件的路径为空。
    1014
    ERR_UGC_INVALID_VIDEO_FILE
    当前路径下视频文件不存在。
    1015
    ERR_UGC_FILE_NAME
    视频上传文件名太长(超过40)或含有特殊字符。
    1016
    ERR_UGC_INVALID_COVER_PATH
    视频文件封面路径不对,文件不存在。
    1017
    ERR_USER_CANCEL
    用户取消上传。
    1020
    ERR_UPLOAD_SIGN_EXPIRED
    签名过期。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持