在項目中須要上傳視頻,而且須要使用播放器播放視頻。客戶要求播放器要顯示一個縮略圖。在網上搜並參看了相關的書籍,提供了一下的解決方案,採用ffmpeg進行視頻轉換並從視頻中截取相應的幀做爲縮略圖,在前臺使用flvplay.swf播放器進行視頻的播放盒縮略圖的顯示。具體解決方案以下:
1.使用ffmpeg進行視頻轉換以及截圖的代碼以下(忘了參考那本書上的代碼):
html
/** * @功能:①轉換上傳的視頻爲FLV格式;②從上傳的視頻中截圖。 * @參數:①upFilePath: 用於指定要轉換格式的文件路徑;以及用來指定要截圖的視頻。<br> * @參數:②flvFilePath:用於指定轉換爲FLV格式後的文件的保存路徑。<br> * @參數:③cutPicPath: 用於指定截取的圖片的保存路徑 * @返回:boolean型值 */ private boolean convertVideo(String upFilePath, String flvFilePath, String cutPicPath) { String ffmpegPath = getServletContext().getRealPath("\\Video\\")+"\\ffmpeg.exe"; // 獲取在web.xml中配置的轉換工具(ffmpeg.exe)的存放路徑 // 建立一個List集合來保存轉換視頻文件爲flv格式的命令 List<String> convert = new ArrayList<String>(); convert.add(ffmpegPath); // 添加轉換工具路徑 convert.add("-i"); // 添加參數"-i",該參數指定要轉換的文件 convert.add(upFilePath); // 添加要轉換格式的視頻文件的路徑 convert.add("-qscale"); convert.add("6"); convert.add("-ab"); convert.add("64"); convert.add("-acodec"); convert.add("mp3"); convert.add("-ac"); convert.add("2"); convert.add("-ar"); convert.add("22050"); convert.add("-r"); convert.add("24"); convert.add("-y"); // 添加參數"-y",該參數指定將覆蓋已存在的文件 convert.add(flvFilePath); // 建立一個List集合來保存從視頻中截取圖片的命令 List<String> cutpic = new ArrayList<String>(); cutpic.add(ffmpegPath); cutpic.add("-i"); cutpic.add(upFilePath); // 同上(指定的文件便可以是轉換爲flv格式以前的文件,也能夠是轉換的flv文件) cutpic.add("-y"); cutpic.add("-f"); cutpic.add("image2"); cutpic.add("-ss"); // 添加參數"-ss",該參數指定截取的起始時間 cutpic.add("2"); // 添加起始時間爲第9秒 cutpic.add("-t"); // 添加參數"-t",該參數指定持續時間 cutpic.add("0.001"); // 添加持續時間爲1毫秒 cutpic.add("-s"); // 添加參數"-s",該參數指定截取的圖片大小 cutpic.add("350*240"); // 添加截取的圖片大小爲350*240 cutpic.add(cutPicPath); // 添加截取的圖片的保存路徑 boolean mark = true; ProcessBuilder builder = new ProcessBuilder(); try { builder.command(convert); builder.start(); builder.command(cutpic); builder.start(); } catch (Exception e) { mark = false; System.out.println(e); e.printStackTrace(); } return mark; }
2.使用flvplayer.swf顯示縮略圖並播放視頻代碼以下: java
<table> <tr> <!-- 嵌入Flash播放器 --> <td align="center"> <object width="452" height="339" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="movie" value="<%=basePath%>Video/flvplayer.swf?file=<%=basePath%>uploadVideos/${video.url}&image=<%=basePath%>uploadVideos/${video.pic}"/> <embed src="<%=basePath%>/Video/flvplayer.swf?file=<%=basePath%>uploadVideos/${video.pic}" width="40%" height="30%"> </embed> </object> </td> </tr> </table>