)JSP上傳視頻後自動轉成flv的核心JAVA方法

來源:互聯網
上載者:User
摘要

作者:古刹飛鷹

BLOG:www.v246.com

QQ:28095553

Email:aquaqu(圈.a)gmail.com

本文屬古刹飛鷹原創,轉載請註明出處!

以下是源碼:

【全文】

作者:古刹飛鷹

BLOG:www.v246.com

QQ:28095553

Email:aquaqu(圈.a)gmail.com

本文屬古刹飛鷹原創,轉載請註明出處!

本方法以經經過實戰驗證,正在項目中使用,稍後您可以查看:http://www.0431net.com,網站的視頻模快的核心功能就是用這個方法實現的:)

以下是源碼:

Cnvert 類

package com.v246.convertFLV;

import java.util.ArrayList;
import java.util.List;

import com.v246.utils.Aqu;

//作者:古刹飛鷹 blog:www.v246.com懶漢模式
public class Convert {

 private static Convert instance = null;

 //作者:古刹飛鷹 blog:www.v246.com flv工具的絕對位址
 private String aquInterceptPicToolsPath = "c:\\FLVTools\\ffmpeg.exe";

 //作者:古刹飛鷹 blog:www.v246.com flv修複工具的絕對位址
 private String fixFLVToolsPath = "c:\\FLVTools\\flvmdi.exe";

 //作者:古刹飛鷹 blog:www.v246.com flv轉換工具的絕對位址
 private String aquCoverFLVToolsPath = "c:\\FLVTools\\mencoder\\mencoder.exe";

 private Convert() {
  //作者:古刹飛鷹 blog:www.v246.cominit();
 }

 public static Convert getInstance() {
  if (instance == null) {
   instance = new Convert();
  }
  return instance;
 }
 public void reset(){
  //作者:古刹飛鷹 blog:www.v246.cominit();
 }
 private void init() {
  /*aquInterceptPicToolsPath = Aqu.getXMLValue("convertFLV.xml",
    "//作者:古刹飛鷹 blog:www.v246.com古刹飛鷹/FLV轉換工具全路徑")[0];
  fixFLVToolsPath = Aqu
    .getXMLValue("convertFLV.xml", "//作者:古刹飛鷹 blog:www.v246.com古刹飛鷹/FLV工具全路徑")[0];
  aquCoverFLVToolsPath = Aqu.getXMLValue("convertFLV.xml",
    "//作者:古刹飛鷹 blog:www.v246.com古刹飛鷹/FLV修複工具全路徑")[0];
  aquInterceptPicToolsPath = aquInterceptPicToolsPath.replace("/", "\\");
  fixFLVToolsPath = fixFLVToolsPath.replace("/", "\\");
  aquCoverFLVToolsPath = aquCoverFLVToolsPath.replace("/", "\\");
  System.out.println(aquInterceptPicToolsPath);
  System.out.println(fixFLVToolsPath);
  System.out.println(aquCoverFLVToolsPath);*/

 }

 public synchronized boolean convert(String aquInputPath, String outPath) {
  boolean re = false;
  //作者:古刹飛鷹 blog:www.v246.com 通一路徑定位器
  aquInputPath = aquInputPath.replace("/", "\\");
  //作者:古刹飛鷹 blog:www.v246.com 通一路徑定位器
  outPath = outPath.replace("/", "\\");
  //作者:古刹飛鷹 blog:www.v246.com 分析不包含檔案名稱的輸出路徑
  String interceptPicSavePath = outPath.substring(0, outPath
    .lastIndexOf("\\") + 1);
  //作者:古刹飛鷹 blog:www.v246.com 分析輸出的檔案名稱
  String outFileName = outPath.substring(outPath.lastIndexOf("\\") + 1,
    outPath.length());
  //作者:古刹飛鷹 blog:www.v246.com 繼續分析得出不包含副檔名的檔案名稱
  String outFileNameNoExt = outFileName.substring(0, outFileName
    .lastIndexOf("."));

  //作者:古刹飛鷹 blog:www.v246.com 工作目錄,隨便設定
  //作者:古刹飛鷹 blog:www.v246.com String workdirectory = "c:\\windows\\temp";
  //作者:古刹飛鷹 blog:www.v246.com 修複命令
  List<String> parameterForFix = new ArrayList<String>(100);
  //作者:古刹飛鷹 blog:www.v246.com 轉換命令
  List<String> aquParameterForConvert = new ArrayList<String>(100);
  //作者:古刹飛鷹 blog:www.v246.com 命令
  List<String> aquParameterForIntercept = new ArrayList<String>(100);
  //作者:古刹飛鷹 blog:www.v246.com 構建轉換命令
  aquParameterForConvert.add(aquCoverFLVToolsPath);
  aquParameterForConvert.add("-vf");
  aquParameterForConvert.add("scale=320:240");
  aquParameterForConvert.add("-ffourcc");
  aquParameterForConvert.add("FLV1");
  aquParameterForConvert.add("-of");
  aquParameterForConvert.add("lavf");
  aquParameterForConvert.add("-lavfopts");
  aquParameterForConvert
    .add("i_certify_that_my_video_stream_does_not_use_b_frames");
  aquParameterForConvert.add("-ovc");
  aquParameterForConvert.add("lavc");
  aquParameterForConvert.add("-lavcopts");
  aquParameterForConvert.add("vcodec=flv:vbitrate=200");
  aquParameterForConvert.add("-srate");
  aquParameterForConvert.add("22050");
  aquParameterForConvert.add("-oac");
  aquParameterForConvert.add("lavc");
  aquParameterForConvert.add("-lavcopts");
  aquParameterForConvert.add("acodec=mp3:abitrate=56");
  aquParameterForConvert.add(aquInputPath);
  aquParameterForConvert.add("-o");
  aquParameterForConvert.add(outPath);

  //作者:古刹飛鷹 blog:www.v246.com 構建修複命令
  parameterForFix.add(fixFLVToolsPath);
  parameterForFix.add(outPath);
  //作者:古刹飛鷹 blog:www.v246.com 構建命令
  aquParameterForIntercept.add(aquInterceptPicToolsPath);
  aquParameterForIntercept.add("-i");
  aquParameterForIntercept.add(outPath);
  aquParameterForIntercept.add("-y");
  aquParameterForIntercept.add("-f");
  aquParameterForIntercept.add("image2");
  aquParameterForIntercept.add("-ss");
  aquParameterForIntercept.add("8");
  aquParameterForIntercept.add("-t");
  aquParameterForIntercept.add("0.001");
  aquParameterForIntercept.add("-s");
  aquParameterForIntercept.add("320x240");
  aquParameterForIntercept.add(interceptPicSavePath + outFileNameNoExt
    + ".jpg");
  //作者:古刹飛鷹 blog:www.v246.com轉換
  String tmp1 = Aqu.exec(aquParameterForConvert);
  //作者:古刹飛鷹 blog:www.v246.com
  String tmp2 = Aqu.exec(aquParameterForIntercept);
  return re;
 }

 public static void main(String[] args) {
  getInstance().convert("h:\\QQ28095553\\古刹飛鷹.wmv", "h:\\aquaqu(quana)gmail.com\\古刹飛鷹.flv");
 }
}

ConvertThread 類

package com.v246.convertFLV;

public class ConvertThread extends Thread{
 
 private String fromPath = null;
 private String toPath = null;
 @Override
 public void run(){
  Convert.getInstance().convert(fromPath, toPath);
 }
 public void setFromPath(String fromPath) {
  this.fromPath = fromPath;
 }
 public void setToPath(String toPath) {
  this.toPath = toPath;
 }
}

 

ConvertThreadProxy類:

package com.v246.convertFLV;

public class ConvertThreadProxy {
 public static void convert(String fromPath, String toPath) {
  ConvertThread ct = new ConvertThread();
  ct.setFromPath(fromPath);
  ct.setToPath(toPath);
  ct.start();
 }
}

 

 

使用的時候只要通過ConvertThreadProxy 類的靜態方法將源視頻絕對位址(包括檔案名稱+括展名)和要產生的FLV檔案的絕對位址(包括檔案名稱+括展名)以字串的方式傳進去即可!因為用的是多線程,所以轉換過程不會佔用當前線程!

核心轉換類是線程同步的,所以您不用擔心並法問題,因為一次只能轉換一個檔案! 

注:安裝和使用ffmpeg轉換視頻為flv檔案(windows和linux)
 用java程式調用ffmpeg執行視頻檔案格式轉換flv

來源:http://www.v246.com/html/182.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.