package com.niuxiaofa.newlaw.videoupload.impl;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import com.niuxiaofa.newlaw.videoupload.TXUGCPublishTypeDef;
import com.niuxiaofa.newlaw.videoupload.impl.compute.TXHttpTaskMetrics;
import com.niuxiaofa.newlaw.videoupload.impl.compute.TXOnGetHttpTaskMetrics;
import com.tencent.cos.xml.CosXmlService;
import com.tencent.cos.xml.CosXmlServiceConfig;
import com.tencent.cos.xml.exception.CosXmlClientException;
import com.tencent.cos.xml.exception.CosXmlServiceException;
import com.tencent.cos.xml.listener.CosXmlProgressListener;
import com.tencent.cos.xml.listener.CosXmlResultListener;
import com.tencent.cos.xml.model.CosXmlRequest;
import com.tencent.cos.xml.model.CosXmlResult;
import com.tencent.cos.xml.model.object.InitMultipartUploadRequest;
import com.tencent.cos.xml.model.object.InitMultipartUploadResult;
import com.tencent.cos.xml.model.object.PutObjectRequest;
import com.tencent.cos.xml.transfer.COSXMLUploadTask;
import com.tencent.cos.xml.transfer.TransferConfig;
import com.tencent.cos.xml.transfer.TransferManager;
import com.tencent.cos.xml.transfer.TransferState;
import com.tencent.cos.xml.transfer.TransferStateListener;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* 视频上传客户端
*/
public class TVCClient {
private final static String TAG = "TVC-Client";
private Context context;
private Handler mainHandler;
private boolean busyFlag = false;
private boolean cancleFlag = false;
private TVCUploadInfo uploadInfo;
private UGCClient ugcClient;
private TVCUploadListener tvcListener;
private int cosAppId; //点播上传用到的COS appid
private int userAppId; //客户自己的appid,数据上报需要
private String uploadRegion = "";
private String cosBucket;
private String cosTmpSecretId = "";
private String cosTmpSecretKey = "";
private String cosToken = "";
private long cosExpiredTime;
private long localTimeAdvance = 0; //本地时间相对unix时间戳提前间隔
private String cosVideoPath;
private String videoFileId;
private String cosCoverPath;
private boolean isOpenCosAcc = false; //是否使用cos动态加速
private String cosAccDomain = ""; //动态加速域名
private String cosHost = "";
private String domain;
private String cosIP = "";
private String vodSessionKey = null;
private long reqTime = 0; //各阶段开始请求时间
private long initReqTime = 0; //上传请求时间,用于拼接reqKey。串联请求
private String customKey = ""; //用于数据上报
private CosXmlService mCosXmlService;
private COSXMLUploadTask mCOSXMLUploadTask;
private TransferConfig mTransferConfig;
private TransferManager mTransferManager;
// 断点重传session本地缓存
// 以文件路径作为key值得,存储的内容是<session, uploadId, fileLastModify, expiredTime>
private static final String LOCALFILENAME = "TVCSession";
private SharedPreferences mSharedPreferences;
private SharedPreferences.Editor mShareEditor;
private String uploadId = null;
private long fileLastModTime = 0; //视频文件最后修改时间
private long coverFileLastModTime = 0; //封面文件最后修改时间
private boolean enableResume = true;
private boolean enableHttps = false;
private UGCReport.ReportInfo reportInfo;
private static final int VIRTUAL_TOTAL_PERCENT = 10; //前后的虚拟进度占的百分比
private TimerTask virtualProgress = null; //虚拟进度任务
private Timer mTimer; //定时器
private int virtualPercent = 0; //虚拟进度
private boolean realProgressFired = false;
private int vodCmdRequestCount = 0; //vod信令重试次数
/**
* 初始化上传实例
*
* @param signature 签名
* @param iTimeOut 超时时间
*/
public TVCClient(Context context, String customKey, String signature, boolean enableResume, boolean enableHttps, int iTimeOut) {
TXUGCPublishOptCenter.getInstance().prepareUpload(signature);
this.context = context.getApplicationContext();
ugcClient = UGCClient.getInstance(signature, iTimeOut);
mainHandler = new Handler(context.getMainLooper());
mSharedPreferences = context.getSharedPreferences(LOCALFILENAME, Activity.MODE_PRIVATE);
mShareEditor = mSharedPreferences.edit();
this.enableResume = enableResume;
this.enableHttps = enableHttps;
this.customKey = customKey;
reportInfo = new UGCReport.ReportInfo();
clearLocalCache();
}
/**
* 初始化上传实例
*
* @param ugcSignature 签名
*/
public TVCClient(Context context, String customKey, String ugcSignature, boolean resumeUpload, boolean enableHttps) {
this(context, customKey, ugcSignature, resumeUpload, enableHttps, 8);
}
// 清理一下本地缓存,过期的删掉
private void clearLocalCache() {
if (mSharedPreferences != null) {
try {
Map<String, ?> allContent = mSharedPreferences.getAll();
//注意遍历map的方法
for(Map.Entry<String, ?> entry : allContent.entrySet()){
JSONObject json = new JSONObject((String) entry.getValue());
long expiredTime = json.optLong("expiredTime", 0);
// 过期了清空key
if (expiredTime < System.currentTimeMillis() / 1000) {
mShareEditor.remove(entry.getKey());
mShareEditor.commit();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void startTimer() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
if (virtualProgress != null) {
virtualProgress = null;
}
if (virtualProgress == null) {
virtualProgress = new TimerTask() {
@Override
public void run() {
postVirtualProgress();
}
};
}
mTimer = new Timer();
mTimer.schedule(virtualProgress, 2000/VIRTUAL_TOTAL_PERCENT, 2000/VIRTUAL_TOTAL_PERCENT); //前后的虚拟进度大概持续2s
}
private void stopTimer() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
if (virtualProgress != null) {
virtualProgress = null;
}
}
private void postVirtualProgress() {
if (uploadInfo != null) {
long total = uploadInfo.getFileSize() + (uploadInfo.isNeedCover()? uploadInfo.getCoverFileSize(): 0);
if ((virtualPercent >= 0 && virtualPercent < 10) || (virtualPercent >=90 && virtualPercent <100)) {
++virtualPercent;
notifyUploadProgress(virtualPercent * total / 100, total);
}
}
}
// 通知上层上传成功
private void notifyUploadSuccess(final String fileId, final String playUrl, final String coverUrl) {
TXUGCPublishOptCenter.getInstance().delPublishing(uploadInfo.getFilePath());
final long total = uploadInfo.getFileSize() + (uploadInfo.isNeedCover()? uploadInfo.getCoverFileSize(
没有合适的资源?快使用搜索试试~ 我知道了~
java牛晓法APP.zip
共600个文件
java:234个
png:208个
xml:144个
需积分: 5 0 下载量 158 浏览量
2024-02-04
20:12:42
上传
评论
收藏 34.48MB ZIP 举报
温馨提示
java牛晓法APP.zip
资源推荐
资源详情
资源评论
收起资源包目录
java牛晓法APP.zip (600个子文件)
open_ad_sdk_3.9.0.0.aar 7.04MB
alipaysdk-15.8.03.210428205839.aar 351KB
gradlew.bat 2KB
lode.gif 16KB
.gitignore 6B
build.gradle 5KB
build.gradle 2KB
settings.gradle 42B
gradlew 5KB
open_sdk_r5886_lite.jar 236KB
gradle-wrapper.jar 53KB
TVCClient.java 47KB
FileUtils.java 43KB
ProgressWheel.java 21KB
BaseExpandableRecyclerViewAdapter.java 19KB
JZMediaAliyun.java 14KB
CameraUtils.java 13KB
EnergyFragment.java 13KB
DatabaseManger.java 13KB
WisdomLibraryPresenter.java 13KB
TXUGCPublish.java 12KB
InviteBean.java 12KB
ConnoisseurActivity.java 12KB
MainActivity.java 12KB
BaseActivity.java 11KB
TVCUtils.java 11KB
PublishDynamicActivity.java 10KB
CommonPopWindow.java 10KB
UserInfoBean.java 10KB
UUDateUtils.java 10KB
UGCReport.java 9KB
NineGridLayout.java 9KB
PickerScrollView.java 9KB
IndicatorView.java 9KB
SplashActivity.java 9KB
VideoListBean.java 9KB
GlideEngine.java 8KB
SmallVideoBean.java 8KB
JZMediaIjk.java 8KB
UGCClient.java 8KB
GlideUtils.java 8KB
QueryVideoListByLableBean.java 8KB
ApiService.java 8KB
TXUGCPublishOptCenter.java 8KB
ExpertBean.java 8KB
DataCleanManager.java 8KB
BlindBoxActivity.java 7KB
CourseInfoBean.java 7KB
AnswerQuestionsSignActivity.java 7KB
PhoneCode.java 7KB
CustomMonthView.java 7KB
LoginActivity.java 6KB
MeiZuActivity.java 6KB
VideosBean.java 6KB
LawUniversalPresenter.java 6KB
MePresenter.java 6KB
AnswerQuestionsActivity.java 6KB
WisdomLibraryFragment.java 6KB
UserPresenter.java 6KB
MyCreditsActivity.java 6KB
DownloadUtil.java 6KB
WXEntryActivity.java 6KB
SmaillAdapter.java 6KB
TXUGCPublishTypeDef.java 6KB
NetworkUtils.java 6KB
RoadGrowthActivity.java 5KB
CollapsibleTextView.java 5KB
TVCDnsCache.java 5KB
MeiZuMonthView.java 5KB
MemberFragmentRecordBean.java 5KB
CourseActivity.java 5KB
ConsultationActivity.java 5KB
PersonalHomeActivity.java 5KB
ConsultingActivity.java 5KB
UIUtils.java 5KB
MyScrollView.java 5KB
LawUniversalFragment.java 5KB
ShareTool.java 5KB
SelectImageAdapter.java 5KB
ServiceManager.java 5KB
MeFragment.java 5KB
ActivityUtil.java 4KB
FollowFansBean.java 4KB
RegisterActivity.java 4KB
MeizuWeekView.java 4KB
WebviewTool.java 4KB
SystemUtil.java 4KB
TVCUploadInfo.java 4KB
MonitorInfoBean.java 4KB
ViewPagerLayoutManager.java 4KB
MyApplication.java 4KB
BaseFragment.java 4KB
NewOrderBean.java 4KB
UpVideoActivity.java 4KB
TVCNetWorkStateReceiver.java 4KB
UserNameLoginActivity.java 3KB
ShareDialog.java 3KB
CourseDetailsActivity.java 3KB
HeatBean.java 3KB
MyOrderActivity.java 3KB
共 600 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
YOLO数据集工作室
- 粉丝: 490
- 资源: 1570
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功