我正在尝试使用带有IPV6地址的opencv中的VideoCapture函数将其从树莓派流到我的debian虚拟机,但尝试时出现标题错误。
我已确认netcat和mplayer可通过以下方式访问ipv6地址:
Debian主机:
netcat -l -6 -u 2222
树莓派:
/ opt / vc / bin / raspivid -t 0 -w 300 -h 300 -hf -fps 20 -o-| nc -u(ipv6地址)2222
代码:
ManagerId
编辑:我已经确认vcap.open可以和127.0.0.1一起使用,但是问题是它仍然不能与我的ipv6地址一起使用
答案 0 :(得分:1)
以您指定的格式<protocol>://
使用的IPv6地址必须放在方括号([
和]
)中。最初是在 RFC 2732, Format for Literal IPv6 Addresses in URL's 中指定的,并在 RFC 3896:, Uniform Resource Identifier (URI): Generic Syntax 中继续:
3.2.2。主持人
授权的主机子组件由IP文字标识 封装在方括号内的IPv4地址, 十进制形式或注册名称。主机子组件是大小写- 不敏感。 URI中是否存在主机子组件 表示该方案要求访问该主机上的给定主机 互联网。在许多情况下,主机语法仅用于以下目的: 重用为以下对象创建和部署的现有注册过程 DNS,从而获得全球唯一的名称,而无需花费 部署另一个注册表。但是,这种用法有其自己的 费用:域名所有权可能会因以下原因而随时间变化 URI生产者期望的。在其他情况下, 主机组件标识无关的注册名称 与互联网主机。我们将名称“主机”用于ABNF规则 因为那是它最常见的目的,而不是唯一的目的。
host = IP-literal / IPv4address / reg-name
主机的语法规则不明确,因为它并不完全 区分IPv4地址和注册表名称。为了 消除语法歧义后,我们应用“首次匹配获胜”算法: 主机匹配IPv4address的规则,则应将其视为 IPv4地址文字,而不是注册表名称。虽然主持人是 不区分大小写,生产者和规范化者应将小写字母用于 为了统一起见,注册名称和十六进制地址 而只将大写字母用于百分比编码。
由Internet协议文字地址(版本6)标识的主机 [RFC3513]或更高版本,通过封装IP文字加以区分 在方括号(“ [”和“]”)中。这是唯一的地方 URI语法中允许使用方括号字符。在 期待将来尚未定义的IP文字地址格式, 一个实现可以使用可选的版本标志来指示这样的 显式格式化而不是依靠启发式确定。
IP-literal = "[" ( IPv6address / IPvFuture ) "]" IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
版本标志不表示IP版本;相反,它 指示文字格式的未来版本。因此, 实现不能为现有的版本提供版本标志 IPv4和IPv6文字地址格式如下所述。如果是URI 包含以“ v”(不区分大小写)开头的IP文字, 指示存在版本标志,由 不知道该版本标志含义的应用程序,则 应用程序应为“地址”返回适当的错误 机制不受支持”。
由IPv6文字地址标识的主机在 没有先前版本标记的方括号。提供的ABNF 这是IPv6文字的文本定义的翻译 [RFC3513]中提供的地址。此语法不支持IPv6 范围内的寻址区标识符。
128位的IPv6地址被分为八个16位。每片 用不区分大小写的十六进制数字表示,使用一个 到四个十六进制数字(允许前导零)。八 编码后的部分以最高有效位开头,以冒号分隔 字符。可选地,最不重要的两个部分可以代替 以IPv4地址文本格式表示。一个或一个的序列 地址中更多连续的零值16位块可能是 删除,省略所有数字,并让两个连续正好保留 冒号来标记省略号。
IPv6address = 6( h16 ":" ) ls32 / "::" 5( h16 ":" ) ls32 / [ h16 ] "::" 4( h16 ":" ) ls32 / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 / [ *4( h16 ":" ) h16 ] "::" ls32 / [ *5( h16 ":" ) h16 ] "::" h16 / [ *6( h16 ":" ) h16 ] "::" ls32 = ( h16 ":" h16 ) / IPv4address ; least-significant 32 bits of address h16 = 1*4HEXDIG ; 16 bits of address represented in hexadecimal
由IPv4文字地址标识的主机表示为 点分十进制表示法( 如[RFC1123]中所述,范围为0到255,以“。”分隔。 参考[RFC0952]。请注意,其他形式的点分符号可能 可以在某些平台上进行解释,如第7.4节所述,但 此仅允许四个八位字节的点分十进制形式 语法。
IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet dec-octet = DIGIT ; 0-9 / %x31-39 DIGIT ; 10-99 / "1" 2DIGIT ; 100-199 / "2" %x30-34 DIGIT ; 200-249 / "25" %x30-35 ; 250-255
以注册名称标识的主机是一个字符序列 通常用于在本地定义的主机或服务中查找 名称注册表,尽管URI的特定于方案的语义可能需要 而是使用特定的注册表(或固定名称表)。的 最常见的名称注册机制是域名系统(DNS)。一种 用于在DNS中查找的注册名称使用定义的语法 在[RFC1034]的3.5节和[RFC1123]的2.1节中。这样的名字 由一系列以“。”分隔的域标签组成,每个域 标签以字母数字字符开头和结尾,可能 还包含“-”字符。完整域名的最右边域名 DNS中的限定域名后可以跟一个“。”。和 如果有必要区分完整 域名和一些本地域。
reg-name = *( unreserved / pct-encoded / sub-delims )
如果URI方案为主机定义了默认值,则该默认值 当主机子组件未定义或已注册时适用 名称为空(长度为零)。例如,“文件” URI方案是 定义为没有权限,空主机和“ localhost”均表示 最终用户的计算机,而“ http”方案认为缺少 权限或空主机无效。
此规范不要求特定的注册名称 查找技术,因此不限制reg-的语法 除了互操作性所必需的名称。相反,它 将注册名称语法一致性问题委托给 每个执行URI解析的应用程序的操作系统,以及 该操作系统决定出于以下目的允许的操作 主机标识。 URI解析实现可能使用DNS, 主机表,黄页,NetInfo,WINS或其他任何系统 查找注册名称。但是,全球范围的命名系统 例如URI所必需的DNS全限定域名 旨在具有全球范围。 URI生产者应使用以下名称 符合DNS语法,即使不是立即使用DNS 很明显,并且应将这些名称限制为不超过255个字符 长度。
reg-name语法允许使用百分比编码的八位字节,以便 以统一的方式表示非ASCII注册名称,即 独立于基础名称解析技术。非ASCII 必须首先根据UTF-8 [STD63]对字符进行编码,然后 对应的UTF-8序列的每个八位位组必须为百分比- 编码为URI字符。 URI产生 除非使用,否则应用程序不得在主机中使用百分比编码 代表UTF-8字符序列。当非ASCII注册时 名称代表旨在用于的国际化域名 通过DNS解析,名称必须转换为IDNA 在名称查找之前进行编码[RFC3490]。 URI生产者应提供 这些注册名称采用IDNA编码,而不是 百分比编码,如果他们希望最大程度地与 旧版URI解析器。