static void Main(string[] args) { try { /* 输入个人信息 */ /* 开发者平台分配的appkey 和 appSecret */ String appKey = ""; String appSecret = ""; Credentials credentials = new Credentials(appKey, appSecret); VcloudClient vclient = new VcloudClient(credentials); IDictionary <String, Object> initParamMap = new Dictionary <String, Object>(); /*输入上传文件的相关信息 */ /* 上传文件的原始名称(包含后缀名) 此参数必填*/ initParamMap.Add("originFileName", "你好.mp4"); /* 用户命名的上传文件名称 此参数非必填*/ initParamMap.Add("userFileName", "for_love.mp4"); /* 视频所属的类别ID(不填写为默认分类)此参数非必填*/ //initParamMap.Add("typeId", 1056); /* 频所需转码模板ID(不填写为默认模板) 此参数非必填*/ //initParamMap.Add("presetId", 30599); /* 转码成功后回调客户端的URL地址(需标准http格式) 此参数非必填*/ initParamMap.Add("callbackUrl", null); /* 上传视频的描述信息 此参数非必填*/ initParamMap.Add("description", "love.mp4"); /* 上传视频的视频水印Id 此参数非必填*/ //initParamMap.Add("watermarkId",1); /** 上传成功后回调客户端的URL地址(需标准http格式) */ //initParamMap.Add("uploadCallbackUrl", ""); /** 用户自定义信息,会在上传成功或转码成功后通过回调返回给用户 */ //initParamMap.Add("userDefInfo", null); /*视频上传初始化返回结果的封装类*/ InitUploadVideoParam initUploadVideoParam = vclient.initUploadVideo(initParamMap); if (initUploadVideoParam.code == 200) { Console.WriteLine("上传初始化成功. xNosToken:{0} bucket:{1} objectName:{2}", initUploadVideoParam.ret.xNosToken, initUploadVideoParam.ret.bucket, initUploadVideoParam.ret.objectName); } else { Console.WriteLine("上传初始化失败. msg: " + initUploadVideoParam.msg); } } catch (Exception e) { Console.WriteLine(e.Message); } }
/// <summary> /// 上传视频分片的构造函数 /// </summary> /// <param name="initUploadVideoParam">视频上传初始化返回结果的封装类</param> /// <param name="getUploadHostParam">获取上传加速节点地址返回结果的封装类</param> /// <param name="offset">当前分片在整个对象中的起始偏移量</param> /// <param name="context">上传上下文</param> /// <param name="fileStream">上传文件的输出流</param> /// <param name="remainderSize">上传文件剩余大小</param> public UploadUtil(InitUploadVideoParam initUploadVideoParam, GetUploadHostParam getUploadHostParam, long offset, string context, FileStream fileStream, long remainderSize) { this.bucket = initUploadVideoParam.ret.bucket; this.uploadHost = getUploadHostParam.upload[0]; this.objectName = initUploadVideoParam.ret.objectName; this.offset = offset; this.context = context; this.fileStream = fileStream; this.remainderSize = remainderSize; this.xNosToken = initUploadVideoParam.ret.xNosToken; }
/// <summary> /// 视频上传初始化 /// </summary> /// <returns>视频上传初始化返回结果的封装类</returns> public InitUploadVideoParam initUploadVideo() { string url = "https://vcloud.163.com/app/vod/upload/init"; string json = JsonHelper.ToJsonString(initUploadVideoModule); string responseJson = HttpClientBuilder.HttpPost(url, json); // Console.WriteLine(responseJson); string responseJsonNew = responseJson.Replace("\"object\"", "\"objectName\""); // Console.WriteLine(responseJsonNew); InitUploadVideoParam initUploadVideoParam = JsonHelper.ToObject <InitUploadVideoParam>(responseJsonNew); return(initUploadVideoParam); }
/// <summary> /// 上传视频服务函数,返回视频id /// </summary> /// <param name="uploadIP"></param> /// <param name="videoName"></param> /// <param name="data"></param> /// <param name="filelength"></param> /// <returns></returns> public string UploadVideo(string uploadIP, string videoName, Stream data, long filelength) { IDictionary <string, object> initParamMap = helper.InitParam(videoName); /*视频上传初始化*/ /*视频上传初始化返回结果的封装类*/ InitUploadVideoParam initUploadVideoParam = vclient.initUploadVideo(initParamMap); if (initUploadVideoParam.code != 200) { throw new VcloudException("[VcloudClient]上传初始化失败 return code : " + initUploadVideoParam.code + " return message: " + initUploadVideoParam.msg); } /*获取上传加速节点地址*/ /*获取上传加速节点地址返回结果的封装类*/ GetUploadHostParam getUploadHostParam = vclient.getUploadHost(initUploadVideoParam); if (null == getUploadHostParam || null == getUploadHostParam.upload || getUploadHostParam.upload.Count == 0) { throw new VcloudException("[VcloudClient]获取上传加速节点地址失败 return code: " + getUploadHostParam.code + " return message: " + getUploadHostParam.Message); } try { /*分片上传视频*/ /*当前分片在整个对象中的起始偏移量 */ long offset = 0; /*上传上下文*/ string context = null; /* 纪录上传文件的剩余大小*/ long remainderSize = filelength; /*分片上传视频*/ while (remainderSize > 0) { UploadVideoFragmentParam uploadVideoParam = vclient.uploadVideoFragment(initUploadVideoParam, getUploadHostParam, offset, context, data, remainderSize); if (null == uploadVideoParam.errMsg || "".Equals(uploadVideoParam.errMsg.Trim())) { context = uploadVideoParam.context; offset = uploadVideoParam.offset; remainderSize = filelength - offset; // Console.WriteLine("uploadVideoParam.errMsg:" + uploadVideoParam.errMsg); } else { throw new VcloudException("upload videoFragment fail. errMsg: " + uploadVideoParam.errMsg + " requestID: " + uploadVideoParam.requestId); } } if (remainderSize == 0) { /* 查询上传视频的vid*/ List <string> objectNamesList = new List <string>(); objectNamesList.Add(initUploadVideoParam.ret.objectName); /*查询上传视屏返回结果的封装类*/ QueryVideoIDorWatermarkIDParam queryVideoIDParam = vclient.queryVideoID(objectNamesList); return(queryVideoIDParam.ret.list[0].vid.ToString()); } else { throw new VcloudException("文件未传输完成"); } } catch (Exception e) { throw e; } }
/// <summary> /// 获取上传加速节点地址 /// </summary> /// <param name="initUploadVideoParam">视频上传初始化返回结果的封装类</param> /// <returns>获取上传加速节点地址返回结果的封装类</returns> public GetUploadHostParam getUploadHost(InitUploadVideoParam initUploadVideoParam) { return(this.getUploadHost(initUploadVideoParam.ret.bucket)); }
/// <summary> /// 文件第一次上传 /// </summary> /// <param name="filePath">上传文件路径</param> /// <param name="initParamMap">上传文件的相关信息集合</param> /// <param name="recorder">断点续传时记录上传进度的对象</param> /// <returns>上传完成则返回查询视频ID返回结果的封装类,否则抛出文件未传输完成异常</returns> public QueryVideoIDorWatermarkIDParam uploadVideoFirstWithRecorder(string filePath, IDictionary <String, Object> initParamMap, UploadRecorder recorder) { /*视频上传初始化*/ /*视频上传初始化返回结果的封装类*/ InitUploadVideoParam initUploadVideoParam = initUploadVideo(initParamMap); if (initUploadVideoParam.code != 200) { throw new VcloudException("[VcloudClient]上传初始化失败 return code : " + initUploadVideoParam.code + " return message: " + initUploadVideoParam.msg); } /*获取上传加速节点地址*/ /*获取上传加速节点地址返回结果的封装类*/ GetUploadHostParam getUploadHostParam = getUploadHost(initUploadVideoParam); if (null == getUploadHostParam || null == getUploadHostParam.upload || getUploadHostParam.upload.Count == 0) { throw new VcloudException("[VcloudClient]获取上传加速节点地址失败 return code: " + getUploadHostParam.code + " return message: " + getUploadHostParam.Message); } /*分片上传视频*/ /*当前分片在整个对象中的起始偏移量 */ long offset = 0; /*上传上下文*/ string context = null; /*上传文件的输出流 */ FileStream fileStream = null; //int count = 0; try { fileStream = FileUtil.getFileInputStream(filePath); /*上传文件剩余大小*/ long fileLength = FileUtil.getFileLength(filePath); long remainderSize = fileLength; /*分片上传视频*/ while (remainderSize > 0) { UploadVideoFragmentParam uploadVideoParam = uploadVideoFragment(initUploadVideoParam, getUploadHostParam, offset, context, fileStream, remainderSize); if (null == uploadVideoParam.errMsg || "".Equals(uploadVideoParam.errMsg.Trim())) { context = uploadVideoParam.context; offset = uploadVideoParam.offset; remainderSize = fileLength - offset; string bucket = initUploadVideoParam.ret.bucket; string uploadHost = getUploadHostParam.upload[0]; string objectName = initUploadVideoParam.ret.objectName; string offsetStr = Convert.ToString(offset); // string context = saveInfo[4]; string remainderSizeStr = Convert.ToString(remainderSize); string xNosToken = initUploadVideoParam.ret.xNosToken; string[] saveInfo = new string[] { bucket, uploadHost, objectName, offsetStr, context, remainderSizeStr, xNosToken }; recorder.saveRecorderInfo(saveInfo); /* * count++; * if (count == 1) * { * Console.WriteLine("******************************第一次强制中断************"); * break; * }*/ } else { throw new VcloudException("upload videoFragment fail. errMsg: " + uploadVideoParam.errMsg + " requestID: " + uploadVideoParam.requestId); } } if (remainderSize == 0) { recorder.deleteRecorder(); /* 查询上传视频的vid*/ List <string> objectNamesList = new List <string>(); objectNamesList.Add(initUploadVideoParam.ret.objectName); /*查询上传视屏返回结果的封装类*/ QueryVideoIDorWatermarkIDParam queryVideoIDParam = queryVideoID(objectNamesList); return(queryVideoIDParam); } else { throw new VcloudException("文件未传输完成"); //return null; } } catch (Exception e) { throw new VcloudException(e.Message); } }
/// <summary> /// 简单视频上传 /// </summary> /// <param name="filePath">上传文件路径</param> /// <param name="initParamMap">上传文件的相关信息集合</param> /// <returns>上传完成后查询视频ID返回结果的封装类</returns> public QueryVideoIDorWatermarkIDParam uploadVideo(string filePath, IDictionary <String, Object> initParamMap) { if (!FileUtil.doesFileExist(filePath)) { throw new VcloudException(string.Format("{0} does not exist", filePath)); } /*视频上传初始化*/ /*视频上传初始化返回结果的封装类*/ InitUploadVideoParam initUploadVideoParam = initUploadVideo(initParamMap); if (initUploadVideoParam.code != 200) { throw new VcloudException("[VcloudClient]上传初始化失败 return code : " + initUploadVideoParam.code + " return message: " + initUploadVideoParam.msg); } /*获取上传加速节点地址*/ /*获取上传加速节点地址返回结果的封装类*/ GetUploadHostParam getUploadHostParam = getUploadHost(initUploadVideoParam); if (null == getUploadHostParam || null == getUploadHostParam.upload || getUploadHostParam.upload.Count == 0) { throw new VcloudException("[VcloudClient]获取上传加速节点地址失败 return code: " + getUploadHostParam.code + " return message: " + getUploadHostParam.Message); } try { /*分片上传视频*/ /*当前分片在整个对象中的起始偏移量 */ long offset = 0; /*上传上下文*/ string context = null; /*上传文件的输出流 */ FileStream fileStream = null; fileStream = FileUtil.getFileInputStream(filePath); /*上传文件剩余大小*/ long fileLength = FileUtil.getFileLength(filePath); long remainderSize = fileLength; /*分片上传视频*/ while (remainderSize > 0) { UploadVideoFragmentParam uploadVideoParam = uploadVideoFragment(initUploadVideoParam, getUploadHostParam, offset, context, fileStream, remainderSize); if (null == uploadVideoParam.errMsg || "".Equals(uploadVideoParam.errMsg.Trim())) { context = uploadVideoParam.context; offset = uploadVideoParam.offset; remainderSize = fileLength - offset; // Console.WriteLine("uploadVideoParam.errMsg:" + uploadVideoParam.errMsg); } else { throw new VcloudException("upload videoFragment fail. errMsg: " + uploadVideoParam.errMsg + " requestID: " + uploadVideoParam.requestId); } } if (remainderSize == 0) { /* 查询上传视频的vid*/ List <string> objectNamesList = new List <string>(); objectNamesList.Add(initUploadVideoParam.ret.objectName); /*查询上传视屏返回结果的封装类*/ QueryVideoIDorWatermarkIDParam queryVideoIDParam = queryVideoID(objectNamesList); return(queryVideoIDParam); } else { throw new VcloudException("文件未传输完成"); } } catch (Exception e) { throw new VcloudException("[VcloudClient]上传视频失败。 error message: " + e.Message); } }
/// <summary> /// 上传视频分片 /// </summary> /// <param name="initUploadVideoParam">视频上传初始化返回结果的封装类</param> /// <param name="getUploadHostParam">获取上传加速节点地址返回结果的封装类</param> /// <param name="offset">当前分片在整个对象中的起始偏移量</param> /// <param name="context">上传上下文</param> /// <param name="fileStream">上传文件的输出流</param> /// <param name="remainderSize">上传文件剩余大小</param> /// <returns>分片上传视频返回结果的封装类</returns> public UploadVideoFragmentParam uploadVideoFragment(InitUploadVideoParam initUploadVideoParam, GetUploadHostParam getUploadHostParam, long offset, string context, FileStream fileStream, long remainderSize) { UploadUtil util = new UploadUtil(initUploadVideoParam, getUploadHostParam, offset, context, fileStream, remainderSize); return(util.uploadVideoFragment()); }
static void Main(string[] args) { try { /* 输入个人信息 */ /* 开发者平台分配的appkey 和 appSecret */ String appKey = ""; String appSecret = ""; Credentials credentials = new Credentials(appKey, appSecret); VcloudClient vclient = new VcloudClient(credentials); /*请输入上传文件路径*/ string filePath = "e:\\1.mp4"; if (!FileUtil.doesFileExist(filePath)) { throw new VcloudException(string.Format("{0} does not exist", filePath)); } IDictionary <String, Object> initParamMap = new Dictionary <String, Object>(); /*输入上传文件的相关信息 */ /* 上传文件的原始名称(包含后缀名) 此参数必填*/ initParamMap.Add("originFileName", FileUtil.getFileName(filePath)); /* 用户命名的上传文件名称 此参数非必填*/ initParamMap.Add("userFileName", "你好.mp4"); /* 视频所属的类别ID(不填写为默认分类)此参数非必填*/ //initParamMap.Add("typeId", 1056); /* 频所需转码模板ID(不填写为默认模板) 此参数非必填*/ //initParamMap.Add("presetId", 30599); /* 转码成功后回调客户端的URL地址(需标准http格式) 此参数非必填*/ initParamMap.Add("callbackUrl", null); /* 上传视频的描述信息 此参数非必填*/ initParamMap.Add("description", "love.mp4"); /* 上传视频的视频水印Id 此参数非必填*/ //initParamMap.Add("watermarkId",1); /** 上传成功后回调客户端的URL地址(需标准http格式) */ //initParamMap.Add("uploadCallbackUrl", ""); /** 用户自定义信息,会在上传成功或转码成功后通过回调返回给用户 */ //initParamMap.Add("userDefInfo", null); /*视频上传初始化*/ /*视频上传初始化返回结果的封装类*/ InitUploadVideoParam initUploadVideoParam = vclient.initUploadVideo(initParamMap); if (initUploadVideoParam.code != 200) { Console.WriteLine("上传初始化失败"); return; } /*获取上传加速节点地址*/ /*获取上传加速节点地址返回结果的封装类*/ GetUploadHostParam getUploadHostParam = vclient.getUploadHost(initUploadVideoParam); if (null == getUploadHostParam) { Console.WriteLine("获取加速节点失败"); return; } /*分片上传视频*/ /*当前分片在整个对象中的起始偏移量 此参数必填*/ long offset = 0; /*上传上下文 此参数必填*/ string context = null; /*上传文件的输出流 此参数必填*/ FileStream fileStream = null; fileStream = FileUtil.getFileInputStream(filePath); /*上传文件剩余大小*/ long fileLength = FileUtil.getFileLength(filePath); long remainderSize = fileLength; /*分片上传视频*/ while (remainderSize > 0) { UploadVideoFragmentParam uploadVideoParam = vclient.uploadVideoFragment(initUploadVideoParam, getUploadHostParam, offset, context, fileStream, remainderSize); context = uploadVideoParam.context; offset = uploadVideoParam.offset; remainderSize = fileLength - offset; } /* 查询上传视频的vid*/ List <string> objectNamesList = new List <string>(); objectNamesList.Add(initUploadVideoParam.ret.objectName); /*查询上传视屏返回结果的封装类*/ QueryVideoIDorWatermarkIDParam queryVideoIDParam = vclient.queryVideoID(objectNamesList); Console.WriteLine("[UploadVideoDemo] video id :" + queryVideoIDParam.ret.list[0].vid); } catch (Exception e) { Console.WriteLine("上传失败:" + e.Message); } }