Transerver XML-RPC
From BroadWiki
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>
