精华内容
下载资源
问答
  • 视频播放的过程中,用canvas定时截取一张图片,然后用gif.js生成一张GIF图,从而完成前端的视频压缩。 我这里使用的是Vue写的,以下是我的流程及代码: 一、下载gif.js相关文件,可以到这里下载,然后将这几个...
  • 静态文件压缩是十年前的技术,在视频、图片占据带宽主流的今天对很多网站已不再重要。但是,对于数据服务而言,静态文件压缩技术依然可以摆在显著位置值得一提,甚至可以说比十年前更加重要了。究其原因根本...

    gzip压缩js和html文件java源码

    作者:张颋 版本:V1.0 最后更新日期:2013/4/25  http://idata.blog.51cto.com

    静态文件压缩是十年前的技术,在视频、图片占据带宽主流的今天对很多网站已不再重要。但是,对于数据服务而言,静态文件压缩技术依然可以摆在显著位置值得一提,甚至可以说比十年前更加重要了。究其原因根本上是因为javascript和html5。在数据服务领域,笔者相信基于javascript+html5的数据可视化技术会成为未来的主流,这正是压缩技术的用武之地。

    引入第三方jar包实现压缩是可行的,但是这是以牺牲灵活性和简单性为代价的。在技术进步竞争激烈的今天,关键技术成为黑盒就好比与人赛跑的您身上又多了一道枷锁。下面的代码已在生产环境证实可行,期待您的反馈:

    web.xml

    
    
    1. <!-- ResponseFilter must be executed as the last one of the filter chain.--> 
    2. <filter> 
    3.     <filter-name>ResponseFilter</filter-name> 
    4.     <filter-class>com.datawebservice.ResponseFilter</filter-class> 
    5. </filter> 
    6.    <filter-mapping>     
    7.         <filter-name>ResponseFilter</filter-name> 
    8.         <url-pattern>/*</url-pattern>     
    9.    </filter-mapping> 

    ResponseFilter.java

    
    
    1. package com.datawebservice;  
    2.  
    3. import java.io.ByteArrayOutputStream;  
    4. import java.io.IOException;  
    5. import java.util.zip.GZIPOutputStream;  
    6.  
    7. import javax.servlet.Filter;  
    8. import javax.servlet.FilterChain;  
    9. import javax.servlet.FilterConfig;  
    10. import javax.servlet.ServletOutputStream;  
    11. import javax.servlet.ServletException;  
    12. import javax.servlet.ServletRequest;  
    13. import javax.servlet.ServletResponse;  
    14. import javax.servlet.http.HttpServletRequest;  
    15. import javax.servlet.http.HttpServletResponse;  
    16.  
    17. public class ResponseFilter implements Filter {  
    18.         public void init(FilterConfig filterConfig) throws ServletException {}  
    19.         public void doFilter(ServletRequest request, ServletResponse response,  
    20.                         FilterChain filterChain) throws IOException, ServletException {  
    21.                 HttpServletRequest httpServletRequest = (HttpServletRequest) request;  
    22.                 HttpServletResponse httpServletResponse = (HttpServletResponse) response;  
    23.                   
    24.                 String requestURI = httpServletRequest.getRequestURI();  
    25.                 if (requestURI.endsWith("html")|| requestURI.endsWith("js"))  
    26.                 {  
    27.                     ResponseWrapper wrapper = new ResponseWrapper(httpServletResponse);  
    28.                     filterChain.doFilter(request, wrapper);  
    29.                     String resultText = wrapper.getResultText();                      
    30.                     wrapper.close();  
    31.           
    32.                     //压缩  
    33.                     ByteArrayOutputStream os = new ByteArrayOutputStream();     
    34.                     GZIPOutputStream gzip = new GZIPOutputStream(os);     
    35.                     gzip.write(resultText.getBytes("UTF-8"));     
    36.                     gzip.close();     
    37.                        
    38.                      //输出  
    39.                      byte[] bytes = os.toByteArray();              
    40.                      httpServletResponse.setContentType("text/html; charset=UTF-8");   
    41.                      httpServletResponse.addHeader("Content-Length",Integer.toString(bytes.length));   
    42.                      httpServletResponse.addHeader("Content-Encoding""gzip");  
    43.                      ServletOutputStream output = httpServletResponse.getOutputStream();  
    44.                      output.write(bytes);  
    45.                      output.flush();  
    46.                      output.close();  
    47.                 }else {  
    48.                     filterChain.doFilter(httpServletRequest, httpServletResponse);  
    49.                 }  
    50.         }  
    51.         public void destroy() {}  

    ResponseWrapper.java

    
    
    1. package com.datawebservice;  
    2.  
    3. import java.io.ByteArrayOutputStream;  
    4. import java.io.IOException;  
    5. import java.io.PrintWriter;  
    6. import java.io.Writer;  
    7.  
    8. import javax.servlet.ServletOutputStream;  
    9. import javax.servlet.http.HttpServletResponse;  
    10. import javax.servlet.http.HttpServletResponseWrapper;  
    11.  
    12. public class ResponseWrapper extends HttpServletResponseWrapper {  
    13.     private String responseText="";  
    14.     private ByteArrayOutputStream responseStream=null;  
    15.       
    16.     public ResponseWrapper(HttpServletResponse response) {  
    17.         super(response);  
    18.         responseStream = new ByteArrayOutputStream();  
    19.     }  
    20.  
    21.     public String getResultText() {  
    22.         if(responseText.equals("")){  
    23.             try{  
    24.                 responseText= new String(responseStream.toByteArray(),"UTF-8");  
    25.             }catch(Exception e){  
    26.                 System.out.println("getResultText exception");  
    27.                 System.out.println(e.getMessage());  
    28.             }  
    29.         }  
    30.         return responseText;  
    31.     }  
    32.  
    33.     public byte[] getStreamBytes() {  
    34.         return responseStream.toByteArray();  
    35.     }  
    36.       
    37.     public void close(){  
    38.         try{  
    39.           responseStream.close();  
    40.         }catch(Exception e){  
    41.             System.out.println("ResponseWrapper.responseStream.close() throw exception");  
    42.             System.out.println(e.getMessage());  
    43.         }  
    44.     }  
    45.  
    46.     public ServletOutputStream getOutputStream() throws IOException {  
    47.         return (new MyServletOutputStream());  
    48.     }  
    49.        
    50.     public PrintWriter getWriter() throws IOException {  
    51.         return (new MyPrintWriter(new PrintWriter(new MyServletOutputStream())));  
    52.     }  
    53.       
    54.       class MyServletOutputStream extends ServletOutputStream{  
    55.           MyServletOutputStream(){  
    56.           }  
    57.           public void close() throws IOException {  
    58.               super.close();        
    59.           }  
    60.           public void flush() throws IOException {  
    61.                 super.flush();  
    62.           }  
    63.           public void write(int b) throws IOException {  
    64.                 write((byte)b);  
    65.           }             
    66.           public void write(byte b[]) throws IOException {  
    67.               write(b, 0, b.length);  
    68.           }  
    69.           public void write(byte b[], int off, int len) throws IOException {  
    70.              responseStream.write(b, off, len);                
    71.           }//end write            
    72.       }//end class MyServletOutputStream  
    73.  
    74.       class MyPrintWriter extends PrintWriter{  
    75.           MyPrintWriter(Writer out){  
    76.               super(out);  
    77.           }  
    78.           public void flush(){  
    79.           }  
    80.           public void close(){  
    81.           }  
    82.           public void write(int b) {  
    83.               char[] cb = new char[1];  
    84.               cb[0]=(char)b;  
    85.               write(cb);  
    86.           }  
    87.           public void write(char[] chars) {  
    88.               write(chars,0,chars.length);  
    89.           }         
    90.           public void write(String s){  
    91.               responseText=responseText+s;              
    92.           }  
    93.           public void write(char buf[],int off,int len){  
    94.               responseText=responseText+String.copyValueOf(buf, off, len);  
    95.           }  
    96.           public void write(String s,int off,int len){  
    97.               responseText=responseText+s.substring(off, off+len);  
    98.           }           
    99.       }  

    补充说明:我使用了内部类来简化代码。如果您不乏冒险精神,这份代码也可用于压缩jsp。





     本文转自 hexiaini235 51CTO博客,原文链接:http://blog.51cto.com/idata/1186176,如需转载请自行联系原作者


    展开全文
  • 已经生成好的flv.js压缩版,附带使用范例,demo中的视频文件可以自己找一个flv文件放在本地的tomcat里来测试,附近包含了flv.js文件
  • Web网站上的图片,视频等其它多媒体文件以及大文件,因为压缩效果不好,所以对于图片没有必要压缩,如果想要优化,可以图片的生命周期设置长一点,让客户端来缓存。 开启Gzip功能后,Nginx服务器会根据配置的策略对...

    Nginx开启Gzip压缩功能, 可以使网站的css、js 、xml、html 文件在传输时进行压缩,提高访问速度,!  Web网站上的图片,视频等其它多媒体文件以及大文件,因为压缩效果不好,所以对于图片没有必要压缩,如果想要优化,可以图片的生命周期设置长一点,让客户端来缓存。 开启Gzip功能后,Nginx服务器会根据配置的策略对发送的内容, 如css、js、xml、html等静态资源进行压缩, 使得这些内容大小减少,在用户接收到返回内容之前对其进行处理,以压缩后的数据展现给客户。这样不仅可以节约大量的出口带宽,提高传输效率,还能提升用户体验。

    gzip压缩作用:将响应报⽂发送⾄客户端之前可以启⽤压缩功能,这能够有效地节约带宽,并提⾼响应⾄客户端的速度。

    gzip配置域:http,server和location模块。

    配置参数:

    #gzip模块设置

    #开启gzip压缩输出

    gzip on;

    #最小压缩文件大小

    gzip_min_length 1k;

    #压缩缓冲区

    gzip_buffers 4 16k;

    #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)

    gzip_http_version 1.0;

    #压缩等级

    gzip_comp_level 2;

    #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。

    gzip_types text/plain application/x-javascript text/css application/xml;

    #选择支持vary header,可以让前端的缓存服务器缓存经过gzip压缩的页面;

    gzip_vary on;

    通过curl命令测试:curl -I -H "Accept-Encoding: gzip, deflate"   http://www.imcati.com/index.html

    关闭压缩功能:

    Nginx的Gzip压缩功能虽然好用,但是下面两类文件资源不太建议启用此压缩功能:

    1) 图片类型资源 (还有视频文件)

    原因:图片如jpg、png文件本身就会有压缩,因此开启gzip后,压缩前和压缩后大小没有多大区别,反而会白白的浪费资源。

    2) 大文件资源

    原因:会消耗大量的cpu资源,且不一定有明显的效果。

    展开全文
  • RecordRTC 打开设备录像并压缩文件

    千次阅读 2017-10-09 12:23:32
    利用RecordRTC打开手机或者电脑摄像头,进行录像,完成后对视频文件进行压缩。 github地址: https://github.com/muaz-khan/RecordRTC git上的例子是比较复杂的,会对各种摄像参数进行选择和处理。这里提供一个...

    利用RecordRTC打开手机或者电脑摄像头,进行录像,完成后对视频文件进行压缩。

    github地址:

    https://github.com/muaz-khan/RecordRTC


    git上的例子是比较复杂的,会对各种摄像参数进行选择和处理。这里提供一个简单并且能实现录像功能的例子。

    页面:

    <div style="width: 75%;" id="recording-player"></div>
    <button id="btn-start-recording" ng-click="videoCapture()">开始</button>
    <button id="save-to-disk">保存</button>

    操作处理的js代码如下:

    var video = document.createElement('video');
              video.controls = false;
              var mediaElement = getHTMLMediaElement(video, {
                  buttons: ['full-screen'/!*, 'take-snapshot'*!/],
                  showOnMouseEnter: false,
                  width: 360,
              });
              document.getElementById('recording-player').appendChild(mediaElement);
              var div = document.createElement('section');
              mediaElement.media.parentNode.appendChild(div);
              div.appendChild(mediaElement.media);
              var recordingPlayer = mediaElement.media;
              var btnStartRecording = document.querySelector('#btn-start-recording');
              var saveRecording = document.querySelector('#save-to-disk');
              var mimeType = 'video/webm';
              var fileExtension = 'webm';
              var recorderType = null;
              var type = 'video';
              var videoBitsPerSecond = null;
              var button = btnStartRecording;
    
              function getURL(arg) {
                  var url = arg;
                  if(arg instanceof Blob || arg instanceof File) {
                      url = URL.createObjectURL(arg);
                  }
                  if(arg instanceof RecordRTC || arg.getBlob) {
                      url = URL.createObjectURL(arg.getBlob());
                  }
                  if(arg instanceof MediaStream || arg.getTracks || arg.getVideoTracks || arg.getAudioTracks) {
                      // url = URL.createObjectURL(arg);
                  }
                  return url;
              }
    
              function setVideoURL(arg, forceNonImage) {
                  var url = getURL(arg);
                  var parentNode = recordingPlayer.parentNode;
                  parentNode.removeChild(recordingPlayer);
                  parentNode.innerHTML = '';
    
                  var elem = 'video';
                  recordingPlayer = document.createElement(elem);
    
                  if(arg instanceof MediaStream) {
                      recordingPlayer.muted = true;
                  }
                  recordingPlayer.addEventListener('loadedmetadata', function() {
                      if(navigator.userAgent.toLowerCase().indexOf('android') == -1) return;
                      // android
                      setTimeout(function() {
                          if(typeof recordingPlayer.play === 'function') {
                              recordingPlayer.play();
                          }
                      }, 2000);
                  }, false);
                  recordingPlayer.poster = '';
                  if(arg instanceof MediaStream) {
                      recordingPlayer.srcObject = arg;
                  }
                  else {
                      recordingPlayer.src = url;
                  }
                  if(typeof recordingPlayer.play === 'function') {
                      recordingPlayer.play();
                  }
                  recordingPlayer.addEventListener('ended', function() {
                      url = getURL(arg);
    
                      if(arg instanceof MediaStream) {
                          recordingPlayer.srcObject = arg;
                      }
                      else {
                          recordingPlayer.src = url;
                      }
                  });
                  parentNode.appendChild(recordingPlayer);
              }
    
              button.mediaCapturedCallback = function() {
    
                  var options = {
                      type: type,
                      mimeType: mimeType,
                      getNativeBlob: false, // enable it for longer recordings
                      video: recordingPlayer
                  };
                  options.ignoreMutedMedia = false;
                  button.recordRTC = RecordRTC(button.stream, options);
                  button.recordingEndedCallback = function(url) {
                      setVideoURL(url);
                  };
                  button.recordRTC.startRecording();
    
    
    
    
              }
              var commonConfig = {
                  onMediaCaptured: function(stream) {
                      button.stream = stream;
                      if(button.mediaCapturedCallback) {
                          button.mediaCapturedCallback();
                      }
    
                      button.innerHTML = "停止";
                      button.disabled = false;
                  },
                  onMediaStopped: function() {
                      button.innerHTML = "开始";
    
                      if(!button.disableStateWaiting) {
                          button.disabled = false;
                      }
                  },
                  onMediaCapturingFailed: function(error) {
                      console.error('onMediaCapturingFailed:', error);
    
                      if(error.toString().indexOf('no audio or video tracks available') !== -1) {
                          alert('RecordRTC failed to start because there are no audio or video tracks available.');
                      }
    
                      if(DetectRTC.browser.name === 'Safari') return;
    
                      if(error.name === 'PermissionDeniedError' && DetectRTC.browser.name === 'Firefox') {
                          alert('Firefox requires version >= 52. Firefox also requires HTTPs.');
                      }
    
                      commonConfig.onMediaStopped();
                  }
              };
    
    
              function captureUserMedia(mediaConstraints, successCallback, errorCallback) {
                  if(mediaConstraints.video == true) {
                      mediaConstraints.video = {};
                  }
    
                  navigator.mediaDevices.getUserMedia(mediaConstraints).then(function(stream) {
                      successCallback(stream);
                      setVideoURL(stream, true);
                  }).catch(function(error) {
                      if(error && error.name === 'ConstraintNotSatisfiedError') {
                          alert('Your camera or browser does NOT supports selected resolutions or frame-rates. \n\nPlease select "default" resolutions.');
                      }
                      errorCallback(error);
                  });
              }
    
              function addStreamStopListener(stream, callback) {
                  var streamEndedEvent = 'ended';
                  if ('oninactive' in stream) {
                      streamEndedEvent = 'inactive';
                  }
                  stream.addEventListener(streamEndedEvent, function() {
                      callback();
                      callback = function() {};
                  }, false);
                  stream.getAudioTracks().forEach(function(track) {
                      track.addEventListener(streamEndedEvent, function() {
                          callback();
                          callback = function() {};
                      }, false);
                  });
                  stream.getVideoTracks().forEach(function(track) {
                      track.addEventListener(streamEndedEvent, function() {
                          callback();
                          callback = function() {};
                      }, false);
                  });
              }
    
              function captureAudioPlusVideo(config) {
                  captureUserMedia({video: true, audio: true}, function(audioVideoStream) {
                      config.onMediaCaptured(audioVideoStream);
                      if(audioVideoStream instanceof Array) {
                          audioVideoStream.forEach(function(stream) {
                              addStreamStopListener(stream, function() {
                                  config.onMediaStopped();
                              });
                          });
                          return;
                      }
                      addStreamStopListener(audioVideoStream, function() {
                          config.onMediaStopped();
                      });
                  }, function(error) {
                      config.onMediaCapturingFailed(error);
                  });
              }
    
              function stopStream() {
                  if(button.stream && button.stream.stop) {
                      button.stream.stop();
                      button.stream = null;
                  }
    
                  if(button.stream instanceof Array) {
                      button.stream.forEach(function(stream) {
                          stream.stop();
                      });
                      button.stream = null;
                  }
    
                  videoBitsPerSecond = null;
                  var html = 'Recording status: stopped';
                  html += '<br>Size: ' + bytesToSize(button.recordRTC.getBlob().size);
              }
    
              function getFileName(fileExtension) {
                  var d = new Date();
                  var year = d.getUTCFullYear();
                  var month = d.getUTCMonth() + 1;
                  var date = d.getUTCDate();
                  return 'RecordRTC-' + year + month + date + '-' + fileExtension;
              }
    
              function saveToDiskOrOpenNewTab(recordRTC) {
    
                  /!*if(!recordRTC.getBlob().size) {
                   var info = getFailureReport();
                   console.log('blob', recordRTC.getBlob());
                   console.log('recordrtc instance', recordRTC);
                   console.log('report', info);
    
                   if(mediaContainerFormat.value !== 'default') {
                   alert('RecordRTC seems failed recording using ' + mediaContainerFormat.value + '. Please choose "default" option from the drop down and record again.');
                   }
                   else {
                   alert('RecordRTC seems failed. Unexpected issue. You can read the email in your console log. \n\nPlease report using disqus chat below.');
                   }
    
                   if(mediaContainerFormat.value !== 'vp9' && DetectRTC.browser.name === 'Chrome') {
                   alert('Please record using VP9 encoder. (select from the dropdown)');
                   }
                   }*!/
    
                  var fileName = getFileName(fileExtension);
    
                  saveRecording.onclick = function(event) {
                      if(!recordRTC) return alert('No recording found.');
    
                      var file = new File([recordRTC.getBlob()], fileName, {
                          type: mimeType
                      });
    
                      invokeSaveAsDialog(file, file.name);
    
                  }
              }
    
    
              //操作录像
              btnStartRecording.onclick = function(event) {
                  if(button.innerHTML === "停止") {
                      button.disabled = true;
                      button.disableStateWaiting = true;
                      setTimeout(function() {
                          button.disabled = false;
                          button.disableStateWaiting = false;
                      }, 2000);
    
                      button.innerHTML = '开始';
    
                      if(button.recordRTC) {
                          if(button.recordRTC.length) {
                              button.recordRTC[0].stopRecording(function(url) {
                                  if(!button.recordRTC[1]) {
                                      button.recordingEndedCallback(url);
                                      stopStream();
    
                                      saveToDiskOrOpenNewTab(button.recordRTC[0]);
                                      return;
                                  }
    
                                  button.recordRTC[1].stopRecording(function(url) {
                                      button.recordingEndedCallback(url);
                                      stopStream();
                                  });
                              });
                          }
                          else {
                              button.recordRTC.stopRecording(function(url) {
                                  button.recordingEndedCallback(url);
                                  saveToDiskOrOpenNewTab(button.recordRTC);
                                  stopStream();
                              });
                          }
                      }
    
                      return;
                  }
                  captureAudioPlusVideo(commonConfig);
    
              }

    在你的index文件中需要引入两个相关文件:

    <link href="https://cdn.webrtc-experiment.com/getHTMLMediaElement.css" rel="stylesheet">
    <script src="https://cdn.webrtc-experiment.com/getHTMLMediaElement.js"></script>

    还需要引入RecordRTC.js。这个从git上就可以找到。
    以上是从git上扒下来的部分代码,可以简单实现录像,并将视频文件压缩的功能


    展开全文
  • 快速批量将视频将转换成MP4格式,文件大小减少50%左右!node.js编写,转换速度比市面上快,质量高!目前只用公司内视频处理,如需调整转换参数请加
  • 快速批量将视频将转换成MP4格式,文件大小减少50%左右!node.js编写,转换速度比市面上快,质量高!目前只用公司内视频处理,仅支持win7以上系统,如需调整转换参数请告知!
  • 前端实现视频播放预览1、预览效果图2、预览窗口dom3、Js代码4、引入相应的...后面有时间再来讲Java实现视频上传、转码、文件压缩、前端自定义导出word文档。 1、预览效果图 先上效果图吧,这是博主嵌套在界面里面的一

    亲测G级视频秒播, 不考虑传输和缓存。当然视频得在服务器上

    最近做了个新功能。说白了其实就是一个系统内的留言。当然留言内容包括视频留言、图片留言、信息留言、文档留言。对新提交的内容需要先进行预览和审核。然后针对附件内容进行下载。当然上传下载都是自己在做。后面有时间再来讲Java实现视频上传、转码、文件压缩、前端自定义导出word文档。

    1、预览效果图

    先上效果图吧,这是博主嵌套在界面里面的一个播放窗口,可根据自己需求自定义大小:
    在这里插入图片描述

    注:由于videojs是基于html5的,所以仅支持mp4,webm,ogv三种格式。博主是专门进行了视频转码,全部统一转成mp4,最后为了方便,直接限制只能上传mp4格式,当技术有限的时候,只有让用户来适应软件了。


    2、预览窗口dom

    • m.jpg是视频封面。可根据自己需求抠个图,我的是自己扣的。email.video是后台返回用于绑定播放的视频存放相对路径,博主用的是vue直接进行了数据绑定。也可js进行绑定。
    • js绑定,更直观的看的话数据先来个js绑定吧,如果vue绑定的话,省略即可!
    	var myPlayer = videojs('my-video');
    	videojs("my-video").ready(function(){
    	       var myPlayer = this;
    	       myPlayer.src("/emailFile/lifanjiashu/test1.mp4");
    	       myPlayer.play();
    	});
    

    路径:/emailFile/lifanjiashu/test1.mp4
    在这里插入图片描述

    <!--  视频预览窗口模块 -->
    <video id="my-video" class="video-js col-sm-8" controls preload="auto" poster="/statics/img/m.jpg" video :src="email.video">
    	<source  src="#" type="video/mp4">         
    </video>
    
    

    3、Js代码

    这段代码是设置窗口预览的格式,包括渲染一系列的暂停播放、进度条等组件的。

    //设置中文
    videojs.addLanguage('zh-CN', {
        "Play": "播放",
        "Pause": "暂停",
        "Current Time": "当前时间",
        "Duration": "时长",
        "Remaining Time": "剩余时间",
        "Stream Type": "媒体流类型",
        "LIVE": "直播",
        "Loaded": "加载完毕",
        "Progress": "进度",
        "Fullscreen": "全屏",
        "Non-Fullscreen": "退出全屏",
        "Mute": "静音",
        "Unmute": "取消静音",
        "Playback Rate": "播放速度",
        "Subtitles": "字幕",
        "subtitles off": "关闭字幕",
        "Captions": "内嵌字幕",
        "captions off": "关闭内嵌字幕",
        "Chapters": "节目段落",
        "Close Modal Dialog": "关闭弹窗",
        "Descriptions": "描述",
        "descriptions off": "关闭描述",
        "Audio Track": "音轨",
        "You aborted the media playback": "视频播放被终止",
        "A network error caused the media download to fail part-way.": "网络错误导致视频下载中途失败。",
        "The media could not be loaded, either because the server or network failed or because the format is not supported.": "视频因格式不支持或者服务器或网络的问题无法加载。",
        "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由于视频文件损坏或是该视频使用了你的浏览器不支持的功能,播放终止。",
        "No compatible source was found for this media.": "无法找到此视频兼容的源。",
        "The media is encrypted and we do not have the keys to decrypt it.": "视频已加密,无法解密。",
        "Play Video": "播放视频",
        "Close": "关闭",
        "Modal Window": "弹窗",
        "This is a modal window": "这是一个弹窗",
        "This modal can be closed by pressing the Escape key or activating the close button.": "可以按ESC按键或启用关闭按钮来关闭此弹窗。",
        ", opens captions settings dialog": ", 开启标题设置弹窗",
        ", opens subtitles settings dialog": ", 开启字幕设置弹窗",
        ", opens descriptions settings dialog": ", 开启描述设置弹窗",
        ", selected": ", 选择",
        "captions settings": "字幕设定",
        "Audio Player": "音频播放器",
        "Video Player": "视频播放器",
        "Replay": "重播",
        "Progress Bar": "进度小节",
        "Volume Level": "音量",
        "subtitles settings": "字幕设定",
        "descriptions settings": "描述设定",
        "Text": "文字",
        "White": "白",
        "Black": "黑",
        "Red": "红",
        "Green": "绿",
        "Blue": "蓝",
        "Yellow": "黄",
        "Magenta": "紫红",
        "Cyan": "青",
        "Background": "背景",
        "Window": "视窗",
        "Transparent": "透明",
        "Semi-Transparent": "半透明",
        "Opaque": "不透明",
        "Font Size": "字体尺寸",
        "Text Edge Style": "字体边缘样式",
        "None": "无",
        "Raised": "浮雕",
        "Depressed": "压低",
        "Uniform": "均匀",
        "Dropshadow": "下阴影",
        "Font Family": "字体库",
        "Proportional Sans-Serif": "比例无细体",
        "Monospace Sans-Serif": "单间隔无细体",
        "Proportional Serif": "比例细体",
        "Monospace Serif": "单间隔细体",
        "Casual": "舒适",
        "Script": "手写体",
        "Small Caps": "小型大写字体",
        "Reset": "重启",
        "restore all settings to the default values": "恢复全部设定至预设值",
        "Done": "完成",
        "Caption Settings Dialog": "字幕设定视窗",
        "Beginning of dialog window. Escape will cancel and close the window.": "开始对话视窗。离开会取消及关闭视窗",
        "End of dialog window.": "结束对话视窗"
    });
    
    

    4、引入相应的js库和css布局即可进行预览了。

         <link href="/statics/css/video-js.min.css" rel="stylesheet" type="text/css">
         <script type="text/javascript" src="/statics/js/video.min.js"></script>
         
    

    相关js库和css。这里封装了个demo,免费进行下载。
    稍后上传------------------------------->>


    写在后面: 博主非专业前端,第一次用视频相关,只接触了video.js。操作简单上手容易一下子就吸引了我这个后端野鸡切图仔。如果后来人有什么好用的工具,记得推荐一下哈哈哈哈哈。如有错误还望指正,

    by一只不务正业的后端程序猿!

    展开全文
  • 编码:对原始视频文件进行压缩。视频录制开发流程录制视频 - 编码 - 压缩 - 上传服务器录制视频使用MediaDevices API的getUserMedia方法 获取相机访问权限兼容性:使用MediaRecorder API录制视频兼容性:可以看到I.....
  • Ffmpeg(做视频的应该都听过这个软件,在github上星星很多,使用c语言编写,可以在gitHub上面看到有兴趣研究一下代码,它不只是解析rtsp这么简单),这里下载是一个压缩文件, 下载完了解压到一个盘符里面,比如我...
  • 本方法是通过火狐浏览器的input上传视频后,获取文件路径,使用video播放视频。使用h5的canvas画布来绘制封面,生成图片后,通过canvas的toDataURL将图片输出成图片流,然后在执行事件将图片流下载保存到本地。保存...
  • 1,网页的压缩 在实际的应用中,我们为了使nginx...1,Nginx开启Gzip压缩功能, 可以使网站的css、js 、xml、html 文件在传输时进行压缩,提高访问速度,进而优化Nginx性能。 Web网站上的图片,视频等其它多媒体文件...
  • 本SDK基于es6开发,致力打造基于前端混合开发需求,支持微信小程序、H5、快应用、游戏Cocos、混合App等平台, 整个SDK,就dist目录下Bmob.*.js 这个文件即可使用全部功能,请使用最新版本。 安装使用 在小程序中...
  • 在nginx的核心配置文件里面可以配置Gzip压缩来减少html、css、js、图片、音视频文件的大小,提供文件传输效率。 常用的配置如下: #开启gzip压缩功能,目的:提高传输效率,节约带宽 gzip on; #限制最小压缩,...
  • 图片压缩

    2013-08-27 11:23:16
    所谓有图有真相,一图胜万言,图片的视觉冲击力、说明力和感染力非常强大。...对于html,js,css等文件,自身通常很小且数量有限,压缩价值并不大,况且web服务器几乎都有gzip压缩功能。因此,网站的...
  • 支持即时JS,CSS(变量和嵌套)和HTML压缩器 支持即时合并静态文件(JavaScript,CSS或HTML) 支持文件的即时映射 支持媒体流(例如视频) 支持模块和包 通过ImageMagick或GraphicsMagick内置的图像处理引擎 支持...
  • 标题 ...下载并解压缩发行版中的zip文件 用法 节点index.js 视频 单击下面的缩略图以观看视频:D 执照 麻省理工学院 贡献 他们不会哈哈 测验 没有 问题 如有任何疑问,请通过将其转发给Connor-Walden。
  • gulp打包压缩总结---2

    2020-05-12 00:58:06
    自动,打包压缩,指定的文件,将压缩好的文件,存储到指定的位置 实际项目中,执行的都是打包压缩文件 为了提高响应时间,改善用户体验度 让页面的加载和执行,时间更短,效率更高 2, gulp 的打包压缩对象 (1), html...
  • Web网站上的图片,视频等其它多媒体文件以及大文件,因为压缩效果不好,所以对于图片没有必要支压缩,如果想要优化,可以图片的生命周期设置长一点,让客户端来缓存。 开启Gzip功能后,Nginx服务器会根据配置的策略...
  • 配置Nginx gzip压缩功能

    千次阅读 2017-09-13 13:19:08
     要压缩的内容(js,css,html...),不要压缩的内容(图片,视频,flash..)  提供了对文件内容压缩的功能,允许将输出内容在发送到客户端之前根据具体的策略压缩节约贷带宽。功能同apache的mod_deflate压缩功能。...
  • Windows:下载 ,解压缩,将对应的mpv-1.dll放入C:\Windows\system32 macOS: brew install mpv Linux: apt-get install libmpv1 libavformat-dev 例 但是由于mpv而能够处理几乎所有可用的视频。 跑: git ...
  • 图片无损压缩

    2017-11-14 21:23:00
    所谓有图有真相,一图胜万言,图片的视觉冲击力、说明力和感染力非常强大。由于视频和音频的代价更高,网站通常选用图片配合文字说明来...对于html,js,css等文件,自身通常很小且数量有限,压缩价值并不大,况且...
  • 添加小程序,兑换各种视频教程/数据资源。 包括:资源的合并与压缩,图片编码原理和类型选择,... 1.1.1 理解减少http请求和减少请求资源大小的优化:包括html压缩,css压缩,js压缩文件合并,开启gzip。 ...
  • BPG是一种新型的图片格式。其设计初衷在于当图片质量或文件size成为瓶颈时,取代JPEG。其主要特点如下: 高压缩比。... 算法:基于HEVC开源的标准视频压缩算法的一个子集实现 支持与jpeg相同的chrom...
  • 今天投产了一个小项目,一个很简单的H5,有播放视频功能,使用了videojs插件。 之前也做过数个视频播放,视频的转压都按照既定流程进行,文件放到FTP后,iphone和安卓机测试下来都没有问题。 于是给链接,业务组...
  • H5播放大视频,高清视频

    千次阅读 2019-10-03 10:37:18
    有一段需求,需要在手机端播放高清视频,通过升级宽带,压缩视频等还是不能流畅播放,IOS还好,android基本播放不了。 解决方案:视频转码 工具:ffmpeg + video.js 1.安装ffmpeg,首先下载windows 可用的ffmpeg...
  • Web网站上的图片,视频等其它多媒体文件以及大文件,因为压缩效果不好,所以对于图片没有必要支压缩,如果想要优化,可以图片的生命周期设置长一点,让客户端来缓存。 开启Gzip功能后,Nginx服务器会根据配置的策略...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 192
精华内容 76
关键字:

js压缩视频文件