Transerver XML-RPC

From BroadWiki

Jump to: navigation, search

Transerver提供XML-RPC接口接受第三方程序的请求和查询。第三方程序通过向Transerver的Master所在主机的18181端口发送HTTP POST请求来进行XML-RPC交互。例如Master所在主机的IP地址为192.168.0.1,则第三方程序向http://192.168.0.1/xmlrpc这个URL发出HTTP POST请求。

Contents

添加文件

XML-RPC请求主体:

<?xml version="1.0" encoding="utf-8" ?>
<methodCall>  
  <methodName>ts.tasks.add</methodName>
  <params>
    <param>
    <value>
      <struct>
        <member>  
          <name>prefsXml</name>
          <value>
            <string>【配置文件XML】</string>
          </value>
        </member>
      </struct>
    </value>
    </param>
  </params>
</methodCall>

配置文件XML的内容是一个完整的XML文件,用来描述要添加的转码任务。由于它被包含在XML-RPC请求的XML节点中,因此其内容需要转义。

配置文件XML

<?xml version="1.0" encoding="utf-8"?>
<root>
  <input>
  <!-- 输入文件名 -->
  <url>D:\Video\video.mp4</url>
  </input>
  <output>
    <stream type="video" preset="转码配置文件名">
      <!-- 额外的视频参数 -->
    </stream>
    <stream type="audio" preset="转码配置文件名">
      <!-- 额外的音频参数 -->
    </stream>
    <muxer preset="转码配置文件名">
      <config key="video.streams">1</config>
      <config key="audio.streams">1</config>
      <!-- 额外的混流参数 -->
      <node key="overall.task.destdir">D:\Output</node>
    </muxer>
    <split subfix="index" type="none" unitType="time"/>
  </output>
</root>

移除文件

<?xml version="1.0" encoding="utf-8" ?>
<methodCall>  
  <methodName>ts.tasks.removedone</methodName>
  <params>
    <param>
    <value>
      <struct>
        <member>  
          <name>ids</name>
          <value>
            <!--被删除任务的id,多个id用分号分隔-->
            <string>1;2</string>
          </value>
        </member>
      </struct>
    </value>
    </param>
  </params>
</methodCall>

添加监视文件夹

<?xml version="1.0" encoding="utf-8" ?>
<methodCall> 
  <methodName>ts.watchfolder.add</methodName>
  <params>
    <param>
      <value>
        <struct>
          <member> 
            <name>path</name>
            <value>
              <!--需要监视的文件夹-->
              <string>D:\Media\Video</string>
            </value>
          </member>
          <member> 
            <name>filter</name>
            <value>
              <!--需要监视的文件通配符-->
              <string>*.avi,*.mp3</string>
            </value>
          </member>
          <member> 
            <name>prefsXml</name>
            <value> 
              <string>【配置文件XML】</string>
            </value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodCall>

配置文件XML可以参看添加文件时所用示例,唯一不同的是<input/>节点无需存在。

移除监视文件夹

移除监视文件夹时,需要通过监视文件夹路径及其输出路径来确定。

<?xml version="1.0" encoding="utf-8" ?>
<methodCall> 
  <methodName>ts.watchfolder.remove</methodName>
  <params>
    <param>
      <value>
        <struct>
          <member> 
            <name>path</name>
            <value>
              <!--监视文件夹路径 -->
              <string>D:\Media\Video</string>
            </value>
          </member>
          <member>
            <name>list</name>
            <value> 
              <boolean>1</boolean>
            </value>
          </member>
          <member> 
            <name>output</name>
            <value>
              <!--该监视文件夹对应的转码文件目标文件夹路径-->
              <string>D:\Output</string>
            </value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodCall>

查询

查询单个任务

<?xml version="1.0" encoding="utf-8" ?>
<methodCall>  
  <methodName>ts.tasks.query</methodName>
  <params>
    <param>
    <value>
      <struct>
        <member>
          <name>condition</name>
          <value>  
            <string>index</string>
          </value>
        </member>
        <member>  
          <name>index</name>
          <value>
            <!--查询任务的id -->
            <string>1</string>
          </value>
        </member>
      </struct>
    </value>
    </param>
  </params>
</methodCall>

单个任务查询的返回值

 <?xml version="1.0" encoding="utf-8" ?> 
  <methodResponse>
    <params>
     <param>
      <value>
        <struct>
         <member>
          <name>task.info</name> 
          <value>
           <string>success</string> 
          </value>
         </member>
         <member>
          <name>task.info.xml</name> 
           <value>
            <string>【返回的信息】</string> 
           </value>
         </member>
        </struct>
      </value>
    </param>
   </params>
 </methodResponse>

【返回的信息】是一段xml,里面的信息如下:

<?xml version="1.0" encoding="UTF-8" ?> 
 <root>
  <task>
   <node key="info.id">任务Id号</node> 
   <node key="info.title">文件名</node> 
   <node key="info.url">文件路径</node> 
   <node state="0" error="0" key="info.state">转码状态</node> 
   <node key="info.progress">转码百分率</node> 
   <node key="info.speed" >转码速度</node> 
   <node key="info.elapsed.time">已用去的转码时间</node> 
   <node key="info.task.priority">转码优先级</node> 
   <node key="info.node.id">使用的转码节点号</node> 
   <node key="info.node.filesize">文件大小</node> 
  </task>
 </root>

查询任务列表

<?xml version="1.0" encoding="utf-8" ?>
<methodCall> 
  <methodName>ts.tasks.query</methodName>
  <params>
    <param>
      <value>
        <struct>
          <member>
            <name>condition</name>
            <value> 
              <string>index</string>
            </value>
          </member>
          <member> 
            <name>index</name>
            <value>
              <!--查询全部任务--> 
              <string>all</string>
            </value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodCall>

返回的rpc结构和单个任务相同。 其中【返回信息】如下:

 <?xml version="1.0" encoding="UTF-8" ?> 
  <root>
   <task>
    <id>任务1的id号</id> 
    <title>文件名1</title> 
    <state>任务1的状态</state> 
    <error>任务1的出错代号</error> 
    <progress>任务1的转码状态</progress> 
    <speed>任务1的转码速度</speed> 
    <elapsed_time>任务1的转码耗时</elapsed_time> 
    <priority>任务1的转码优先级</priority> 
    <node_id>任务1的转码节点号</node_id> 
    <filesize>任务1的文件大小</filesize> 
    <resolution>任务1的文件分辨率</resolution> 
    <fps>任务1的文件帧率</fps> 
   </task>
   <task>
    <id>任务2的id号</id> 
    <title>文件名2</title> 
    <state>任务2的状态</state> 
    <error>任务2的出错代号</error> 
    <progress>任务2的转码状态</progress> 
    <speed>任务2的转码速度</speed> 
    <elapsed_time>任务2的转码耗时</elapsed_time> 
    <priority>任务2的转码优先级</priority> 
    <node_id>任务2的转码节点号</node_id> 
    <filesize>任务2的文件大小</filesize> 
    <resolution>任务2的文件分辨率</resolution> 
    <fps>任务2的文件帧率</fps> 
   </task>
  </root>

调整任务优先级

<?xml version="1.0" encoding="utf-8" ?>
<methodCall> 
  <methodName>ts.task.setpriority</methodName>
  <params>
    <param>
      <value>
        <struct>
          <member> 
            <name>task.priority</name>
            <value>
              <!--优先级 0~4 (低到高)-->
              <string>1</string>
            </value>
          </member>
          <member> 
            <name>task.ids</name>
            <value> 
              <!--被改变优先级的文件的id,用分号分隔多个id-->
              <string>1;2</string>
            </value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodCall>
Personal tools