ljy201992

  这几天项目中有个需求,需要对流媒体文件统一转换成FLV格式,再通过UMS在页面播放。

  经过各方面的比较,转换工具选择了一款叫做格式工厂的视频转换工具,功能还是相当强大的,可以将各种格式的视频文件进行相互转换,主要还是因为可以通过命令行来指定转换的源文件、目标文件、转换格式以及清晰度等。转换成FLV格式的文件,有三种清晰度可选,分别是"640x480", "320x240", "176x144"。

  当然,要使用格式工厂,首先要安装,都是傻瓜式安装,这里给出下载地址:http://www.pcfreetime.com/CN/index.html

  下面给出程序中执行转换的部分代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% String contentPath = request.getContextPath(); 
    String root =  request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+contentPath+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Video Player</title>
    <style type="text/css">
        body { background-color: #fff; padding: 0 20px; color:#000; font: 13px/18px Arial, sans-serif; }
        a { color: #360; }
        h3 { padding-top: 20px; }
        ol { margin:5px 0 15px 16px; padding:0; list-style-type:square; }
    </style>
</head>
<body>
    <div id="mediaspace"></div>
    <script type="text/javascript" src="<%=root %>UMS/player.js"></script>
    <script type="text/javascript">
        var so = new SWFObject(\'<%=root%>UMS/player.swf\',\'ply\',\'600\',\'400\',\'9\',\'#000000\');
        so.addParam(\'allowfullscreen\',\'true\');
        so.addParam(\'allowscriptaccess\',\'always\');
        so.addParam(\'wmode\',\'opaque\');
        so.addVariable(\'file\',\'<%=request.getAttribute("path")%>\');
        so.addVariable(\'start\',\'0\');
        so.addVariable(\'autoStart\',\'false\');
        so.addVariable(\'streamer\',\'rtmp://127.0.0.1:1935/vod\');
        so.addVariable(\'stretching\',\'uniform\');
        so.addVariable(\'controlbar\',\'over\');
        so.addVariable(\'viral.onpause\',\'true\');
        so.addVariable(\'viral.allowmenu\',\'true\');
        so.addVariable(\'skin\',\'<%=root%>UMS/glow.zip\')
        so.write(\'mediaspace\');
    </script> 
</body>
</html>
View Code

 

  执行完成后,会在相应的路径下,存储转换之后的三种格式的FLV文件。

 

  接下来说一下查看,我是用的UMS作为查看工具的,一来是支持播放FLV格式视频文件,二来本身有处理并发的机制,用法还是很简单的,直接将UMS安装目录下的UMS\Player文件夹中glow.zip,live.swf,player.js,player.swf几个文件,放到web服务器中的UMS文件夹下,还有用于显示的页面是vod.html,由于HTML页面不能动态传参数,我改成了vod.jsp,页面中部分代码如下:

    // 三种转换格式
    String[] quality = {"640x480", "320x240", "176x144"};

    // 三种格式FLV文件对应的存储根路径
    String[] flv_path =
        {TransConfig.VIDEO_DEST_ROOT_HIGH, TransConfig.VIDEO_DEST_ROOT_NORMAL,
            TransConfig.VIDEO_DEST_ROOT_LOW};

    //源文件及目标文件合法性验证  start ***
       ......
    //源文件及目标文件合法性验证  end ***


    for (int i = 0; i < 3; i++) {
      try {
        
        //允许覆盖已有文件,如果目标文件已经存在,则删除
        File file = new File(flv_path[i]+flvFilename);
        if(file.exists()){
          file.delete();
        }
        
        // 拼接流媒体转换的命令
        //FF_HOME为格式工厂的命令执行目录
        //例如,我的是D:\\FormatFactory\\FormatFactory.exe
        String command =
            TransConfig.FF_HOME + " \"-> FLV\" \""+quality[i]+"\" \"" + videoFilename + "\" \""
                + flv_path[i]+flvFilename + "\"";

        Process process = Runtime.getRuntime().exec(command);

        BufferedReader buffer = new BufferedReader(new InputStreamReader(process.getInputStream()));
        while (buffer.readLine() != null);

        buffer.close();
        
        // 根据生成目标文件存在与否,判断转换是否成功
        File dest = new File(flv_path[i]+flvFilename);
        // 转换失败
        if (!dest.exists()) {
          info = new TransInfo();
          info.setMsg("没有正常生成,转换失败。");
          return info;
        }
      } catch (IOException e) {
        e.printStackTrace();
        info = new TransInfo();
        info.setMsg("转换文档为FLV文件失败!");
        return info;
      }
    }
    
View Code

 

  其中有用的也就两句:

  so.addVariable(\'file\',\'<%=request.getAttribute("path")%>\'); 后面的参数给出实际要播放的文件的存储位置

  so.addVariable(\'streamer\',\'rtmp://127.0.0.1:1935/vod\'); 指定UMS服务器的地址,远程调用服务的话,将IP改成对应的IP即可

  最后,关于UMS有两点需要注意:

  1.要记得开启服务

      

 

  2. 在安装目录下,config文件夹下面,找到UMS_Configure.xml,修改其中的文件存储跟路径节点,修改成你自己的根路径

  

<PrefListItem name="RtmpMediaFileFolder">
                      <ValueItem>D:/UMS/video/dest</ValueItem>
</PrefListItem>

 

posted on 2013-12-12 09:30  妖妖っ凌  阅读(1690)  评论(0编辑  收藏  举报

分类:

技术点:

相关文章: