udpxy的作用是将组播的数据流变成TCP协议的单播流,避免了在数据链路层广播,在无线网络中尤为需要。同时电视也不支持udp格式的视频流。

udpxy在官方的软件源中,直接安装即可

udpxy没有独立的配置文件,修改参数直接在启动脚本中完成

udpxy手册页
udpxy - UDP到HTTP多播流量中继守护程序。

概要

1
udpxy [-vTS] [-a <listenaddr>] [-m <mcast_ifc_addr>] [-c <clients>] [-l <logfile>] [-B <sizeK>] [-R <msgs>] [-H <sec>] [-n <nice_incr>] [-M <sec>] -p <port>

描述

udpxy是UDP到HTTP多播流量中继守护程序:它将UDP流量从给定的多播订阅转发到请求的HTTP客户端。

udpxy监听(在专用地址/端口上)客户端发出的HTTP请求。客户请求的结构应为:

1
http://{ address }:{ port }/{ cmd }/{ mgroup_address }[ SEP ]{ mgroup_port }
1
2
3
4
5
[SEP]
:|%|〜| + | - | ^

{cmd},在
UDP | RTP

其中地址和端口与udpxy 的侦听地址/端口组合匹配,mgroup_address:mgroup_port标识要预订的多播组/通道。

1
2
3
4
5
UDP
# udp命令将对已知类型的有效负载(例如MPEG-TS和MPEG-TS上的RTP)进行udpxy探测;

RTP
# rtp命令使udpxy假定RTP超过MPEG-TS有效载荷,从而跳过探测器。

udpxy将为每个新的中继请求启动一个单独的客户端进程(在活动客户端的指定限制内​​)。客户端进程将(从UDP套接字)接收的所有网络流量从指定的多播组中继/转发到请求的HTTP连接。

udpxy还支持一些管理请求:

状态

1
http:// address:port / status /发回带有守护程序状态和客户端统计信息的HTML页面。

重新开始

1
http:// address:port / restart /关闭所有活动连接并重启。

例子

1
2
3
4
5
6
7
http://192.168.0.12:5056/udp/224.0.2.26:24012

http://192.168.0.12:5056/rtp/224.0.2.26:24012

http://192.168.0.15:5056/rtp/224.0.2.26^24055

http://192.168.0.15:5056/status/

选项

udpxy接受以下选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
-v
# 启用详细输出[default = disabled ]。

-S
# 启用客户端统计信息[default = disabled ]。

-T
# 不要作为守护进程运行[default = daemon if root ]。

-a <listenaddr>
# 要侦听的IPv4地址/接口[default = 0.0.0.0 ]。

-m <mcast_ifc_addr>
# (组播)源的IPv4地址/接口[默认= 0.0.0.0 ]。

-c <clients>
# 要接受的最大客户端数[default = 3,max = 5000 ]。

-l <logfile>
# 将输出记录到文件[default = stderr ]。

-B <sizeK>
# 入站(多播)数据的缓冲区大小(65536,32Kb,1Mb)[默认= 2048字节 ]。

-R <msgs>
# 要缓冲的最大消息数(-1 = 全部)[default = 1 ]。

-H <sec>
# 在缓冲区中保存数据的最长时间(以秒为单位)(- 1 = 无限制)[默认值= 1 ]。

-n <nice_incr>
# 好的值增量[default = 0 ]。

-M <sec>
# 每M秒更新一次多播订阅(如果为0则跳过)[default = 0 ]。

-p <port>
# 端口。

有效载荷类型和处理
udpxy 通过中继数据包中的MPEG-TS有效载荷识别MPEG-TS和RTP ; 如果udpxy遇到RTP有效载荷,它会自动将其“转换”为MPEG-TS(通过剥离RTP头),以便不识别RTP的媒体播放器仍然可以播放该流。

到目前为止,没有为其他有效负载类型执行转换。

录制Mpeg流量
udpxy包括将捕获的流量记录为原始MPEG-TS流到文件中的功能。此功能通过udpxrec启用:与udpxy链接在一起的捆绑应用程序(作为一个可执行文件)。

udpxrec通过符号链接(名为udpxrec)调用udpxy可执行文件(即不重命名 udpxy可执行文件)。

udpxrec创建封装MPEG-TS段的MPEG文件; 某些媒体播放器不会播放此类文件; 为了使它们可播放,必须将流转码为MPEG-PS; vlc’知道’如何进行这样的转码,这是一个命令行示例:

1
vlc input-ts.mpg --sout =“#std {access = file,mux = ps,dst = out-ps.mpg}”

由此产生的MPEG-PS文件可以由大多数媒体播放器播放。

环境

udpxy利用以下环境变量来补充其命令行选项; 变量被考虑用于大多数人不需要经常更改的选项(或者从命令行使用简单不方便)。

注意:如果存在与功能环境变量相交的命令行开关,则交换机始终具有更高的优先级。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
UDPXY_RCV_TMOUT
# 入站数据流(多播)的超时(秒),默认= 5 ;

UDPXY_DHOLD_TMOUT
# 在发送/刷新到客户端之前保持缓冲数据的超时(秒),默认值= 1 ;

UDPXY_SREAD_TMOUT
# 从监听socked(处理HTTP请求)读取超时(秒),默认= 1 ;

UDPXY_SWRITE_TMOUT
# 写入侦听socked(处理HTTP请求)的超时(秒),默认值= 1 ;

UDPXY_SSEL_TMOUT
# 在服务器循环中选择(2)的超时(秒)(如果使用pselect(2)则未使用),默认值= 30 ;

UDPXY_LQ_BACKLOG
# 侦听器套接字的backlog大小,默认值= 16 ;

UDPXY_SRV_RLWMARK
# 接收(m-cast)套接字上的低watermaek,默认= 0(未设置);

UDPXY_SSOCKBUF_NOSYNC
# 不同步入站(UDP)套接字的缓冲区大小(由-B设置的值),默认= 1(同步);

UDPXY_DSOCKBUF_NOSYNC
# 不同步出站(TCP)套接字的缓冲区大小(由-B设置的值),默认= 1(同步);

UDPXY_TCP_NODELAY
# 在新接受的套接字上禁用Nagle算法(更快的频道切换),默认= 1 ;

UDPXY_HTTP200_FTR_FILE
# 将给定文本文件的内容追加到HTTP 200响应中,default = none ;

UDPXY_HTTP200_FTR_LN
# 将文本(行)附加到HTTP 200响应,默认= 无 ;

UDPXY_ALLOW_PAUSES
# 如果在写入(2)上被阻塞,则继续读取数据直到缓冲区(-B <sizeK>)已满,默认= 禁用 ;

UDPXY_PAUSE_MSEC
# 在写入时阻塞时仅允许N毫秒读取数据(2)。

UDPXY_CONTENT_TYPE
# 在HTTP响应中指定自定义Content-Type。