hjr-JAVA:WEB支持任意格式视频播放

web浏览器目前用h5 标签即可,只支持特定编码的mp4。
用户很多时候不会转码操作,所以在上传的时候,应在在线自动转码
上传资源一般都存到第三方,存到自己服务器太占空间,在上传同时把视频在线转码为web mp4即可,比如阿里,七牛都有这种服务
如七牛:
建议上传部分用纯前端实现,包括分片上传,只需设置一个参数即可

var uploader = Qiniu.uploader({
        runtimes: 'html5,flash,html4',      // 上传模式,依次退化
        browse_button: 'pickfiles',         // 上传选择的点选按钮,必需
        // 在初始化时,uptoken,uptoken_url,uptoken_func三个参数中必须有一个被设置
        // 切如果提供了多个,其优先级为uptoken > uptoken_url > uptoken_func
        // 其中uptoken是直接提供上传凭证,uptoken_url是提供了获取上传凭证的地址,如果需要定制获取uptoken的过程则可以设置uptoken_func
        // uptoken : '<Your upload token>', // uptoken是上传凭证,由其他程序生成
         uptoken_url: $("#basePath").val()+'upload/uploadDocToken.do',         // Ajax请求uptoken的Url,强烈建议设置(服务端提供)
        // uptoken_func: function(file){    // 在需要获取uptoken时,该方法会被调用
        //    // do something
        //    return uptoken;
        // },
        get_new_uptoken: true,             // 设置上传文件的时候是否每次都重新获取新的uptoken
        // downtoken_url: '/downtoken',
        // Ajax请求downToken的Url,私有空间时使用,JS-SDK将向该地址POST文件的key和domain,服务端返回的JSON必须包含url字段,url值为该文件的下载地址
        unique_names: false,              // 默认false,key为文件名。若开启该选项,JS-SDK会为每个文件自动生成key(文件名)
        save_key: true,                  // 默认false。若在服务端生成uptoken的上传策略中指定了sava_key,则开启,SDK在前端将不对key进行任何处理
        dragdrop: true,
        domain: domainPara+"/",     // bucket域名,下载资源时用到,必需
        container: 'container',             // 上传区域DOM ID,默认是browser_button的父元素
        max_file_size: '500mb',             // 最大文件体积限制
        flash_swf_url: 'admin/assets/js/plupload-2.1.1/Moxie.swf',  //引入flash,相对路径
//        max_retries: 0,                     // 上传失败最大重试次数
//        dragdrop: true,                     // 开启可拖曳上传
        drop_element: 'container',          // 拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传
        chunk_size: '4mb',                  // 分块上传时,每块的体积
        auto_start: false,                   // 选择文件后自动上传,若关闭需要自己绑定事件触发上传
        log_level: 5,
        filters: {
	    	  mime_types : [ //只允许上传图片和zip文件
	    	    { title : "office files", extensions : "doc,docx" },
	    	  ],
	    	  max_file_size : '20mb', //最大只能上传400kb的文件
	    	  prevent_duplicates : true //不允许选取重复文件
    	},
        init: {
            'FilesAdded': function(up, files) {
                plupload.each(files, function(file) {
                    // 文件添加进队列后,处理相关的事情
                	if(progressDiv){
                		progressDiv.closeDiv(progressDiv.closeUp[0]);
                	}
                	progressDiv = getPDiv();
                	progressDiv.setTitle(file.name);
                	$("#sourceState").val(file.name+",已选择");
                	$("#pickfiles").after(progressDiv.getProgress());
                });
            },
            'BeforeUpload': function(up, file) {
                   // 每个文件上传前,处理相关的事情
            },
            'UploadProgress': function(up, file) {
                   // 每个文件上传时,处理相关的事情
            	progressDiv = getPDiv();
            	progressDiv.setPercent(file.percent);
            	progressDiv.setPercentTitle(file.percent);
            },
            'FileUploaded': function(up, file, info) {
                   // 每个文件上传成功后,处理相关的事情
                   // 其中info是文件上传成功后,服务端返回的json,形式如:
                   // {
                   //    "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
                   //    "key": "gogopher.jpg"
                   //  }
                   // 查看简单反馈
                   var domain = up.getOption('domain');
                   var res = $.parseJSON(info);
                   var sourceLink = domain + res.key; // 获取上传成功后的文件的Url
                   $("#sourceState").val(file.name+"已上传");
                   $("#sourceLink").val(sourceLink);
                   $("#quesViewUrl").val(sourceLink);
           		   progressDiv.closeDiv(progressDiv.closeUp[0]);
            },
            'Error': function(up, err, errTip) {
                   //上传出错时,处理相关的事情
            	   $("#sourceState").val("上传失败");
            },
            'UploadComplete': function() {
                   //队列文件处理完毕后,处理相关的事情
            },
//            'Key': function(up, file) {
//                // 若想在前端对每个文件的key进行个性化处理,可以配置该函数
//                // 该配置必须要在unique_names: false,save_key: false时才生效
//                var key = "";
//                // do something with key here
//                return key
//            }
        }
    });

后端做两件事,提供token和提供转码接口
必须设置的几个属性



qiniu.tokenutil.ak = **************
qiniu.tokenutil.sk = **************
#上面两个注册账号后在后台获取
qiniu.tokenutil.bucket = ***
#bucket是存储视频的网盘名字
#qiniu.tokenutil.expireSeconds = 3600

#qiniu.tokenutil.domain = http://www.xxx.com
#domain是预览视频的网址前缀

提供token的接口按照说明文档写就行。
转码接口,参数是文件名字,比如1232131.flv

@RequestMapping(value="/zhuanma",method = RequestMethod.GET,produces="application/json")
	@ResponseBody
	public String zhuanma(String fileName) throws XhException {
		if(fileName == null)
		{
			return "文件名不能为空!";
		}
		String accessKey = PropertiesUtil.getQiniuValue("qiniu.tokenutil.ak");
		String secretKey = PropertiesUtil.getQiniuValue("qiniu.tokenutil.sk");
		String bucket = PropertiesUtil.getQiniuValue("qiniu.tokenutil.bucket");
		String key = fileName;
		Auth auth = Auth.create(accessKey, secretKey);
		String persistentOpfs = "avthumb/mp4/ab/160k/ar/44100/acodec/libfaac/r/30/vb/2200k/vcodec/libx264/s/1280x720/autoscale/1/stripmeta/0";
		String saveas_key = UrlSafeBase64.encodeToString(bucket+":"+key+"-zhuanma");
		persistentOpfs = persistentOpfs+"|saveas/"+saveas_key;
		String persistentPipeline = "zhuanma";
		String persistentNotifyUrl = "http://api.example.com/qiniu/pfop/notify";
		Configuration cfg = new Configuration(Zone.zone0());
		OperationManager operationManager = new OperationManager(auth, cfg);
		String persistentId = "";
		try {
			persistentId = operationManager.pfop(bucket, key, persistentOpfs, persistentPipeline, persistentNotifyUrl, true);
			System.out.println(persistentId);
			OperationStatus operationStatus = operationManager.prefop(persistentId);
		} catch (QiniuException e) {
			System.err.println(e.response.toString());
		}
		return persistentId;
	}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师小侯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值