UDP源URL语法

铅MPEG2传输UDP来源将mpeg - 2传输流的数据通过UDP和TCP套接字。但它也可以发挥原始数据通过RTP数据包(H264、JPEG压缩等)。这些格式(如JPEG)包含所需的所有数据流的视频。其他人(例如,H264和未压缩的)需要通过额外信息的URL来描述数据格式。参见下面笔记,讨论如何描述原始H264 (注2),未压缩的视频(注3与动态RTP载荷()和视频注意4)。

铅MPEG2传输UDP来源将为16秒侦听传入的数据。如果没有收到在这段时间里,负载将会失败。超时的值可以改变使用下面描述的“超时”参数(注5)。

UDP流的字符串的格式如下:

udp://ip_address[:udp_port][/network_card][?param1=val1[&param2=val2]...[&paramN=valN]]
字符串为TCP流的格式如下:
tcp://ip_address[:udp_port][/network_card][?param1=val1[&param2=val2]...[&paramN=valN]]

UDP流

UDP流的字符串的格式如下:

ip_address

服务器的IP地址发送数据。这可以在平时的Ipv4格式(xxx.xxx.xxx.xxx),也可以是一个有效的主机地址inet_addr接受的标准函数。例如,主机127.0.0.1。

流被认为是多播如果第一个八位字节之间的Ipv4地址是224 . .239 (0 xe0 . .0 xef)。如果第一个八位字节并不在这个范围内,单播流。

network_card

(可选)。这是仅用于接收多播流。网卡的地址接收数据。如果是丢失,将使用默认的网卡。

udp_port

(可选)。的端口号来听。端口必须是一个从1到65535的数字。注意,不应被任何防火墙端口在客户端,在服务器上,或在客户机和服务器之间。

paramN = valN

(可选,仅以udp前缀有效)。参数用来描述原始的格式或RTP流包含动态载荷对某些样品。参见下面指出的可能值参数和值。多个参数对应该分开使用&的性格。

TCP流

字符串为TCP流的格式如下:

ip_address

服务器的IP地址发送数据。这可以在平时的Ipv4格式(xxx.xxx.xxx.xxx),也可以是一个有效的主机地址inet_addr接受的标准函数。例如,主机127.0.0.1。

TCP流不能多播。所有TCP流都假定为单播。

tcp_port

p >(可选)。的端口号来听。端口必须是一个从1到65535的数字。注意,不应被任何防火墙端口在客户端,在服务器上,或在客户机和服务器之间。

paramN = valN

(可选,仅以udp前缀有效)。参数用来描述原始的格式或RTP流包含动态载荷对某些样品。参见下面指出的可能值参数和值。多个参数对应该分开使用&的性格。

注1

UDP源过滤器所使用的参数列表。

paramN

这里是一个列表,上面描述的“paramN”参数:

日志记录

(可选的,默认值是0,没有日志记录)。表明UDP源是否应该记录时间信息,可以用来确定它什么时候开始接收数据。将这个参数设置为1启用日志和0禁用。

记住,日志将增加进程所使用的内存的数量,所以建议您禁用日志记录通过调用ILMUDPSrc::叠梁一旦收到流的开始时间被记录。开始时间可以用来同步两个UDP流收到独立通过记录绝对开始时间为每个流。有两个绝对的开始时间为两个或两个以上的流,一个可以计算时差,并排玩,或使用差异来找出哪些帧同时收到两个流。

必须启用日志记录的ILMUDPSrc: GetReceiveTime工作方法。

超时

(可选的,默认值是16秒)。表明多长时间(以秒为单位)UDP源将等待数据之前放弃。如果没有收到数据在这段时间里,过滤器将返回超时错误IFileSourceFilter:负载。看到注5为更多的细节。

rtpmap

(可选,只对RTP流或流动态载荷)。用于指定负载类型、压缩和采样率使用的RTP流。看到注2,注3,注意4下面的更多细节。

fmtp

(可选,只对RTP流)。用于提供compression-specific信息。看到注2注3下面的更多细节。

电脑及相关知识

(可选,只有原始流)。用于提供compression-specific信息。看到注6下面的更多细节。

延迟

(可选,仅为原始流。默认值是0 ms)。显示多少时间(以毫秒为单位)原始数据回放开始前应该缓冲。增加这个参数可能实现流畅播放原始流。例如,值500将为0.5秒之前玩视频缓冲数据。这意味着回放直播背后的0.5秒,但视频会更顺利,会容忍差异高达0.5秒在样品到达的时间。

注2

参数用来描述RTP H264视频流。

H264流发送内部RTP数据包使用动态载荷与96年和127年之间的负载类型。这些流只能解码时额外的信息被发送在一个单独的通信通道。最常见的方法发送这个额外的信息是通过会话描述协议(也称为SDP)。描述流的SDP包含额外的信息。UDP源只需要以下几点:

UDP源需要这些信息来处理这些流。有两个有用的参数(rtpmap和fmtp),和他们的语法描述如下:

rtpmap = payload_type;压缩/ RTP_units_per_second

RTPMAP参数

payload_type

有效载荷类型的值必须在96年和127年之间,包容性。

压缩

字符串描述压缩。只有H264的支持。

RTP_units_per_second

RTP的数量单位每秒。这个值通常是90000。

这些值通常是通过一个= rtpmap SDP中发送信息,就像下面的例子:99 H264/90000 = rtpmap:

这应该是翻译代替空间用分号(;):rtpmap = 99; H264/90000

一个示例URL为一个H264流发送到端口40000 RTP数据包的有效载荷99和序列头(NAL单元7和8)发送数据包内压缩流:

udp:/ / 192.168.1.100:40000 ? rtpmap = 99; H264/90000fmtp = payload_type; sprop-parameter-sets =“seq1 seq2 seqN”

FMTP参数

payload_type

有效载荷类型的值必须在96年和127年之间,包容性。它应该rtpmap参数中的值相匹配。

sprop-parameter-sets

序列的base64编码参数。有几个序列头时,用逗号分隔(,)。通常,有两种序列头。一个双引号()应该添加在列表序列的开始和结束。

这些值通常是通过SDP中发送信息一个= fmtp线,就像下面的例子:

96 = fmtp: packetization-mode = 1;profile-level-id = 420029;sprop-parameter-sets = Z0IAKeKQFge2BqwYBBuHiRFQ aM48gA = =

在上面的例子中,有两个序列头字符串sprop-parameter-sets后,用逗号分隔。UDP源过滤器只对sprop-parameter-sets领域感兴趣,所以这条线应该翻译成:

fmtp = 96; sprop-parameter-sets =“Z0IAKeKQFge2BqwYBBuHiRFQ aM48gA = =”

和这双应该附加到URL形式是这样的:

udp:/ / 192.168.1.100:40000 ? rtpmap = 99; H264/90000&fmtp = 96; sprop-parameter-sets = " Z0IAKeKQFge2BqwYBBuHiRFQ aM48gA = = "

上述URL语法描述流流在端口40000上,使用H264数据内部RTP数据包有效载荷类型设置为99,与90000 RTP单位每秒和序列的头不流的一部分。相反,他们通过fmtp sprop-parameter-sets组件的参数。

注3

参数用来描述RTP未压缩的视频流。

未压缩流发送内部RTP数据包使用动态载荷与96年和127年之间的负载类型。这些流只能解码额外的信息被发送时使用一个单独的通信通道。最常见的方法格式化这个额外的信息是会话描述协议,也称为SDP。SDP描述流。UDP源只需要以下几点:

UDP源需要这些信息来处理这些流。有两个有用的参数(rtpmapfmtp)和他们的语法描述如下:

rtpmap = payload_type;压缩/ RTP_units_per_second

未压缩的视频压缩:

rtpmap = payload_type;生/ RTP_units_per_secondfmtp = payload_type;抽样= sampling_mode;宽度= video_width;高度= video_height;深度= bits_per_channel

只能接受以下值:

这是一个有效的例子fmtp参数:

fmtp = 112;抽样= YCbCr-4:2:2;宽度= 1280;高度= 750;深度= 8

把两个参数一起,这个URL告诉UDP源滤波器加载未压缩,1280 x750 UYVY视频从8003端口:

udp:/ / 192.168.6.101:8003 ? rtpmap = 112;生/ 90000 &fmtp = 112;抽样= YCbCr-4:2:2;宽度= 1280;高度= 750;深度= 8

注意,上面的特定情况下,前几行包含VANC(非视频)数据。有用的视频可能只有720甚至480行。此外,有用的数据可能会从某个列在视频中。在这种情况下,使用导致视频作物过滤器剔除非图像数据,只留下有用的视频部分。这些细节都是设备特定的用来流视频;查阅设备的手动的更多信息。

有效的url的例子

udp: / / 127.0.0.1:9005——接收来自127.0.0.1的单播流在端口9005上

udp: / / 224.1.1.1:9005/20.5.1.200——接收多播流224.1.1.1在端口9005上使用的网卡20.5.1.200的IP地址

tcp: / / 127.0.0.1:9005——接收TCP流来自127.0.0.1(本地计算机)在端口9005上

udp: / / 192.168.1.100:40000 ? rtpmap = 99; H264/90000——接收包含原始H264视频序列的单播流头从192.168.1.100在端口40000上。流使用动态RTP数据包有效载荷99型和时间戳单位是1/90000秒。

udp:/ / 192.168.1.100:40000 ? rtpmap = 99; H264/90000&fmtp = 99; sprop-parameter-sets = " Z0IAKeKQFge2BqwYBBuHiRFQ aM48gA = = "

收到一个单播流含有生H264视频没有序列头192.168.1.100在端口40000上。流使用动态RTP数据包有效载荷99型和时间戳单位是1/90000秒。

udp:/ / 192.168.6.101:40000 ? rtpmap = 99;生/ 90000 &fmtp = 99;抽样= YCbCr-4:2:2;宽度= 1280;高度= 720;深度= 8

收到一个单播流包含原始未压缩的视频符合RFC 4175 192.168.6.100在端口40000上。流使用动态RTP数据包有效载荷99型和时间戳单位是1/90000秒。看到注6更多细节的语法在原始未压缩流。

注意4

参数用来描述流使用RTP数据包和动态载荷。

标准RTP包有一个静态载荷类型设置为值在内地1 - 34和可以自动识别负载类型。如果RTP数据包有效载荷大于96,UDP源滤波器无法确定格式。在这种情况下,通过指定的流信息rtpmap在URL参数:

rtpmap = payload_type;压缩/ RTP_units_per_second

压缩值

支持以下值压缩(区分大小写):

有效的url的例子

udp: / / 192.168.0.149:7800 ? rtpmap = 96; MPEG2——从192.168.0.149接收单播流在端口7800上包含的MPEG2视频里面RTP数据包有效载荷96。请注意,RTP_units_per_second是可选的,不是因为指定时间戳都分了时间戳封装内部的MPEG2头。

udp: / / 192.168.0.149:7800 ? rtpmap = 97; JPEG / 90000——接收单播流从包含JPEG在端口7800上192.168.0.149流在RTP数据包有效载荷96。计时信息使用每秒90000单位。

注5

超时(选择超时= xxx)。

在等待数据,ltmm发送应用程序EC_LOADSTATUS消息通知,UDP是等待数据来源。如果用户希望中止等,电话ResetSource将中止的装载过程E_ABORT错误。

附加的Timeout = xxxURL查询字符串来指定一个超时值。xxx是秒的等待多长时间的价值。默认值为16秒。通过0无限等待。

语法

udp: / / ip_address [/ network_card] [: udp_port] ?超时= xxx

超时参数可以结合其他参数使用“&”字符。例如,下面的URL将指定超时60秒,同时加载原始H264流:

udp:/ / 192.168.1.100:40000 ?超时= 60 &rtpmap = 99; H264/90000&fmtp = 96; sprop-parameter -集= " Z0IAKeKQFge2BqwYBBuHiRFQ aM48gA = = "

在上面的例子中,三个参数指定(超时,rtpmap, fmtp)。

该工具包发送EC_LOADSTATUSParam1设置为AM_LOADSTATUS_WAITING_FOR_DATAParam2将经过的毫秒数,因为UDP源开始等待。下面的例子中止等待10秒后:

LRESULT CMainFrame:: OnPlayerNotify(按钮按钮,LPARAM LPARAM){开关(按钮){情况下ltmmPlay_Notify_MediaEvent:lParam ltmmMediaEvent * pEventParams = (ltmmMediaEvent *);如果(pEventParams & & pEventParams - > lEventCode = = ltmmEC_LOADSTATUS){如果(pEventParams - > lParam1 = = ltmmAM_LOADSTATUS_PROGRAM_PACKET_RECEIVED){/ / MPEG2传输多路分配器已经发现有多少基本流的mpeg - 2传输流/ /现在可以告诉它加快负载,只有等待被发现的视频流ILMMpgDmx * pMpgDmx = GetMPEG2DemuxInterface ();如果(pMpgDmx){# ifdef EXCLUDE_NONVIDEO_STREAMSCMPEG2DemuxCallback: MarkNonVideoStreamsUnimportant (pMpgDmx);# endifpMpgDmx - >释放();}}其他的如果(pEventParams - > lParam1 = = ltmmAM_LOADSTATUS_WAITING_FOR_DATA)如果(pEventParams - > lParam2 > = 10000)m_player - > ResetSource ();/ /终止加载如果需要超过10秒}}}

注6

参数用来描述原始(non-RTP)流。

一些设备,像DM6467德州仪器编码器将原始H264流没有封装压缩数据流在RTP数据包。对于这些流,数据发送MPEG包前缀00 00 01字节序列。这些数据包的顺序头可能以罕见的间隔或可能永远不会被发送。对于这些流,使用比较参数,通过压缩和序列头被这条小溪。

即使序列头作为流程的一部分,传递回放会更快如果你通过序列头作为URL的一部分。如果你不通过序列头在URL中,回放才会开始收到标题序列。

语法

语法如下:

comp =压缩(;seq-headers =“xxx”)

压缩可以是下列之一:MPEG2,MPEG4,或H264

seq-headers是一个可选参数,指明特定的序列头压缩的二进制值转换为ascii。每个字节0 xab转换成字符串AB。例如,字节序列0 x00 0 x00 0 x01 0 x67 0×转换成字符串0000016742

生H264流可以表示如下:

comp = H264; seq-headers =“0000000167428028 f40481c8800000000168de3c80”

有效的url的例子:

udp:/ / 127.0.0.1:5678 ? comp = H264

接收原始H264流从5678端口不封装在RTP数据包。序列头被发送作为流的一部分。

udp:/ / 127.0.0.1:5678 ? comp = H264; seq-headers =“0000000167428028 f40481c8800000000168de3c80”
收到一个原始H264流从端口5678和00 00 01 67 42 80[…]德3 c 80序列头。

LEADTOOLS过滤器C API的帮助