在項目中,有個需求是分享視頻連接地址到微信、qq或者朋友圈,只能試看兩分鐘,本想着經過h5界面就能控制實現效果,代碼以下,可是前端終究不是安全的,其次監聽事件,若是拉播放進度條,中途停頓屢次,就會出現屢次彈框,對用戶體驗終究不是好的,所以,後面想着後端截取原視頻部分視頻,而後讓用戶播放,只要監聽用戶播放結束,彈框顯示便可。前端
var audio = document.getElementById("chqrpzkgzjulberajk"); //獲取視頻元素id
audio.loop = false;//視頻不循環播放
var time = 0;//初始化播放時間
audio.addEventListener('timeupdate', timeupdate);//設置監聽事件
function timeupdate(){
//由於當前的格式是帶毫秒的float類型的如:12.231233,因此把他轉成String了便於後面分割取秒
var time = audio.currentTime+"";
console.log('當前播放時長'+time);
if(time > 60){
if(audio.paused){
alert("觀看完整視頻,請下載APP!");
audio.pause();
}
}
}
查了不少資料,眼睛都要瞎了,可是沒一個微博寫的很詳細,做爲初學者基本上都不可能操做完成,通過我一個禮拜的努力,有兩種實施方案。linux
1.經過截取視頻流的方式:讀取流的時候只讀取一部分,可是這樣就會有個問題,視頻時長仍是原視頻時長,其次有個重要的問題,有些視頻截取以後播放不了,破壞了本來的視頻流。windows
2.經過ffmpeg工具進行截取,功能仍是很強大,具體能夠百度下。後端
ffmpeg下載(也能夠去官網上下載):
windows:連接:https://pan.baidu.com/s/1EAQDkEUmh5WnaF9_qKJgcA 提取碼:3v31 安全
linux:連接:https://pan.baidu.com/s/16c7krsFOP29lj6wOMxL5mQ 提取碼:x1y3
微信
Windows 下使用代碼:
/**
* 視頻剪輯
* @param file 源文件
* @param outFilePath 輸出文件路徑
* @return
* @throws Exception
*/
public static String getPartVideoForWindows(File file ,String outFilePath){
String filePaths = PathUtil.getFilePath(outFilePath);//獲取輸出視頻絕對地址
String fileName = DateUtil.getRanddom() + ".mp4";//生成輸出視頻文件格式,也能夠用源文件的格式
String fileFinalPath = filePaths + fileName;//完整的輸出視頻絕對路徑
// 建立一個List集合來保存轉換視頻文件爲flv格式的命令
List<String> convert = new ArrayList<String>();
convert.add(PathUtil.getFilePath("/tools/ffmpeg.exe")); // 添加轉換工具路徑
convert.add("-ss");//起始時間
convert.add("00:00:10.0");
convert.add("-i"); // 添加參數"-i",該參數指定要轉換的文件
convert.add(file.getAbsolutePath()); // 添加要轉換格式的視頻文件的路徑
convert.add("-to");//結束時間
convert.add("00:02:00");//
convert.add("-c");//操做方式
convert.add("copy");
convert.add(fileFinalPath);
convert.add("-y"); // 添加參數"-y",該參數指定將覆蓋已存在的文件
ProcessBuilder builder = new ProcessBuilder();
try {
builder.command(convert);
builder.start();
return outFilePath+fileName;
} catch (Exception e) {
System.out.println(e);
return null ;
}
}
linux 下使用代碼:
/**
* 執行linux 系統的ffpemg
* @param file 視頻源文件
* @param outFilePath 輸出視頻地址
*/
public static String linuxCommend(File file ,String outFilePath) {
String filePaths = PathUtil.getFilePath(outFilePath);//獲取輸出視頻絕對地址
String fileName = DateUtil.getRanddom() + ".mp4";//生成輸出視頻文件格式,也能夠用源文件的格式
String fileFinalPath = filePaths + fileName;//完整的輸出視頻絕對路徑
String command = "ffmpeg -ss 00:00:10.0 -i "+file.getAbsolutePath()+" -to 00:02:00 -c copy "+fileFinalPath+" -y";//剪輯命令
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(command);
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null){
System.out.println(line);
}
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
return outFilePath+fileName;
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
return null ;
}
可是linux 系統下,是使用不了ffmpeg.exe,必需要安裝以後才能使用 ffmpeg 這個命令,文章以下dom